Comment faire
Lorsque vous cliquez avec le bouton droit sur un fichier ou un dossier pour un script nautilus, le fichier sélectionné est transmis comme argument au script. Dans la plupart des cas, par quelque chose comme:
import os
subject = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")
... en utilisant python3, dans sa forme la plus simple.
Si vous remplacez ceci par:
import pyperclip
subprocess.call(["xdotool", "key", "Control_L+c"])
subject = pyperclip.paste()
... le fichier actuellement sélectionné est utilisé dans le script comme argument
De quoi as-tu besoin
Pour utiliser cette solution (16.04 et plus), vous devez installer les deux xdotool
et python3-pyperclip
:
sudo apt-get install python3-pyperclip xdotool
Le script complet, mentionné dans les commentaires
devient alors:
#!/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))
])
L'ajout de cela à une touche de raccourci définira les icônes de tous les répertoires à l' intérieur du répertoire sélectionné.
L'ajouter à une touche de raccourci (!)
Ajouter des touches de raccourci, exécuter des scripts (en utilisant-) xdotool
pour appuyer sur une autre combinaison de touches peut être délicat. Pour éviter que les deux combinaisons de touches interfèrent l'une avec l'autre, utilisez:
/bin/bash -c "sleep 1 && python3 /path/to/script.py"
Explication
Lorsque Ctrl+ Cest enfoncé alors qu'un fichier est sélectionné, le chemin d' accès au fichier est copié dans le presse-papiers. Nous simulons la pression des touches avec:
subprocess.call(["xdotool", "key", "Control_L+c"])
python
Le pyperclip
module produit simplement le chemin, supprimé file://
lors de l'utilisation pyperclip.paste()
(cela ne collera pas littéralement, mais rendra le chemin disponible dans le script).