Як я можу призначити ярлик клавіатури для скриптів nautilus?


10

Я налаштував Nautilus Script . Я поставив сценарій /home/sumeet/.local/share/nautilus/scriptsі він відображається в меню правої кнопки миші. а також працює як очікувалося. Я просто хочу призначити ярлик сценарію.


Як я можу створити комбінації клавіш для моїх скриптів nautilus?

Відповіді, наведені у вищезазначеному запитанні, націлені на конкретний випуск та повністю застаріли, і я не міг знайти нічого, крім цього питання, що стосується цієї теми.


Це можна зробити, але вам також потрібно трохи відредагувати скрипт nautilus. Чи можливо це у вашому випадку? (Я підозрюю, що це :)). Боті Serg , і я зробив що - щось подібне тут: askubuntu.com/questions/886642 / ... . Це рішення можна застосувати тут, але для отримання файлу чи каталогу в якості аргументу потрібен цільовий скрипт.
Яків Влійм

@JacobVlijm це той самий сценарій ( ви знаєте, який )
Sumeet Deshmukh,

1
AHAAA, тоді відповідь досить проста. Я сподіваюся, що зможу розмістити його десь сьогодні.
Яків Влійм

@JacobVlijm цінують це людину.
Суме Дешмух

Привіт Sumeet, я обіцяю, що я застосую втрачену та знайдену корекцію до всіх випадків сценарію, включаючи те, що я щойно опублікував. Одразу, якщо я знову можу дихати :)
Яків Влійм

Відповіді:


6

Як це можна зробити

Коли ви клацніть правою кнопкою миші файл або папку для скрипта nautilus, вибраний файл передається як аргумент до сценарію. У більшості випадків чимось на кшталт:

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

... за допомогою python3, у його найпростішому вигляді.

Якщо ви заміните це на:

import pyperclip

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

... вибраний на даний момент файл використовується в якості аргументу всередині скрипту

Що тобі потрібно

Щоб використовувати це рішення (16.04 і вище), вам потрібно встановити і те, xdotoolі python3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

Повний сценарій, згаданий у коментарях

потім стає:

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

Якщо додати це до клавіші швидкого доступу, ви встановите піктограми для всіх каталогів всередині вибраного.

Додавання її до клавіші швидкого доступу (!)

Додавання клавіш швидкого доступу, виконання (використання скриптів за допомогою) xdotoolкоманд для натискання іншої комбінації клавіш може бути складним. Щоб обидві комбінації клавіш не заважали один одному, використовуйте:

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

Пояснення

Коли Ctrl+ Cнатискається, коли вибрано файл, шлях до файлу копіюється до буфера обміну. Ми моделюємо натискання клавіш за допомогою:

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

python's pyperclipмодуль просто виробляє шлях, позбавлений file://при використанні pyperclip.paste()(це не буде буквально вставляти, але зробить шлях доступним всередині сценарію).


1

Якщо мета полягає у виборі файлів та виконанні дій, це можна зробити за допомогою просто скрипта оболонки з xdotoolта xclip. Тому спочатку встановіть їх:

sudo apt-get install xdotool xclip

А потім створіть такий сценарій з діями всередині циклу:

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

Цей сценарій не покладається на змінні NAUTILUS, і ви можете створити ярлик за допомогою нього:

/bin/bash -c "sleep 1 && /path/script.bash"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.