Як це можна зробити
Коли ви клацніть правою кнопкою миші файл або папку для скрипта nautilus, вибраний файл передається як аргумент до сценарію. У більшості випадків чимось на кшталт:
import os
subject = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")
... за допомогою python3, у його найпростішому вигляді.
Якщо ви заміните це на:
import pyperclip
subprocess.call(["xdotool", "key", "Control_L+c"])
subject = pyperclip.paste()
... вибраний на даний момент файл використовується в якості аргументу всередині скрипту
Що тобі потрібно
Щоб використовувати це рішення (16.04 і вище), вам потрібно встановити і те, xdotool
і python3-pyperclip
:
sudo apt-get install python3-pyperclip xdotool
Повний сценарій, згаданий у коментарях
потім стає:
#!/usr/bin/env python3
import subprocess
import os
import sys
import pyperclip
# --- set the list of valid extensions below (lowercase)
# --- use quotes, *don't* include the dot!
ext = ["jpg", "jpeg", "png", "gif", "icns", "ico"]
# --- set the list of preferred filenames
# --- use quotes
specs = ["folder.png", "cover.png", "monkey.png"]
# ---
# retrieve the path of the targeted folder
subprocess.call(["xdotool", "key", "Control_L+c"])
dr = pyperclip.paste()
for root, dirs, files in os.walk(dr):
for directory in dirs:
folder = os.path.join(root, directory)
fls = os.listdir(folder)
try:
first = [p for p in fls if p in specs]
first = first[0] if first else min(
p for p in fls if p.split(".")[-1].lower() in ext
)
except ValueError:
pass
else:
subprocess.Popen([
"gvfs-set-attribute", "-t", "string",
os.path.abspath(folder), "metadata::custom-icon",
"file://"+os.path.abspath(os.path.join(folder, first))
])
Якщо додати це до клавіші швидкого доступу, ви встановите піктограми для всіх каталогів всередині вибраного.
Додавання її до клавіші швидкого доступу (!)
Додавання клавіш швидкого доступу, виконання (використання скриптів за допомогою) xdotool
команд для натискання іншої комбінації клавіш може бути складним. Щоб обидві комбінації клавіш не заважали один одному, використовуйте:
/bin/bash -c "sleep 1 && python3 /path/to/script.py"
Пояснення
Коли Ctrl+ Cнатискається, коли вибрано файл, шлях до файлу копіюється до буфера обміну. Ми моделюємо натискання клавіш за допомогою:
subprocess.call(["xdotool", "key", "Control_L+c"])
python
's pyperclip
модуль просто виробляє шлях, позбавлений file://
при використанні pyperclip.paste()
(це не буде буквально вставляти, але зробить шлях доступним всередині сценарію).