如何为 nautilus 脚本分配键盘快捷键?

如何为 nautilus 脚本分配键盘快捷键?

我已经设置了一个鹦鹉螺脚本。我已将脚本放入/home/sumeet/.local/share/nautilus/scripts,它确实出现在右键菜单中。并且也能按预期工作。我只想为脚本分配一个快捷方式。


如何为我的 nautilus 脚本创建键盘快捷键?

上述问题给出的答案针对的是特定版本并且完全过时了,除了这个问题之外我找不到有关该主题的任何其他内容。

答案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 及更高版本),您需要安装xdotoolpython3-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"])

pythonpyperclip模块仅生成路径,在file://使用时剥离pyperclip.paste()(这不会真正粘贴,但会使路径在脚本内部可用)。

答案2

如果目标是选择文件并执行操作,则可以使用带有 和 的 shell 脚本来完成xdotoolxclip因此,首先安装它们:

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

您可以将脚本组织到子文件夹中。这些子文件夹也会显示为菜单选项,从而引导至子菜单。还可以通过此命名约定为它们分配热键。

相关内容