Почему tmux устанавливает переменную TERM на экран?

19

Ссылаясь на справочную tmuxстраницу:

Переменная окружения TERM должна быть установлена ​​на «screen» для всех программ, работающих внутри tmux. В новых окнах автоматически будет добавлено «TERM = screen» в их среду, но необходимо соблюдать осторожность, чтобы не сбросить это в файлах запуска оболочки.

Это потому, что tmuxсессия может быть присоединена к любому терминалу (например, удаленному), screenявляющемуся наименьшим общим знаменателем? Если я знаю свой терминал, могу ли я принудительно запустить его без неожиданных результатов или сломаются некоторые неподдерживаемые возможности (например, прокрутка)?

Sevo
источник

Ответы:

13

Это делается для того, чтобы воспользоваться преимуществами ранее установленного описания терминала для экрана GNU.

И tmux, и screen предоставляют приложениям (более или менее) «одинаковые» описания терминалов для упрощения подключения с разных терминалов. Программы tmux и screen должны обрабатывать различия между внутренним (TERM = screen) и внешним (xterm, linux и т. Д.). Таким образом, screenописание терминала было установлено "везде" (обычно с помощью ncurses).

Есть некоторые отличия:

  • Экран GNU имеет очень старую проблему, представляющую функцию «выдающегося» (которая технически не является специфической функцией терминала, а скорее абстракцией для удобства приложений curses). Tmux не имеет этого ограничения. Но улучшенный TERM = tmux не обязательно «везде».
  • Экран GNU имеет функцию для использования описаний гибридных терминалов. Учитывая внешний TERM = xterm и существование «screen.xterm», он выберет его для внутреннего значения TERM. (см., например, базу данных терминала ). tmux этого не делает.
Томас Дики
источник
5

Начиная с tmux 2.1 , вы можете использовать tmux terminfo :

'default-terminal' теперь является опцией сеанса. Кроме того, если для этого параметра установлено значение «screen- *», эмулируйте, что делает экран. Если требуется курсив, его можно установить в «tmux», но он все еще новый и не обязательно поддерживается на всех платформах с более старой установкой ncurses.

jasonwryan
источник