Làm cách nào tôi có thể gán phím tắt cho tập lệnh nautilus?


10

Tôi đã thiết lập Tập lệnh Nautilus . Tôi đã đặt tập lệnh vào /home/sumeet/.local/share/nautilus/scriptsvà nó xuất hiện trong menu chuột phải. và cũng hoạt động như mong đợi. Tôi chỉ muốn gán một phím tắt cho kịch bản.


Làm cách nào tôi có thể tạo lối tắt bàn phím cho tập lệnh nautilus của mình?

Các câu trả lời trong câu hỏi trên nhắm đến một bản phát hành cụ thể và hoàn toàn lỗi thời và tôi không thể tìm thấy gì khác ngoài câu hỏi này liên quan đến chủ đề này.


Có thể được thực hiện, nhưng bạn cũng cần chỉnh sửa tập lệnh nautilus một chút. Có thể trong trường hợp của bạn? (Tôi nghi ngờ đó là :)). Cả hai Serg và tôi đã làm một cái gì đó như thế ở đây: Askubfox.com/questions/886642/ . Giải pháp đó có thể được áp dụng ở đây, nhưng phải lấy tập lệnh được nhắm mục tiêu để nhận tệp hoặc thư mục làm đối số.
Jacob Vlijm

@JacobVlijm đó là cùng một kịch bản ( bạn biết cái nào )
Sumeet Deshmukh

1
AHAAA, sau đó câu trả lời khá đơn giản. Tôi hy vọng tôi có thể đăng nó ở đâu đó ngày hôm nay.
Jacob Vlijm

@JacobVlijm đánh giá cao nó người đàn ông.
Sumeet Deshmukh

Xin chào Sumeet, tôi hứa rằng tôi sẽ áp dụng bản sửa lỗi bị mất và tìm thấy cho tất cả các lần xuất hiện của tập lệnh, bao gồm cả bản tôi vừa đăng. Ngay lập tức nếu tôi có thể thở lại :)
Jacob Vlijm

Câu trả lời:


6

Làm thế nào nó có thể được thực hiện

Khi bạn bấm chuột phải vào một tệp hoặc thư mục cho tập lệnh nautilus, tệp đã chọn sẽ được chuyển dưới dạng đối số cho tập lệnh. Trong hầu hết các trường hợp bởi một cái gì đó như:

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

... Sử dụng python3, ở dạng đơn giản nhất.

Nếu bạn thay thế điều này bằng cách:

import pyperclip

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

... tập tin hiện được chọn được sử dụng bên trong tập lệnh làm đối số

Những gì bạn cần

Để sử dụng giải pháp này (16.04 trở lên), bạn cần cài đặt cả hai xdotoolpython3-pyperclip:

sudo apt-get install python3-pyperclip xdotool

Kịch bản hoàn chỉnh, được đề cập trong các ý kiến

sau đó trở thành:

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

Thêm phần này vào phím tắt sẽ đặt biểu tượng cho tất cả các thư mục bên trong thư mục đã chọn.

Thêm nó vào một phím tắt (!)

Thêm các phím tắt, chạy các lệnh (script sử dụng-) xdotoolđể nhấn tổ hợp phím khác có thể khó khăn. Để ngăn cả hai tổ hợp phím can thiệp lẫn nhau, hãy sử dụng:

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

Giải trình

Khi nhấn Ctrl+ Ctrong khi tệp được chọn, đường dẫn đến tệp được sao chép vào bảng tạm. Chúng tôi đang mô phỏng các phím bấm với:

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

python's pyperclipmô-đun chỉ đơn giản là tạo ra con đường, tước từ file://khi sử dụng pyperclip.paste()(điều này sẽ không theo nghĩa đen dán, nhưng làm cho con đường có sẵn trong kịch bản).


1

Nếu mục tiêu là chọn tệp và thực thi các hành động thì có thể thực hiện bằng cách chỉ sử dụng tập lệnh shell với xdotoolxclip. Vì vậy, trước tiên cài đặt chúng:

sudo apt-get install xdotool xclip

Và sau đó tạo tập lệnh sau với các hành động bên trong vòng lặp:

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

Tập lệnh này không dựa vào các biến NAUTILUS và bạn có thể tạo một lối tắt với nó:

/bin/bash -c "sleep 1 && /path/script.bash"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.