如何在ranger文件管理器中定义新命令?

如何在ranger文件管理器中定义新命令?

我希望能够在游侠文件管理器通过输入如下内容:

:newcmd myarg

并用它运行任意代码。

命令定义还应该能够访问程序的状态,例如当前目录和选定的文件。

有没有办法做到这一点?

免责声明:由于缺乏关于此主题的优质资料,我创建了此问题并自行回答。非常欢迎提供其他答案。

答案1

编辑~/.config/ranger/commands.py以包含类似内容:

from ranger.api.commands import *

class newcmd(Command):
    def execute(self):
        if not self.arg(1):
            self.fm.notify('Wrong number of arguments', bad=True)
            return
        # First argument. 0 is the command name.
        self.fm.notify(self.arg(1))
        # Current directory to status line.
        self.fm.notify(self.fm.thisdir)
        # Run a shell command.
        self.fm.run(['touch', 'newfile')

现在您可以输入:

:newcmd myarg

运行定义的命令。

更多选项可在此处找到:https://github.com/hut/ranger/blob/9c585e48e14525f11d2405ea0bb9b5eba92e63e9/ranger/config/commands.py

然后,您可以更进一步为其定义一个地图,例如:添加到~/.config/ranger/rc.conf

map ,n console newcmd
map ,m newcmd default-arg 

现在您只需输入:

  • ,n在状态行上写入newcmd,并准备让用户输入第一个参数
  • ,m并使用默认参数立即运行命令

在 ranger 1.6.1 上测试。

相关内容