Dlaczego tmux ustawia zmienną TERM na screen?

19

Cytowanie tmuxstrony podręcznika :

Zmienna środowiskowa TERM musi być ustawiona na „screen” dla wszystkich programów działających w tmux. Nowe okna będą automatycznie dodawać „TERM = screen” do swojego środowiska, ale należy uważać, aby nie zresetować tego w plikach startowych powłoki.

Czy dzieje się tak, ponieważ tmuxsesję można podłączyć do dowolnego terminala (np. Zdalnego), screenbędąc najniższym wspólnym mianownikiem? Jeśli znam mój terminal, czy mogę wymusić go bez nieoczekiwanych wyników, czy też niektóre nieobsługiwane funkcje ulegną awarii (np. Przewijaniu)?

sevo
źródło

Odpowiedzi:

13

Robi to, aby skorzystać z wcześniej zainstalowanego opisu terminala dla ekranu GNU.

Zarówno tmux, jak i screen zapewniają aplikacjom (mniej więcej) „takie same” opisy terminali, aby uprościć łączenie z różnych terminali. Programy tmux i screen mają obsługiwać różnice między wewnętrznymi (TERM = screen) i zewnętrznymi (xterm, linux itp.). Tak więc screenopis terminala został zainstalowany „wszędzie” (zwykle przez ncurses).

Istnieją pewne różnice:

  • Ekran GNU ma bardzo stary problem reprezentujący funkcję „wyróżniającą się” (która technicznie nie jest konkretną funkcją terminalu, ale raczej abstrakcją dla wygody aplikacji klątw). Tmux nie ma tego ograniczenia. Ale poprawiony TERM = tmux niekoniecznie jest „wszędzie”.
  • Ekran GNU ma funkcję używania opisów terminali hybrydowych. Biorąc pod uwagę zewnętrzny TERM = xterm i istnienie „screen.xterm”, wybierze to dla wewnętrznej wartości TERM. (patrz na przykład baza danych terminali ). tmux tego nie robi.
Thomas Dickey
źródło
5

Począwszy od tmux 2.1 , możesz używać tmux terminfo :

„default-terminal” jest teraz opcją sesji. Ponadto, jeśli jest ustawione na „screen- *”, to emuluj, co robi screen. Jeśli wymagana jest kursywa, można ustawić tę opcję na „tmux”, ale jest to wciąż nowa i niekoniecznie obsługiwana na wszystkich platformach ze starszymi instalacjami ncurses

jasonwryan
źródło