我已经设置了一个鹦鹉螺脚本。我已将脚本放入/home/sumeet/.local/share/nautilus/scripts
,它确实出现在右键菜单中。并且也能按预期工作。我只想为脚本分配一个快捷方式。
上述问题给出的答案针对的是特定版本并且完全过时了,除了这个问题之外我找不到有关该主题的任何其他内容。
答案1
如何实现
当您右键单击 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
的pyperclip
模块仅生成路径,在file://
使用时剥离pyperclip.paste()
(这不会真正粘贴,但会使路径在脚本内部可用)。
答案2
如果目标是选择文件并执行操作,则可以使用带有 和 的 shell 脚本来完成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"
答案3
- 使用过程此处概述,您可以在 Nautilus 中将快捷方式添加到 nautilus 脚本。从 Nautilus 40 开始,此功能再次可用。
- 使用
_
nautilus 脚本的名称,您可以为脚本分配热键。例如,名为“_Combine PDF”的脚本将显示带下划线的 C。选择文件后,您可以使用Shift+快速访问脚本F10 c。
您可以将脚本组织到子文件夹中。这些子文件夹也会显示为菜单选项,从而引导至子菜单。还可以通过此命名约定为它们分配热键。