Как определить новые команды в файловом менеджере рейнджера?
Я хотел бы иметь возможность определять новые команды в файловом менеджере 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
и немедленно запустите команду с аргументом по умолчанию
Проверено на рейнджере 1.6.1.