Nautilus komut dosyaları için klavye kısayolunu nasıl atayabilirim?


10

Bir Nautilus Script kurdum . Betiği koydum ve /home/sumeet/.local/share/nautilus/scriptssağ tıklama menüsünde görünüyor. ve beklendiği gibi çalışır. Sadece senaryoya bir kısayol atamak istiyorum.


Nautilus scriptlerim için klavye kısayollarını nasıl oluşturabilirim?

Yukarıdaki soruda verilen cevaplar belirli bir sürümü hedeflemektedir ve tamamen güncel değildir ve bu konuyla ilgili bu sorudan başka bir şey bulamadım.


Yapılabilir, ancak nautilus betiğini de biraz düzenlemeniz gerekir. Sizin durumunuzda bu mümkün mü? (Şüpheliyim :)). Bothe Serg ve ben burada böyle bir şey yaptık: askubuntu.com/questions/886642/… . Bu çözüm burada uygulanabilir, ancak dosyayı veya dizini bağımsız değişken olarak almak hedeflenen komut dosyasını alır.
Jacob Vlijm

@JacobVlijm aynı senaryo ( hangisini bildiğinizi biliyorsunuz )
Sumeet Deshmukh

1
AHAAA, o zaman cevap oldukça basit. Umarım bugün bir yere gönderebilirim.
Jacob Vlijm

@JacobVlijm takdir adamım.
Sümer Deshmukh

Merhaba Sumeet, kayıp ve bulunan düzeltmeyi, az önce yayınladığım da dahil olmak üzere, komut dosyasının tüm örneklerine uygulayacağım söz veriyorum. Hemen tekrar nefes alabilirsem :)
Jacob Vlijm

Yanıtlar:


6

Nasıl yapılabilir

Bir nautilus komut dosyası için bir dosya veya klasörü sağ tıklattığınızda, seçilen dosya komut dosyasına bağımsız değişken olarak iletilir. Çoğu durumda aşağıdaki gibi bir şeyle:

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

... en basit haliyle python3 kullanarak.

Bunu şu şekilde değiştirirseniz:

import pyperclip

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

... şu anda seçili olan dosya kod içinde bağımsız değişken olarak kullanılır

Neye ihtiyacın var

Her iki yüklemek için bu çözümü (yukarı 16.04 ve) kullanarak, gerek kullanmak için xdotoolve python3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

Yorumlarda belirtilen komut dosyasının tamamı

sonra olur:

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

Bunu bir kısayol tuşuna eklemek , seçilen kodun içindeki tüm dizinlerin simgelerini ayarlayacaktır .

Kısayol tuşuna ekleme (!)

Kısayol tuşları eklemek, başka bir tuş bileşimine xdotoolbasmak için komutları çalıştırmak (- kullanarak komutlar ) zor olabilir. Her iki tuş kombinasyonunun da birbirine müdahale etmesini önlemek için şunu kullanın:

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

açıklama

Bir dosya seçili durumdayken Ctrl+ Cdüğmesine basıldığında, dosya yolu panoya kopyalanır. Tuş basımını aşağıdakilerle simüle ediyoruz:

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

pythonbireyin pyperclipmodül sadece sıyrıldı yolu, üreten file://kullanırken pyperclip.paste()(bu anlamıyla yapıştırın ama senaryo içinde yol kullanılabilir hale olmaz).


1

Amaç dosyaları seçmek ve eylemleri yürütmekse, xdotoolve ile sadece kabuk komut dosyası kullanarak bunu yapmak mümkündür xclip. Önce bunları kurun:

sudo apt-get install xdotool xclip

Ardından, döngü içindeki eylemlerle aşağıdaki komut dosyasını oluşturun:

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

Bu komut dosyası NAUTILUS değişkenlerine bağlı değildir ve onunla bir kısayol oluşturabilirsiniz:

/bin/bash -c "sleep 1 && /path/script.bash"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.