tic ne lit pas à partir de STDIN et segfaults lors de l'ajout de terminfo pour prendre en charge l'italique dans tmux

5

J'essaie de suivre ces instructions ajouter le support italique à tmux.

1) J'ai essayé de copier-coller et d'exécuter cette commande

cat <<EOF|tic -x -
    tmux|tmux terminal multiplexer,
        ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@,
        use=xterm+tmux, use=screen,

    tmux-256color|tmux with 256 colors,
        use=xterm+256setaf, use=tmux,

mais ça me donne:

tic: Can't open -

Je suppose que c'est parce que OS X tic ne supporte pas la lecture de stdin.

2) J'ai ensuite essayé d'enregistrer le terminfo dans un fichier temporaire nommé tmux.terminfo et l'a couru en utilisant tic -x tmux.terminfo

tmux|tmux terminal multiplexer,
    ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@,
    use=xterm+tmux, use=screen,

tmux-256color|tmux with 256 colors,
    use=xterm+256setaf, use=tmux,

Cependant, je reçois ce message d'erreur

[1]    32091 segmentation fault  tic -x tmux.terminfo

3) J'ai aussi essayé de courir tic sans le -x pour qu’il ne traite pas les capacités inconnues comme définies par l’utilisateur.

Cela me donne ceci:

"tmux.terminfo", line 2, col 62, terminal 'tmux': unknown capability 'Ms'
[1]    35607 segmentation fault  tic tmux.terminfo

Je suis sous OS X 10.11.6.

Prashanth Chandra
la source
1
Vous avez raison, OS X tic ne lit pas de stdin. tic cherche des définitions pour xterm+tmux et xterm+256setaf, et il ne peut pas les trouver, alors il segfaults (malheureusement). Vous pourriez essayer un plus récent terminfo.src qui comprend ceux-ci. mkdir ~/.terminfo; gunzip terminfo.src.gz; export TERMINFO=~/.terminfo; tic -x -e tmux terminfo.src; tic -x -e tmux-256color terminfo.srcAprès avoir dit tout cela, je ne suis pas sûr que les italiques soient supportés dans Terminal / iTerm2 ...
mtklr

Réponses:

7

Donc ça marche pour moi, remarquez que j'ai édité use comme @mtklr a suggéré:

# A screen-256color based TERMINFO that adds the escape sequences for italic.
# run to add to term db: tic tmux.terminfo
tmux|tmux terminal multiplexer,
  ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@,
  use=xterm, use=screen,

tmux-256color|tmux with 256 colors,
  use=xterm-256color, use=tmux,

ensuite tic -x tmux.terminfo

Ne devrait pas avoir d'erreurs

Puis ajouté à .tmux.conf:

set -g default-terminal "tmux-256color"
set -as terminal-overrides ',xterm*:sitm=\E[3m'
Bret Fisher
la source
use = xterm et use = xterm-256color ont des effets secondaires indésirables car ils modifient toutes les clés. Les définitions de xterm + 256setaf et xterm + tmux ressemblent à une seule ligne, il serait préférable de les inclure. Et ce n’était même pas ce que @mtklr avait suggéré.
Random832
1

La solution ci-dessus n'a pas fonctionné pour moi, cependant:

1. Créez deux fichiers:

Fichier xterm-256color-italic.terminfo:

# A xterm-256color based TERMINFO that adds the escape sequences for italic.
xterm-256color-italic|xterm with 256 colors and italic,
  sitm=\E[3m, ritm=\E[23m,
  use=xterm-256color,

Fichier tmux-256color-italic.terminfo:

# A xterm-256color based TERMINFO that adds the escape sequences for italic.
tmux-256color-italic|tmux with 256 colors and italic,
  sitm=\E[3m, ritm=\E[23m,
  use=xterm-256color,

2. tic les deux

tic xterm-256color-italic.terminfo
tic tmux-256color-italic.terminfo

3. Indiquez à votre terminal d'utiliser xterm et tmux d'utiliser tmux avec des substitutions.

Découvrez comment définir la variable $ TERM de votre terminal sur xterm-256color-italic. Dans iTerm c'est dans Prefs - & gt; profils - & gt; Terminal - & gt; Rapport Type de terminal.

Dans ton .tmux.conf fichier:

# tmux display in 256 colours
set -g default-terminal "tmux-256color-italic"
#  enable terminal compatibility with outside terminal
set-option -ga terminal-overrides ",xterm-256color-italic:Tc"

4. Testez pour italique et la couleur

# Test Italics
echo `tput sitm`italics`tput ritm`
# Test Colour (should be smooth gradient)
awk 'BEGIN{
    s="/\\/\\/\\/\\/\\"; s=s s s s s s s s s s s s s s s s s s s s s s s;
    for (colnum = 0; colnum<256; colnum++) {
        r = 255-(colnum*255/255);
        g = (colnum*510/255);
        b = (colnum*255/255);
        if (g>255) g = 510-g;
        printf "\033[48;2;%d;%d;%dm", r,g,b;
        printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
        printf "%s\033[0m", substr(s,colnum+1,1);
    }
    printf "\n";
}'

Si je comprends bien, tmux dépend d’un environnement de terminal externe pour rendre le texte correctement. Cela signifie qu'il doit traduire / remplacer certaines commandes.

la source: https://github.com/tmux/tmux/issues/696

IanEdington
la source