Correction de la surbrillance dans tmux

18

La mise en évidence (mode inverse) sur la console me manque depuis que j'ai commencé à utiliser urxvt + tmux comme terminal principal. Le surlignage a été remplacé par une police en italique - ce qui semble plutôt cool au début - mais je ne trouve pas le seul mot en italique parmi des milliers non-italique lorsque j'essaie de rechercher quelque chose dans a less.

Cela fonctionne correctement lorsque le type de terminal est défini sur un xterm*profil (avec par exemple set -g default-terminal "xterm-color"dans .tmux.conf ). Cependant, certains raccourcis ne peuvent pas fonctionner, les applications ne peuvent pas obtenir la géométrie appropriée du terminal, ... dans ce cas.

andras.tim
la source

Réponses:

11

J'ai trouvé des informations et des solutions à ce sujet sur les pages de tmux:

La description terminfo de l'écran n'a pas le mode italique et a le mode standout à sa place, mais en utilisant la même séquence d'échappement que celle utilisée urxvtpour l'italique. Cela signifie que les applications (comme vim) qui recherchent l'italique ne le trouveront pas et pourraient se retourner pour inverser à leur place, tandis que les applications (comme moins) demandant de se démarquer se retrouveront en italique au lieu d'inverser.

[Correctif 1] Remplacez les entrées terminfo et obtenez inversé + italique

(par utilisateur!)

Pour les applications savoir que tmuxitaliques de supports et d'utiliser une séquence d'échappement appropriée pour hors concours, vous devrez créer un nouveau terminfo fichier avec modifiées sgr, smso, rmso, sitmet les ritmentrées:

$ 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

Et dites à tmux de l'utiliser dans ~ / .tmux.conf :

set -g default-terminal "screen-it"

Si votre terminal prend en charge 256 couleurs, utilisez:

$ screen_terminfo="screen-256color"

au lieu de "écran". Voir l'entrée FAQ sur la prise en charge de 256 couleurs pour plus d'informations. Notez également que tmux affichera toujours la vidéo inversée sur les terminaux qui ne prennent pas en charge l'italique.

Si vous urxvtne pouvez pas du tout afficher l'italique, assurez-vous qu'une police compatible avec l'italique est activée, par exemple, ajoutez à ~ / .Xdefaults :

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

[Correctif 2] Remplacez simplement les caractères de contrôle italiques par inversés

Ajoutez ce remplacement de terminal à ~ / .tmux.conf :

set -g terminal-overrides 'rxvt-unicode*:sitm@,ritm@'
andras.tim
la source
2
Le correctif 1 semble fonctionner, mais c'est 2015, cela peut-il vraiment être si difficile?
user1338062
Malheureusement, je ne peux pas trouver de meilleure solution pour ce problème + J'ai arrêté de chercher quand j'ai trouvé cela sur une liste de diffusion tmux ... :(
andras.tim
4
Eh bien, selon la FAQ tmux, tmux 2.1 devrait corriger le comportement. Je suppose donc que cela n'est nécessaire que temporairement. Personnellement , je viens de faire ce que l'OP a dit et mis ma default-terminalà xterm.
user1338062
Parfois, ce n'est pas si bon. Par exemple, lorsque vous devez être compatible avec PuTTY, vous ne pouvez pas utiliser xtermuniquement des screeenvariantes.
andras.tim
1
Le correctif 1 a fonctionné pour moi, mais a fait dircolorsdisparaître mon solarisation ; J'ai pu le réparer en ajoutant TERM screen-ità la liste des terminaux dans ~/.dircolors.
Benjamin W.
4

Un moyen plus rapide:

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

Fonctionne sans autre magie (et tient toujours compte de l'avertissement dans le manuel tmux sur le type de terminal devant être "écran" ou un dérivé de celui-ci).

Steven
la source
1
Fonctionne parfaitement pour moi, par exemple watch -n10 -d COMMAND args..permet de détecter des changements maintenant (comme des blancs! Comment faites-vous des blancs en italique?). Je pense que cela devrait être la réponse acceptée. Remarque: Lorsque le terminal est déjà ouvert, utilisezTERM=screen.xterm-new; export TERM
Tino
2

Je lance urxvt dans arch linux. La réponse de l'op ne m'a pas aidé. Cela m'a aidé:

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


rechercher italicet exécuter cela; ensuite, mettez ceci dans la configuration tmux

set -g default-terminal "tmux"

n'utilisez pas "tmux-256color". (essayez-le, je suppose, mais cela n'a pas fonctionné pour moi.)


enfin, ajoutez ceci à votre rc (.zshrc, .bashrc, etc.):

export TERM="xterm-256color"
dylnmc
la source