¿Cómo puedo asignar un método abreviado de teclado para scripts de Nautilus?

¿Cómo puedo asignar un método abreviado de teclado para scripts de Nautilus?

He configurado unGuión Nautilus. Puse el script /home/sumeet/.local/share/nautilus/scriptsy aparece en el menú contextual. y también funciona como se esperaba. Sólo quiero asignar un acceso directo al script.


¿Cómo puedo crear atajos de teclado para mis scripts de Nautilus?

Las respuestas dadas en la pregunta anterior apuntan a una versión específica y están completamente desactualizadas, y no pude encontrar nada más que esta pregunta sobre este tema.

Respuesta1

¿Cómo se puede hacer?

Cuando hace clic derecho en un archivo o carpeta para una secuencia de comandos Nautilus, el archivo seleccionado se pasa como argumento a la secuencia de comandos. En la mayoría de los casos por algo como:

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

...usando python3, en su forma más simple.

Si reemplaza esto por:

import pyperclip

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

...la actualidadseleccionadoEl archivo se utiliza dentro del script como argumento.

Que necesitas

Para utilizar esta solución (16.04 y versiones posteriores), debe instalar ambos xdotooly python3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

El guión completo, mencionado en los comentarios.

luego se convierte en:

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

Agregar esto a una tecla de acceso directo configurará los íconos para todos los directoriosadentroel seleccionado.

Agregándolo a una tecla de acceso directo (!)

Agregar teclas de método abreviado, ejecutar (scripts usando-) xdotoolcomandos para presionarotroLa combinación de teclas puede ser complicada. Para evitar que ambas combinaciones de teclas interfieran entre sí, utilice:

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

Explicación

Cuando se presiona Ctrl+ mientras se selecciona un archivo, elCcaminoal archivo se copia al portapapeles. Estamos simulando la pulsación de tecla con:

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

pythonEl pyperclipmódulo simplemente produce la ruta, eliminada file://cuando se usa pyperclip.paste()(esto no se pegará literalmente, sino que hará que la ruta esté disponible dentro del script).

Respuesta2

Si el objetivo es seleccionar archivos y ejecutar acciones, es posible hacerlo usando solo un script de shell con xdotooly xclip. Así que primero instálalos:

sudo apt-get install xdotool xclip

Y luego crea el siguiente script con las acciones dentro del bucle:

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

Este script no depende de las variables NAUTILUS y puedes crear un acceso directo con él:

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

Respuesta3

  • Usando el procedimientodescrito aquí, puede agregar un acceso directo en Nautilus a un script de Nautilus. Esto vuelve a funcionar a partir del Nautilus 40.
  • Usando _el nombre del script nautilus, puede asignar una tecla de acceso rápido a un script. por ejemplo, aparecerá un script llamado "_Combine PDF" con la C subrayada. Cuando se selecciona un archivo, puede acceder rápidamente al script con Shift+ F10 c.

Puede organizar sus scripts en subcarpetas. Estas subcarpetas también aparecen como opciones de menú y conducen a un submenú. También se les puede asignar una tecla de acceso rápido con esta convención de nomenclatura.

información relacionada