Naprawiono podświetlanie w tmux

18

Brakuje mi podświetlania (tryb odwrotny) na konsoli, ponieważ zacząłem używać urxvt + tmux jako głównego terminalu. Podkreślenia zostały zastąpione czcionką kursywą - co na początku wygląda całkiem fajnie - jednak nie mogę znaleźć jednego kursywy w tysiącach, gdy nie jest kursywa, gdy próbuję wyszukać coś w less.

Działa to poprawnie, gdy typ terminala jest ustawiony na xterm*profil (np. set -g default-terminal "xterm-color"W .tmux.conf ). Jednak niektóre skróty nie działają, aplikacje nie mogą uzyskać prawidłowej geometrii terminala ... w tym przypadku.

andras.tim
źródło

Odpowiedzi:

10

Znalazłem informacje i rozwiązania na ten temat na stronach tmux:

Opis terminfo na ekranie nie ma trybu kursywy i ma na swoim miejscu tryb wyróżniający, ale używa tej samej sekwencji specjalnej, która urxvtużywa kursywy. Oznacza to, że aplikacje (takie jak vim) szukające kursywy nie znajdą jej i mogą zamienić się na odwrotne w miejscu, podczas gdy aplikacje (np. Mniej) proszące o wyróżnienie kończą się kursywą zamiast odwrotnym.

[Poprawka 1] Zamień wpisy terminfo i uzyskaj zwrot + kursywę

(na użytkownika!)

Aby pamiętać, że aplikacje tmuxobsługuje kursywą i stosowanie odpowiedniej sekwencji ucieczki dla standout, musisz utworzyć nowy terminfo plik ze zmodyfikowanymi sgr, smso, rmso, sitmi ritmzapisów:

$ mkdir $HOME/.terminfo/
$ screen_terminfo="screen"
$ infocmp "$screen_terminfo" | sed \
  -e 's/^screen[^|]*|[^,]*,/screen-it|screen with italics support,/' \
  -e 's/%?%p1%t;3%/%?%p1%t;7%/' \
  -e 's/smso=[^,]*,/smso=\\E[7m,/' \
  -e 's/rmso=[^,]*,/rmso=\\E[27m,/' \
  -e '$s/$/ sitm=\\E[3m, ritm=\\E[23m,/' > /tmp/screen.terminfo
$ tic /tmp/screen.terminfo

I powiedz tmux, aby używał go w ~ / .tmux.conf :

set -g default-terminal "screen-it"

Jeśli twój terminal obsługuje 256 kolorów, użyj:

$ screen_terminfo="screen-256color"

zamiast „screen”. Aby uzyskać więcej informacji, zobacz wpis FAQ dotyczący obsługi 256 kolorów. Zauważ również, że tmux nadal będzie wyświetlał odwrotne wideo na terminalach, które nie obsługują kursywy.

Jeśli urxvtnie możesz w ogóle wyświetlać kursywy, upewnij się, że masz włączoną czcionkę kursywą, na przykład dodaj do ~ / .Xdefaults :

urxvt.italicFont: xft:Bitstream Vera Sans Mono:italic:autohint=true

[Poprawka 2] Po prostu zamień znaki sterujące kursywą na odwrotną

Dodaj to zastąpienie terminala do ~ / .tmux.conf :

set -g terminal-overrides 'rxvt-unicode*:sitm@,ritm@'
andras.tim
źródło
2
Wydaje się, że poprawka 1 działa, ale jest 2015, czy to naprawdę może być takie trudne?
user1338062,
Niestety nie mogę znaleźć lepszego rozwiązania tego problemu + przestałem szukać, gdy znalazłem to na liście mailingowej tmux ... :(
andras.tim
4
Cóż, zgodnie z FAQ tmux tmux 2.1 powinien naprawić zachowanie. Sądzę więc, że jest to potrzebne tylko tymczasowo. Ja osobiście po prostu zrobił to, co powiedział OP i ustawić moje default-terminaldo xterm.
user1338062,
Czasami nie jest to takie dobre. Np. Gdy musisz być kompatybilny z PuTTY, nie możesz używać xterm, tylko screeenwarianty.
andras.tim
1
Poprawka 1 zadziałała dla mnie, ale dircolorszniknęła moja solaryzacja ; Byłem w stanie to naprawić, dodając TERM screen-itdo listy terminali w ~/.dircolors.
Benjamin W.,
4

Szybszy sposób:

set -g terminal-overrides "screen.xterm-new"

Działa bez dalszej magii (i wciąż zwraca uwagę na ostrzeżenie w podręczniku tmux o typie terminala, który musi być „ekranem” lub jego pochodną).

Steven
źródło
1
Działa dla mnie idealnie, na przykład watch -n10 -d COMMAND args..pozwala teraz wykryć zmiany (jak puste! Jak robisz puste kursywa?). Myślę, że to powinna być zaakceptowana odpowiedź. Uwaga: Gdy terminal jest już otwarty, użyjTERM=screen.xterm-new; export TERM
Tino
2

Urxvt uruchamiam w Arch Linuxie. Odpowiedź op nie pomogła mi. Pomogło mi to:

https://github.com/tmux/tmux/blob/2.1/FAQ#L355-L383


wyszukaj italici uruchom; następnie umieść to w konfiguracji tmux

set -g default-terminal "tmux"

nie używaj „tmux-256color”. (spróbuj, jak sądzę, ale to nie zadziałało).


na koniec dodaj to do swojego rc (.zshrc, .bashrc itp.):

export TERM="xterm-256color"
dylnmc
źródło