1

Я хотел бы иметь возможность определять новые команды в файловом менеджере Ranger, набрав что-то вроде:

:newcmd myarg

и запустить произвольный код с ним.

Определение команды также должно иметь доступ к состоянию программы, например, к текущему каталогу и выбранным файлам.

Есть способ сделать это?

Отказ от ответственности: я создал этот вопрос и самостоятельно ответил на него из-за отсутствия хороших источников по этому вопросу. Дополнительные ответы приветствуются.

1 ответ1

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

Затем вы можете сделать еще один шаг и определить для него карту, например: add to ~/.config/ranger/rc.conf:

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

И теперь вы можете просто набрать:

  • ,n чтобы написать newcmd в строке состояния, и подготовиться к пользователю, чтобы ввести первый аргумент
  • ,m и сразу же запустить команду с аргументом по умолчанию

Проверено на рейнджере 1.6.1.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .