Làm thế nào nó có thể được thực hiện
Khi bạn bấm chuột phải vào một tệp hoặc thư mục cho tập lệnh nautilus, tệp đã chọn sẽ được chuyển dưới dạng đối số cho tập lệnh. Trong hầu hết các trường hợp bởi một cái gì đó như:
import os
subject = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")
... Sử dụng python3, ở dạng đơn giản nhất.
Nếu bạn thay thế điều này bằng cách:
import pyperclip
subprocess.call(["xdotool", "key", "Control_L+c"])
subject = pyperclip.paste()
... tập tin hiện được chọn được sử dụng bên trong tập lệnh làm đối số
Những gì bạn cần
Để sử dụng giải pháp này (16.04 trở lên), bạn cần cài đặt cả hai xdotool
và python3-pyperclip
:
sudo apt-get install python3-pyperclip xdotool
Kịch bản hoàn chỉnh, được đề cập trong các ý kiến
sau đó trở thành:
#!/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))
])
Thêm phần này vào phím tắt sẽ đặt biểu tượng cho tất cả các thư mục bên trong thư mục đã chọn.
Thêm nó vào một phím tắt (!)
Thêm các phím tắt, chạy các lệnh (script sử dụng-) xdotool
để nhấn tổ hợp phím khác có thể khó khăn. Để ngăn cả hai tổ hợp phím can thiệp lẫn nhau, hãy sử dụng:
/bin/bash -c "sleep 1 && python3 /path/to/script.py"
Giải trình
Khi nhấn Ctrl+ Ctrong khi tệp được chọn, đường dẫn đến tệp được sao chép vào bảng tạm. Chúng tôi đang mô phỏng các phím bấm với:
subprocess.call(["xdotool", "key", "Control_L+c"])
python
's pyperclip
mô-đun chỉ đơn giản là tạo ra con đường, tước từ file://
khi sử dụng pyperclip.paste()
(điều này sẽ không theo nghĩa đen dán, nhưng làm cho con đường có sẵn trong kịch bản).