По состоянию на 2017 год исходный код (runner.py) делал это:
term = os.environ.get('TERMCMD', os.environ.get('TERM'))
if term not in get_executables():
term = 'x-terminal-emulator'
if term not in get_executables():
term = 'xterm'
if isinstance(action, str):
action = term + ' -e ' + action
else:
action = [term, '-e'] + action
поэтому вы должны быть в состоянии поместить любое xterm-совместимое имя программы в TERMCMD
. Однако обратите внимание на использование -e
(gnome-terminal не соответствует поведению xterm). Если вы используете Debian/Ubuntu/etc, разработчики пакетов Debian попытались создать обертку, скрывающую эту разницу в функции x-terminal-emulator
. Если это относится к вам, вы можете установить TERMCMD
в x-terminal-emulator
.
Последующая информация - хотя дизайн функции TERMCMD
не претерпел значительных изменений с середины 2016 года, местоположение в исходниках изменилось:
Это реализовано в get_term
:
def get_term():
"""Get the user terminal executable name.
Either $TERMCMD, $TERM, "x-terminal-emulator" or "xterm", in this order.
"""
command = environ.get('TERMCMD', environ.get('TERM'))
if shlex.split(command)[0] not in get_executables():
command = 'x-terminal-emulator'
if command not in get_executables():
command = 'xterm'
return command
который использует x-terminal-emulator
, как и раньше.
Существует связанное использование TERMCMD
в rifle.py
, используемое для выполнения команд, а не (как спрашивалось в вопросе) для открытия терминала. В любом случае, ключом к использованию ranger является x-terminal-emulator
, поскольку разработчики GNOME Terminal не документируют свой интерфейс командной строки, а разработчики Debian предоставили это обходное решение.
Цитата из Ошибка 701691 - -e принимает только один термин; все другие эмуляторы терминала принимают более одного терминала (которую разработчик отказался исправлять, отметив её как "не ошибку"):
Christian Persch 2013-06-06 16:02:54 UTC
Нет документации для опций командной строки gnome-terminal.