Wie kann ich eine Tastenkombination für Nautilus-Skripte zuweisen?

10

Ich habe ein Nautilus-Skript eingerichtet . Ich habe das Skript eingefügt /home/sumeet/.local/share/nautilus/scriptsund es wird im Kontextmenü angezeigt. und funktioniert auch wie erwartet. Ich möchte dem Skript nur eine Verknüpfung zuweisen.


Wie kann ich Tastaturkürzel für meine Nautilus-Skripte erstellen?

Die Antworten in der obigen Frage zielen auf eine bestimmte Version ab und sind vollständig veraltet. Ich konnte nichts anderes als diese Frage zu diesem Thema finden.

Sumeet Deshmukh
quelle
Kann gemacht werden, aber Sie müssen das Nautilus-Skript auch ein bisschen bearbeiten. Ist das in deinem Fall möglich? (Ich vermute es ist :)). Bothe Serg und ich haben hier so etwas gemacht: askubuntu.com/questions/886642/… . Diese Lösung kann hier angewendet werden, benötigt jedoch das Zielskript, um die Datei oder das Verzeichnis als Argument zu erhalten.
Jacob Vlijm
@ JacobVlijm es ist das gleiche Skript ( Sie wissen, welches )
Sumeet Deshmukh
1
AHAAA, dann ist die Antwort ganz einfach. Ich hoffe ich kann es heute irgendwo posten.
Jacob Vlijm
@ JacobVlijm schätzen es Mann.
Sumeet Deshmukh
Hallo Sumeet, ich verspreche, dass ich das Fundsachen-Fix auf alle Vorkommen des Skripts anwenden werde, einschließlich des gerade veröffentlichten. Sofort, wenn ich wieder atmen kann :)
Jacob Vlijm

Antworten:

6

Wie es geht

Wenn Sie mit der rechten Maustaste auf eine Datei oder einen Ordner für ein Nautilus-Skript klicken, wird die ausgewählte Datei als Argument an das Skript übergeben. In den meisten Fällen durch etwas wie:

import os
subject = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI")

... mit Python3 in seiner einfachsten Form.

Wenn Sie dies ersetzen durch:

import pyperclip

subprocess.call(["xdotool", "key", "Control_L+c"])
subject = pyperclip.paste()

... wird die aktuell ausgewählte Datei im Skript als Argument verwendet

Was du brauchst

Um diese Lösung (16.04 und höher) verwenden zu können, müssen Sie beide installieren xdotoolund python3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

Das vollständige Skript, in den Kommentaren erwähnt

dann wird:

#!/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))
                ])

Wenn Sie dies zu einer Tastenkombination hinzufügen, werden die Symbole für alle Verzeichnisse innerhalb des ausgewählten Verzeichnisses festgelegt .

Hinzufügen zu einer Tastenkombination (!)

Das Hinzufügen von Tastenkombinationen und das Ausführen von xdotoolBefehlen (Skripte mit-) zum Drücken einer anderen Tastenkombination kann schwierig sein. Verwenden Sie Folgendes, um zu verhindern, dass sich beide Tastenkombinationen gegenseitig stören:

/bin/bash -c "sleep 1 && python3 /path/to/script.py"

Erläuterung

Wenn Ctrl+ Cgedrückt wird, während eine Datei ausgewählt ist, wird der Pfad zur Datei in die Zwischenablage kopiert. Wir simulieren den Tastendruck mit:

subprocess.call(["xdotool", "key", "Control_L+c"])

pythonDas pyperclipModul erzeugt einfach den Pfad, der file://bei der Verwendung entfernt wurde pyperclip.paste()(dies fügt nicht buchstäblich ein, sondern stellt den Pfad im Skript zur Verfügung).

Jacob Vlijm
quelle
1

Wenn das Ziel darin besteht, Dateien auszuwählen und Aktionen auszuführen, ist dies nur mit einem Shell-Skript mit xdotoolund möglich xclip. Installieren Sie sie also zuerst:

sudo apt-get install xdotool xclip

Erstellen Sie anschließend das folgende Skript mit den Aktionen in der Schleife:

#!/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

Dieses Skript basiert nicht auf den NAUTILUS-Variablen und Sie können damit eine Verknüpfung erstellen:

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