J'ai mis en place un Nautilus Script . J'ai mis le script dans /home/sumeet/.local/share/nautilus/scripts
et il apparaît dans le menu contextuel. et fonctionne également comme prévu. Je veux juste assigner un raccourci au script.
Comment puis-je créer des raccourcis clavier pour mes scripts Nautilus?
Les réponses données dans la question ci-dessus ciblent une version spécifique et sont complètement obsolètes, et je n'ai rien trouvé d'autre que cette question concernant ce sujet.
Lorsque vous cliquez avec le bouton droit sur un fichier ou un dossier pour un script Nautilus, le fichier sélectionné est transmis en tant qu'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 en tant qu'argument
Pour utiliser cette solution (16.04 et plus), vous devez installer xdotool
et python3-pyperclip
:
Sudo apt-get install python3-pyperclip xdotool
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))
])
Ajouter ceci à une touche de raccourci définira les icônes pour tous les répertoires à l'intérieur celui sélectionné.
Ajouter des touches de raccourci, exécuter (des scripts utilisant-) xdotool
commandes à appuyer sur n autre la combinaison de touches peut être délicat. Pour empêcher les deux combinaisons de touches d’interférer, utilisez:
/bin/bash -c "sleep 1 && python3 /path/to/script.py"
Quand Ctrl+C est enfoncée lorsqu'un fichier est sélectionné, le chemin du fichier est copié dans le presse-papier. Nous simulons la presse à clé avec:
subprocess.call(["xdotool", "key", "Control_L+c"])
Le module python
de pyperclip
produit simplement le chemin, extrait de file://
lors de l'utilisation de pyperclip.paste()
(ce qui ne collera pas littéralement, mais rendra le chemin disponible dans le script).
Si l'objectif est de sélectionner des fichiers et d'exécuter des actions, il est possible de le faire en utilisant uniquement un script Shell avec xdotool
et xclip
. Alors installez-les d'abord:
Sudo apt-get install xdotool xclip
Et créez ensuite le script suivant avec les actions contenues dans la boucle:
#!/bin/bash
file=$(mktemp)
xdotool key "Control_L+c"
variable="$( xclip -out -selection clipboard)"
variable="$( echo -e "$variable" | \
awk 'BEGIN { FS = "\n" } { printf "\"%s\" ", $1 }' | \
sed -e s#\"\"## | \
sed 's/" "/"\n"/g')"
echo "$variable" > $file
if [ -s "$file" ]; then
while read absolute_path_file; do
absolute_path_file="$(eval echo "$absolute_path_file")"
base_name="$(basename "$absolute_path_file")"
### Execute the actions with the selected files here
### echo "$absolute_path_file"
### echo "$base_name"
done < $file
fi
Ce script ne repose pas sur les variables NAUTILUS et vous pouvez créer un raccourci avec:
/bin/bash -c "sleep 1 && /path/script.bash"