tic tidak membaca dari STDIN dan segfaults ketika menambahkan terminfo untuk mendukung cetak miring di tmux

5

Saya mencoba mengikuti instruksi ini untuk menambahkan dukungan miring ke tmux.

1) Saya mencoba menjalankan copy-paste dan menjalankan perintah ini

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,

tapi itu memberi saya:

tic: Can't open -

Saya menduga ini karena OS X tic tidak mendukung membaca dari stdin.

2) Saya kemudian mencoba menyimpan terminfo ke file sementara bernama tmux.terminfo dan menjalankannya menggunakan 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,

Namun, saya mendapatkan pesan kesalahan ini

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

3) Saya juga mencoba berlari tic tanpa -x tandai, sehingga tidak memperlakukan kemampuan yang tidak dikenal sebagai yang ditentukan pengguna.

Itu memberi saya ini:

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

Saya menggunakan OS X 10.11.6.

Prashanth Chandra
sumber
1
Anda benar, OS X tic tidak membaca dari stdin. tic sedang mencari definisi untuk xterm+tmux dan xterm+256setaf, dan tidak dapat menemukan mereka, jadi itu segfaults (sayangnya). Anda dapat mencoba yang lebih baru terminfo.src yang termasuk ini. mkdir ~/.terminfo; gunzip terminfo.src.gz; export TERMINFO=~/.terminfo; tic -x -e tmux terminfo.src; tic -x -e tmux-256color terminfo.src. Setelah mengatakan semua itu, saya tidak yakin apakah huruf miring didukung di Terminal / iTerm2 ...
mtklr

Jawaban:

7

Jadi ini bekerja untuk saya, perhatikan saya edit use like @mtklr yang disarankan:

# 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,

Kemudian tic -x tmux.terminfo

Seharusnya tidak ada kesalahan

Kemudian ditambahkan ke .tmux.conf:

set -g default-terminal "tmux-256color"
set -as terminal-overrides ',xterm*:sitm=\E[3m'
Bret Fisher
sumber
gunakan = xterm dan gunakan = xterm-256color memiliki efek samping yang tidak diinginkan karena itu mengubah semua kunci di sekitar. Definisi xterm + 256setaf dan xterm + tmux seperti satu baris, akan lebih baik untuk memasukkannya. Dan itu bahkan bukan yang disarankan @mtklr.
Random832
1

Solusi di atas tidak bekerja untuk saya, namun, ini berhasil:

1. Buat dua file:

Mengajukan 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,

Mengajukan 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. Mereka berdua

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

3. Beri tahu terminal Anda untuk menggunakan xterm dan tmux untuk menggunakan tmux dengan penggantian.

Cari tahu cara mengatur terminal Anda $ variabel TERM untuk xterm-256color-italic. Di iTerm ada di Prefs - & gt; profil - & gt; Terminal - & gt; Laporkan Jenis Terminal.

Di Anda .tmux.conf mengajukan:

# 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. Tes untuk huruf miring dan warna

# 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";
}'

Jika saya mengerti benar tmux tergantung pada lingkungan terminal eksternal untuk membuat teks dengan benar. Ini berarti perlu menerjemahkan / menimpa perintah tertentu.

sumber: https://github.com/tmux/tmux/issues/696

IanEdington
sumber