Comment attribuer un raccourci clavier aux scripts nautilus?

10

J'ai configuré un script Nautilus . J'ai mis le script /home/sumeet/.local/share/nautilus/scriptset il apparaît dans le menu contextuel. et fonctionne également comme prévu. Je veux juste attribuer un raccourci au script.


Comment 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.

Sumeet Deshmukh
la source
Cela peut être fait, mais vous devez également modifier un peu le script nautilus. Est-ce possible dans votre cas? (Je soupçonne que c'est :)). Bothe Serg et moi avons fait quelque chose comme ça ici: askubuntu.com/questions/886642/… . Cette solution peut être appliquée ici, mais il faut le script ciblé pour recevoir le fichier ou le répertoire en argument.
Jacob Vlijm
@JacobVlijm c'est le même script ( vous savez lequel )
Sumeet Deshmukh
1
AHAAA, alors la réponse est assez simple. J'espère pouvoir le publier quelque part aujourd'hui.
Jacob Vlijm
@JacobVlijm l'apprécie l'homme.
Sumeet Deshmukh
Salut Sumeet, je promets que j'appliquerai le correctif perdu et trouvé à toutes les occurrences du script, y compris celle que je viens de publier. Immédiatement si je peux respirer à nouveau :)
Jacob Vlijm

Réponses:

6

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 xdotoolet 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-) xdotoolpour 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"])

pythonLe pyperclipmodule 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).

Jacob Vlijm
la source
1

Si l'objectif est de sélectionner des fichiers et d'exécuter des actions, il est possible de le faire en utilisant simplement un script shell avec xdotoolet xclip. Alors installez-les d'abord:

sudo apt-get install xdotool xclip

Et puis créez le script suivant avec les actions à l'intérieur de 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 lui:

/bin/bash -c "sleep 1 && /path/script.bash"
Rafael Muynarsk
la source