Cara yang benar untuk mendapatkan dukungan emacs 16 warna di dalam tmux?

4

Saya mencoba untuk mendapatkan pengaturan tema-warna (khusus) untuk custom emacs saya yang menggunakan palet 16 warna, yang telah saya siapkan untuk terminal saya (gnome-terminal).

Saat menjalankan emacs dari terminal normal dengan TERM=xterm-256color, Saya bisa mendapatkan dengan benar M-x list-colors-display untuk menampilkan semua 16 warna ansi, mis. merah, hijau, hijau cerah, cerah, dll.

Namun, saat menjalankannya dari dalam tmux dan TERM=screen-256color, M-x list-colors-display hanya mencantumkan 8 warna dasar, dan tidak memiliki warna cerah yang diperluas. Di bawah kedua pengaturan, mengevaluasi (display-color-cells) melaporkan 256 warna. Satu-satunya referensi untuk warna-warna cerah yang dapat saya temukan adalah di lisp / term / xterm.el dan lisp / term / rxvt.el, jadi sepertinya masalahnya ada di TERM pengaturan.

Agar tmux berfungsi dengan benar TERM harus diatur ke layar atau layar-256color, sehingga pengaturan JANGKA berbeda keluar. Saya beruntung menggunakan alias:

alias emacs='TERM=xterm-256color emacs'

Apakah ada cara yang lebih baik dari ini untuk memaksa emacs untuk memungkinkan penggunaan semua 16 warna ansi?

agrubb
sumber

Jawaban:

2

Seperti yang Anda temukan, warna tambahan dikonfigurasikan oleh file pustaka khusus TERM (mis. istilah / lisp ). Versi GNU Emacs yang lebih baru mencakup a istilah / layar yang menggunakan kembali definisi warna dari term / xterm , tapi sepertinya versi Emacs Anda tidak melakukan ini.

Jika Anda tidak ingin memutakhirkan ke Emacs yang lebih baru, maka Anda mungkin hanya dapat menggunakan konten dari sebuah Intisari itu termasuk a term/screen.el dan sedikit yang bisa Anda masukkan ke dalam .emacs untuk mengaktifkannya; versi term/screen.el juga menyertakan beberapa definisi kunci yang mungkin berguna bagi Anda jika diaktifkan tmux xterm-keys pilihan.

Bit inti dari kode terlihat seperti ini:

;;; .emacs addition
(add-to-list 'load-path "~/.emacs.d/lisp/")

;;; ~/.emacs.d/lisp/term/screen.el
(load "term/xterm") 
(defun terminal-init-screen ()
  (xterm-register-default-colors)
  (tty-set-up-initial-frame-faces))
Chris Johnsen
sumber
Saya kadang-kadang harus menggunakan versi 23, yang sepertinya tidak memiliki definisi layar seperti yang Anda sebutkan. Saya akan memberikan solusi yang Anda coba coba. Terima kasih!
agrubb
Sebagai tindak lanjut, solusi yang Anda posting berfungsi dengan baik sejauh dukungan warna berjalan. Satu masalah yang saya perhatikan menggunakan pendekatan ini adalah bahwa emacs tampaknya kehilangan kemampuan untuk mendukung wajah yang digarisbawahi saat menjalankan menggunakan metode ini, tetapi menggunakan pendekatan alias berfungsi dengan baik. Saya sudah mencoba mencari di mana dukungan garis bawah didefinisikan tetapi belum beruntung. Adakah pikiran?
agrubb
@agrubb: Emacs mungkin menggunakan entri terminfo untuk TERM Anda yang aktif (mis. screen-256color ) yang mencakup ncv kemampuan yang mengatakan bahwa terminal tidak dapat mendukung garis bawah dan warna pada saat yang sama; ini menyebabkan Emacs mengabaikan menggarisbawahi dalam huruf tebal (lihat defface underline di faces.el ). Anda dapat memeriksa entri terminfo Anda dengan tput ncv (idealnya, untuk mendukung garis bawah, Anda memerlukan -1, atau nomor ketika "2 bit" tidak aktif). Di emacs Anda bisa menggunakan M-x : (display-supports-face-attributes-p '(:underline t)) untuk memeriksa dukungan garis bawah.
Chris Johnsen
@agrubb: Entri terminfo dalam rilis yang lebih baru dari ncurses menghapus ncv dari nya screen entri, jadi saya kira biner Emacs Anda menggunakan versi yang lebih lama jika basis data terminfo. Anda bisa membuat entri khusus yang kosong ncv dengan perintah seperti ini: { infocmp -x screen-256color; printf '\t%s\n' 'ncv@,'; } > /tmp/t && tic -x /tmp/t (ketika dijalankan sebagai non-root, itu akan menulis yang baru screen-256color entri di bawah ~/.terminfo/ ). Anda bisa mendapatkan gambaran wajah dengan M-x list-faces-display untuk memeriksa caranya (mis.) underline ditampilkan.
Chris Johnsen
Itu masalahnya. Membangun entri terminfo kustom berhasil. Terima kasih!
agrubb