如何为 nautilus 制作自定义右键单击命令?

Mat*_*hew 10 nautilus-script

可能的重复:
如何在 Nautilus 中自定义上下文菜单?

我正在尝试为Mark as executablenautilus 中的右键单击创建一个命令,以加快工作流程。我想出了这个脚本:

#! /bin/bash
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
gksudo "chmod +x $file" &
done
Run Code Online (Sandbox Code Playgroud)

我如何让这个工作。我目前有一个.sh文件,但不知道把它放在哪里。

hyt*_*omo 9

只需将此文件保存为“标记为可执行文件”,使其自身可执行并将其拖放到~/.gnome2/nautilus-scripts 它会显示在您的右键菜单中,在子菜单下Scripts

gksudo如果您打算仅将您拥有的文件(在您的主目录下)标记为可执行文件,您可能希望从那里删除,否则,每次通过右键单击菜单运行脚本时,它都会要求您输入密码。 ..

但是您在那里的脚本不适用于文件名包含空格的文件。为了使其适用于他们,您必须将脚本更改为以下内容:

#!/bin/bash 

IFS_BAK=$IFS
IFS="
"

for line in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
   if [[ "$line" = "" || "$line" = " " ]]; then
      exit
   else
      chmod +x "$line"
   fi
done

IFS=$IFS_BAK
IFS_BAK=
Run Code Online (Sandbox Code Playgroud)

此外,您可以为“标记为可执行文件”创建自己的条目。但是,为了启用它,您需要安装 python-nautilus 包:

sudo apt-get install python-nautilus
Run Code Online (Sandbox Code Playgroud)

然后将此文件保存为mark_as_executable.py~/.local/share/nautilus-python/extensions/

#!/usr/bin/env python
# -*- coding: utf8 -*-

from gi.repository import Nautilus, GObject, Gio
from os import system
import urllib

class BackgroundImageExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        print 'Mark as executable extensions is being initialized'

    def menu_activate_cb(self, menu, file):
        if file.is_gone():
            return
        system("chmod +x '"+urllib.unquote(file.get_uri()[7:])+"' &")

    def get_file_items(self, window, files):
        if len(files) != 1:
            return
        file = files[0]

        if file.get_uri_scheme() != 'file':
            return
        item = Nautilus.MenuItem(name='Nautilus::set_executable_bit', label='Mark as executable', tip='Add the executable bit to the selected file')
        item.connect('activate', self.menu_activate_cb, file)
        return item,
Run Code Online (Sandbox Code Playgroud)

以上仅适用于单个文件,如果您想添加对多个文件的支持,则必须将其粘贴到 python 脚本中,但是:

#!/usr/bin/env python
# -*- coding: utf8 -*-

from gi.repository import Nautilus, GObject, Gio
from os import system
import urllib

class BackgroundImageExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        print 'Mark as executable extensions is being initialized'

    def menu_activate_cb(self, menu, file):
        if file.is_gone():
            return
        system("chmod +x '"+urllib.unquote(file.get_uri()[7:])+"' &")

    def get_file_items(self, window, files):

        item = Nautilus.MenuItem(name='Nautilus::set_executable_bit', label='Mark as executable', tip='Add the executable bit to the selected file')
        for yourfile in files:
            if yourfile.get_uri_scheme() != 'file':
                return
            item.connect('activate', self.menu_activate_cb, yourfile)

        return item,
Run Code Online (Sandbox Code Playgroud)

为了能够使用该功能,您还需要重新启动 nautilus:

nautilus -q
Run Code Online (Sandbox Code Playgroud)

然后打开一个鹦鹉螺窗口。