如何为 Nautilus 创建自定义右键单击命令?

如何为 Nautilus 创建自定义右键单击命令?

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

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

#! /bin/bash
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
gksudo "chmod +x $file" &
done

但是我该如何让它工作呢?我现在有一个.sh文件,但不知道把它放在哪里。

答案1

只需将此文件保存为“标记为可执行文件”,使其本身可执行,然后将其拖放到~/.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=

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

sudo apt-get install python-nautilus

然后将此文件保存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,

上述内容仅适用于单个文件,如果您想添加对多个文件的支持,则必须将其粘贴到 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,

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

nautilus -q

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

相关内容