Come posso assegnare una scorciatoia da tastiera per gli script nautilus?


10

Ho installato uno script Nautilus . Ho inserito lo script /home/sumeet/.local/share/nautilus/scriptse appare nel menu di scelta rapida. e funziona anche come previsto. Voglio solo assegnare un collegamento allo script.


Come posso creare scorciatoie da tastiera per i miei script nautilus?

Le risposte fornite nella domanda precedente hanno come obiettivo una versione specifica e sono completamente obsolete e non sono riuscito a trovare nient'altro che questa domanda relativa a questo argomento.


Può essere fatto, ma è necessario modificare un po 'anche lo script nautilus. È possibile nel tuo caso? (Sospetto che sia :)). Bothe Serg e io abbiamo fatto qualcosa del genere qui: askubuntu.com/questions/886642/… . Questa soluzione può essere applicata qui, ma richiede lo script di destinazione per ricevere il file o la directory come argomento.
Jacob Vlijm,

@JacobVlijm è lo stesso copione ( sai quale )
Sumeet Deshmukh

1
AHAAA, allora la risposta è abbastanza semplice. Spero di poterlo pubblicare da qualche parte oggi.
Jacob Vlijm,

@JacobVlijm lo apprezzo amico.
Sumeet Deshmukh,

Ciao Sumeet, prometto che applicherò la correzione persa e trovata a tutte le occorrenze dello script, incluso quello che ho appena pubblicato. Immediatamente se riesco a respirare di nuovo :)
Jacob Vlijm,

Risposte:


6

Come si può fare

Quando si fa clic con il pulsante destro del mouse su un file o una cartella per uno script nautilus, il file selezionato viene passato come argomento allo script. Nella maggior parte dei casi da qualcosa come:

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

... usando python3, nella sua forma più semplice.

Se lo sostituisci con:

import pyperclip

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

... il file attualmente selezionato viene utilizzato all'interno dello script come argomento

Quello di cui hai bisogno

Per utilizzare questa soluzione (16.04 e successive), è necessario installare entrambi xdotoole python3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

Lo script completo, menzionato nei commenti

quindi diventa:

#!/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'aggiunta di questo a un tasto di scelta rapida imposterà le icone per tutte le directory all'interno di quella selezionata.

Aggiungendolo a un tasto di scelta rapida (!)

L'aggiunta di tasti di scelta rapida, l'esecuzione di xdotoolcomandi (script mediante-) per premere un'altra combinazione di tasti può essere complicata. Per evitare che entrambe le combinazioni di tasti interferiscano tra loro, utilizzare:

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

Spiegazione

Quando Ctrl+ Cviene premuto mentre è selezionato un file, il percorso del file viene copiato negli Appunti. Stiamo simulando la pressione del tasto con:

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

pythonIl pyperclipmodulo semplicemente produce il percorso, rimosso file://dall'uso pyperclip.paste()(questo non incolla letteralmente, ma rende disponibile il percorso all'interno dello script).


1

Se l'obiettivo è selezionare i file ed eseguire azioni è possibile farlo usando solo lo script della shell con xdotoole xclip. Quindi prima installali:

sudo apt-get install xdotool xclip

E quindi creare il seguente script con le azioni all'interno del ciclo:

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

Questo script non si basa sulle variabili NAUTILUS e puoi creare un collegamento con esso:

/bin/bash -c "sleep 1 && /path/script.bash"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.