Bagaimana cara menetapkan pintasan keyboard untuk skrip nautilus?

10

Saya sudah menyiapkan Script Nautilus . Saya telah memasukkan skrip /home/sumeet/.local/share/nautilus/scriptsdan muncul di menu klik kanan. dan juga berfungsi seperti yang diharapkan. Saya hanya ingin menetapkan cara pintas ke skrip.


Bagaimana saya bisa membuat pintasan keyboard untuk skrip nautilus saya?

Jawaban yang diberikan dalam pertanyaan di atas menargetkan rilis khusus dan benar-benar ketinggalan zaman, dan saya tidak dapat menemukan apa pun selain pertanyaan ini mengenai topik ini.

Sumeet Deshmukh
sumber
Dapat dilakukan, tetapi Anda perlu mengedit skrip nautilus juga. Apakah itu mungkin dalam kasus Anda? (Saya curiga itu :)). Baik Serg dan saya melakukan sesuatu seperti itu di sini: askubuntu.com/questions/886642/… . Solusi itu dapat diterapkan di sini, tetapi dibutuhkan skrip yang ditargetkan untuk menerima file atau direktori sebagai argumen.
Jacob Vlijm
@JacobVlijm ini skrip yang sama ( Anda tahu yang mana )
Sumeet Deshmukh
1
AHAAA, maka jawabannya cukup sederhana. Saya harap saya dapat mempostingnya di suatu tempat hari ini.
Jacob Vlijm
@JacobVlijm menghargainya kawan.
Sumeet Deshmukh
Hai Sumeet, saya berjanji saya akan menerapkan perbaikan yang hilang & ditemukan untuk semua kemunculan skrip, termasuk yang baru saja saya posting. Segera jika saya bisa bernapas lagi :)
Jacob Vlijm

Jawaban:

6

Bagaimana itu bisa dilakukan

Ketika Anda mengklik kanan file atau folder untuk skrip nautilus, file yang dipilih diteruskan sebagai argumen ke skrip. Dalam kebanyakan kasus oleh sesuatu seperti:

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

... menggunakan python3, dalam bentuknya yang paling sederhana.

Jika Anda mengganti ini dengan:

import pyperclip

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

... file yang dipilih saat ini digunakan di dalam skrip sebagai argumen

Apa yang kau butuhkan

Untuk menggunakan solusi ini (16.04 dan lebih tinggi), Anda harus menginstal keduanya xdotooldan python3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

Script lengkap, disebutkan dalam komentar

kemudian menjadi:

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

Menambahkan ini ke tombol cara pintas akan mengatur ikon untuk semua direktori di dalam yang dipilih.

Menambahkannya ke tombol pintas (!)

Menambahkan tombol pintas, menjalankan xdotoolperintah (menggunakan skrip-) untuk menekan kombinasi tombol lain mungkin rumit. Untuk mencegah kedua kombinasi tombol saling mengganggu, gunakan:

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

Penjelasan

Ketika Ctrl+ Cditekan saat file dipilih, jalur ke file disalin ke clipboard. Kami mensimulasikan penekanan tombol dengan:

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

python's pyperclipmodul hanya menghasilkan jalan, dilucuti dari file://ketika menggunakan pyperclip.paste()(ini tidak akan secara harfiah menempelkan, tetapi membuat jalan tersedia di dalam script).

Yakub Vlijm
sumber
1

Jika tujuannya adalah untuk memilih file dan menjalankan tindakan, maka dimungkinkan untuk melakukannya hanya dengan menggunakan skrip shell dengan xdotooldan xclip. Jadi instal dulu:

sudo apt-get install xdotool xclip

Dan kemudian buat skrip berikut dengan tindakan di dalam loop:

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

Skrip ini tidak bergantung pada variabel NAUTILUS dan Anda dapat membuat pintasan dengannya:

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