ฉันจะกำหนดแป้นพิมพ์ลัดสำหรับสคริปต์หอยโข่งได้อย่างไร


10

ฉันตั้งค่าสคริปต์ Nautilusแล้ว ฉันใส่สคริปต์/home/sumeet/.local/share/nautilus/scriptsแล้วและมันจะปรากฏในเมนูคลิกขวา และทำงานได้ตามที่คาดไว้ ฉันแค่ต้องการกำหนดทางลัดให้กับสคริปต์


ฉันจะสร้างแป้นพิมพ์ลัดสำหรับสคริปต์หอยโข่งได้อย่างไร

คำตอบที่ให้ในคำถามด้านบนกำหนดเป้าหมายการวางจำหน่ายเฉพาะและล้าสมัยไปแล้วและฉันไม่พบสิ่งใดนอกจากคำถามนี้เกี่ยวกับหัวข้อนี้


สามารถทำได้ แต่คุณต้องแก้ไขสคริปต์หอยโข่งด้วย เป็นไปได้ในกรณีของคุณ? (ฉันสงสัยว่ามันคือ :)) Bothe Serg และฉันไม่สิ่งที่ต้องการที่นี่: askubuntu.com/questions/886642/... วิธีการแก้ปัญหานั้นสามารถใช้ได้ที่นี่ แต่ใช้สคริปต์เป้าหมายเพื่อรับไฟล์หรือไดเรกทอรีเป็นอาร์กิวเมนต์
Jacob Vlijm

@JacobVlijm มันเป็นสคริปต์เดียวกัน ( คุณรู้ว่าที่หนึ่ง )
Sumeet Deshmukh

1
AHAAA นั้นคำตอบนั้นค่อนข้างง่าย ฉันหวังว่าฉันสามารถโพสต์ไว้ที่ใดก็ได้ในวันนี้
Jacob Vlijm

@JacobVlijm ซาบซึ้งกับผู้ชาย
Sumeet Deshmukh

สวัสดี Sumeet ฉันสัญญาฉันจะใช้การแก้ไขที่หายไป & พบกับสคริปต์ทั้งหมดที่เกิดขึ้นรวมถึงสิ่งที่ฉันเพิ่งโพสต์ ทันทีถ้าฉันสามารถหายใจได้อีกครั้ง :)
จาค็อบ Vlijm

คำตอบ:


6

สามารถทำได้อย่างไร

เมื่อคุณคลิกขวาที่ไฟล์หรือโฟลเดอร์สำหรับสคริปต์หอยโข่งไฟล์ที่เลือกจะถูกส่งเป็นอาร์กิวเมนต์ของสคริปต์ ในกรณีส่วนใหญ่โดยสิ่งที่ชอบ:

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"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.