2 poin oleh GN⁺ 2024-01-31 | 1 komentar | Bagikan ke WhatsApp
  • Untuk melihat tema seperti Solarized dengan benar di Emacs terminal, yang penting bukan hanya warna 24-bit itu sendiri, melainkan apakah terminal, terminfo, tmux, dan mosh memahami kemampuan warna yang sama hingga ujung rantai
  • Warna RGB banyak digunakan dalam bentuk ESC[38;2;<r>;<g>;<b>m, tetapi sintaks titik dua yang lebih dekat ke standar dan sintaks titik koma yang menyebar dalam implementasi nyata sama-sama tetap ada, sehingga kompatibilitas menjadi rumit
  • xterm-256color dan xterm-direct masing-masing mengiklankan palet 256 warna dan 16.777.216 warna, tetapi model terminfo yang berpusat pada palet tidak dapat merepresentasikan warna RGB langsung dengan rapi
  • Dalam lingkungan nyata, nilai TERM alternatif seperti entri -direct dari ncurses-term, tmux-direct, mosh seri 1.4, dan vscode-direct mungkin diperlukan, sementara sebagian lapisan masih hanya menerima format titik koma
  • Untuk memakai kemampuan terminal modern secara stabil, TERM dan terminfo saja tidak cukup; diperlukan cara representasi terpisah yang memperbarui kemampuan berdasarkan nama dan versi terminal dengan lebih cepat

Mengapa warna 24-bit diperlukan di Emacs terminal

  • Emacs di lingkungan grafis otomatis mendukung warna 24-bit, sehingga dapat menampilkan tema seperti Solarized dan font dengan benar
  • Jika tema yang sama digunakan di terminal, ekspresi warna bisa terbatas sehingga tampilan layar menjadi kurang enak dilihat
  • Terminal populer sudah lama mendukung warna 24-bit, tetapi agar program dapat memakainya, deteksi kemampuan dan pengaturannya harus sama-sama tepat
  • Tujuannya ada dua
    • Menemukan cara mengaktifkan dukungan truecolor di lingkungan terminal saat ini
    • Memeriksa bagaimana masalah warna Emacs terkait dengan standar terminal dari era 1970–1990-an

ANSI escape code dan sejarah perluasan warna

  • Terminal perangkat keras awal memakai sistem kode kontrol yang berbeda-beda, dan standardisasi ANSI diperlukan untuk membuat perangkat lunak portabel
  • ANSI escape codes sudah ada sejak 1970-an, dan dalam hal warna, SGR(Select Graphics Rendition) adalah intinya
    • Tebal atau kecerahan
    • Italic
    • Berkedip
    • Warna latar depan dan latar belakang
    • Atribut tampilan karakter lainnya
  • Pada awalnya warna adalah warna 3-bit yang sesuai dengan 8 titik sudut kubus RGB
    • Mencakup hitam, putih, warna primer aditif, dan warna primer subtraktif
  • Kemudian bit warna cerah atau tebal ditambahkan sehingga diperluas menjadi 16 warna
    • “bright black” setara dengan abu-abu gelap
  • Pada 1999 Todd Larason menambahkan patch dukungan 256 warna ke xterm
    • Sampling kubus warna RGB 6x6x6
    • Ramp grayscale 24 tingkat
    • Ada juga varian 88 warna yang jarang, tetapi masih didukung

Jalur terbentuknya sintaks warna 24-bit

  • Warna 8-bit dan warna 24-bit disetel dalam bentuk berikut pada terminal yang kompatibel
    • ESC[38;5;<n>m: mengatur nomor warna n pada palet sebagai warna latar depan
    • ESC[38;2;<r>;<g>;<b>m: mengatur nilai RGB r, g, b sebagai warna latar depan
  • Angka 5 dan 2 terkait dengan mode warna perluasan ISO 8613-6, yaitu ITU T.416
    • 2: warna langsung dalam ruang RGB
    • 5: warna berindeks
  • Alur standardisasinya sebagai berikut
    • 1970-an: ANSI menstandardisasi urutan escape terminal, yang berlanjut menjadi ANSI X3.64 dan ECMA-48
    • 1979: ECMA-48 edisi ke-2 menetapkan SGR 30~37 dan 40~47 untuk warna latar depan dan latar belakang 3-bit
    • 1984: ECMA-48 edisi ke-3 memperkenalkan konsep warna latar depan dan latar belakang default serta menetapkan 39 dan 49
    • 1991: ECMA-48 edisi ke-5 menyisakan 38 dan 48 untuk “standardisasi masa depan” dan memberi petunjuk ke ISO 8613-6
    • 1993: ISO 8613-6 mendefinisikan 38 dan 48 sebagai mode latar depan dan latar belakang yang diperluas
  • Untuk pemisah subparameter, penggunaan titik dua lebih dekat ke standar, tetapi implementasi nyata banyak mengadopsi titik koma
    • ESC[38;5;3m dapat ditafsirkan oleh terminal yang tidak mengenal SGR 38 sebagai parameter terpisah 38, 5, dan 3
    • FAQ xterm Thomas Dickey menjelaskan bahwa salinan ITU T.416 saat itu mahal, dan memisahkan nilai RGB dengan titik koma seperti parameter SGR lain adalah kesalahan
  • Linimasa terkaitnya sebagai berikut
    • 1999: Thomas Dickey menggabungkan patch 256 warna Todd Larason ke xterm, dan sintaks titik koma yang ambigu ikut masuk
    • 2006: Konsole mendukung 256 warna dan truecolor 24-bit dengan sintaks titik koma yang sama seperti xterm
    • 2012: xterm dimodifikasi agar juga menerima sintaks titik dua yang lebih dekat ke standar
    • 2016: Konsol bawaan Windows 10 mendukung ANSI escape code dan warna 24-bit, tetapi memakai sintaks titik koma
    • 2019: Windows Terminal juga mendukung ANSI escape code, tetapi memakai sintaks titik koma
    • 2022: Microsoft mengumumkan transisi ekosistem dari subsistem konsol gaya VGA legacy ke emulasi terminal ANSI
    • 2022: Konsole mendukung sintaks titik dua yang kompatibel dengan standar

Cara terminfo merepresentasikan kemampuan warna

  • terminfo menyediakan basis data kemampuan terminal dan fungsi untuk menghasilkan urutan escape yang sesuai
  • Variabel lingkungan TERM menunjuk ke record terminfo yang akan digunakan program, dan juga otomatis diteruskan pada koneksi ssh
  • toe menampilkan daftar record terminfo yang terpasang, dan infocmp digunakan untuk memeriksa kemampuan record tertentu
  • Ada tiga kemampuan penting terkait warna
    • colors: jumlah warna yang didukung terminal
    • setaf: mengatur warna latar depan
    • setab: mengatur warna latar belakang
  • setaf pada xterm-256color mengeluarkan urutan berbeda sesuai nomor warna
    • 0~7: memakai parameter SGR ANSI 30~37
    • 8~15: memakai warna cerah nonstandar 90~97
    • Di atas itu: memakai palet 256 warna dalam bentuk 38;5;<n>
  • xterm-direct adalah entri terminfo untuk RGB 24-bit yang mengiklankan colors sebagai 16.777.216
    • Mematikan ccc, yang menunjukkan bahwa nilai RGB baru tidak dapat diberikan ke indeks warna
    • Entri terkait perubahan warna saat runtime seperti initc, oc, dan rs1 juga tidak ada
    • setaf dan setab memakai bentuk berbasis titik dua 38:2::...

Batasan model warna langsung di terminfo

  • Model pemrograman terminfo dan ncurses pada dasarnya berpusat pada entri palet
    • Ada N entri palet
    • Setiap entri memiliki nilai RGB default
    • Model ini mengasumsikan terminal dapat mengubah nilai tersebut
  • Terminal -direct merepresentasikan warna 24-bit seolah-olah memiliki 16.777.216 entri palet
    • Setiap entri sesuai dengan kubus RGB 8:8:8
    • Nilainya tidak dapat diubah
  • Demi kompatibilitas, pendekatan xterm-direct memakai 7 warna biru tergelap untuk kompatibilitas dengan 8 warna ANSI dasar
    • Hitam dikecualikan
    • Ini adalah mekanisme untuk menghindari program lama yang berasumsi soal makna setaf lalu mencetak warna biru tua yang hampir tidak terlihat
  • Karena itu, pendekatan -direct dan -256color tidak saling kompatibel
    • Program harus tahu bahwa 256 warna adalah warna berindeks dan 16.777.216 warna adalah warna langsung
    • Ada juga pengecualian untuk menghindari 7 warna biru tergelap
  • Dalam masalah terkait termwiz, program mengharapkan palet xterm-256color tetapi sebenarnya mencetak rangkaian biru tua yang sulit dibaca
    • Issue tersebut masih terbuka pada saat penulisan, tetapi @quark-zju memasukkan perbaikan sehingga kini termwiz berjalan secara masuk akal
  • Intinya lebih dekat ke batasan terminfo daripada terminal itu sendiri
    • Terminal yang mendukung warna 24-bit tampaknya juga mendukung palet 256 warna xterm dan perubahan dinamis nilai RGB
    • terminfo tidak cukup untuk merepresentasikan ekosistem emulator terminal modern secara akurat dan cepat

Pengaturan TERM dan kompatibilitas titik koma

  • Karena banyak program memakai terminfo, nilai TERM harus diatur dengan benar
  • Sekalipun ingin menyeragamkan ke sintaks SGR berbasis titik dua, banyak lingkungan masih hanya mendukung sintaks titik koma
    • Conhost, konsol bawaan Windows
    • Sebagian perilaku di lingkungan Mintty dan Cygwin
    • Mosh
    • PuTTY
    • Versi Konsole yang disertakan di Ubuntu 22.04 LTS
  • Entri terminfo tersusun dari building block
    • xterm+direct: sintaks titik dua yang lebih dekat ke standar
    • xterm+indirect: untuk terminal legacy yang hanya mendukung titik koma
  • Dari hasil pencarian xterm+indirect, vscode-direct tampak paling cocok
    • Karena menargetkan terminal Microsoft, dinilai cukup dekat dengan Windows Terminal dan Windows Console
    • Tidak semua kemampuannya diaudit, tetapi berfungsi
  • Banyak server mungkin tidak memasang entri terminfo -direct
    • Di sebagian besar sistem, basis data terminfo default ada dalam paket ncurses-base
    • Entri terminal tambahan membutuhkan paket ncurses-term
  • Saat tulisan dibuat, ncurses menambahkan entri terminfo winconsole, tetapi belum mendukung warna 24-bit dan belum dirilis di versi ncurses mana pun

Cara Emacs mendeteksi truecolor

  • Emacs mendokumentasikan cara mendeteksi dukungan truecolor di TTY
  • Jika menjalankan (display-color-cells) di M-x eval-expression, Anda dapat memeriksa apakah Emacs mengenali 16.777.216 warna
  • Dokumentasi Emacs juga membahas batasan terminfo dalam mode -direct
    • Terminal dengan kemampuan RGB dapat memperlakukan #000001 hingga #000007 seperti warna berindeks, bukan RGB langsung
    • Ini untuk menjaga kompatibilitas mundur dengan aplikasi yang tidak mengenal direct color
    • Jika menjadi masalah, definisi terminal kustom dengan setb24 dan setf24 dapat digunakan
  • Emacs pertama-tama mencari string setf24 dan setb24; jika tidak ada, ia memakai RGB sebagai kemampuan pengganti
  • Entri terminfo pada sistem yang diperiksa tidak menyertakan setf24

Semua lapisan harus cocok di terminal bertumpuk

  • Alur kerja umum menumpuk beberapa lapisan terminal
    • Membuka emulator terminal grafis di desktop lokal
    • Masuk ke mesin jarak jauh atau VM melalui mosh
    • Memulai tmux
    • Menggunakan tambahan seperti terminal internal Emacs, Asciinema, GNU Screen, dan lain-lain
  • Setiap lapisan mengimplementasikan state machine ANSI escape sequence sendiri
  • Agar warna 24-bit berfungsi, semua lapisan harus memahami urutan escape yang dihasilkan dari terminfo nilai TERM di sisi dalam, lalu meneruskannya secara tepat sesuai terminfo di sisi luar
  • Karena itu perangkat lunak terkait harus cukup baru
    • Ubuntu LTS saat ini menyediakan mosh 1.3, sehingga PPA mosh-dev perlu diaktifkan
  • TERM di dalam setiap lapisan juga harus tepat
    • Di dalam tmux, gunakan tmux-direct
    • Karena mosh tidak memiliki terminfo standar, perlu memilih nilai yang cukup mendekati

Pengaturan per lingkungan

  • Emulator terminal grafis

    • Sebagian besar terminal menetapkan TERM default yang sesuai atau memungkinkan pengguna menimpanya
    • Konsole memiliki opsi untuk memilih nilai TERM
  • ssh

    • ssh meneruskan nilai TERM ke shell baru
    • Jika host jarak jauh memiliki record terminfo yang sama, pengaturannya relatif sederhana
  • tmux

    • Saat menjalankan tmux, TERM bisa disetel menjadi screen
    • Ini diatasi dengan mengganti terminal default di ~/.tmux.conf
    set -g default-terminal "tmux-direct"
    
    • Bisa juga mempertimbangkan cara yang hanya menetapkan tmux-direct secara kondisional ketika TERM luar mendukung warna 24-bit; jika tidak, tetap memakai screen atau tmux-256color
  • mosh

    • mosh terbaru mendukung warna 24-bit, tetapi secara internal hanya mengiklankan 8 warna atau 256 warna
    • Karena itu pengguna harus menyetel TERM dengan sesuai
    • mosh menargetkan kompatibilitas xterm, tetapi hanya mendukung sintaks titik koma pada SGR 38 dan 48
    • TERM=xterm-direct tidak berfungsi
    • vscode-direct digunakan sebagai alternatif yang paling dekat dengan xterm-direct
    • Karena tidak ada variabel praktis yang menunjukkan apakah mosh sedang berjalan, skrip detect-mosh.rs dibuat dan dipanggil dari .bashrc
    • Caranya adalah memeriksa apakah proses shell merupakan anak dari mosh-server
    • Belum dipastikan apakah mengompilasi Rust di jalur login cocok untuk host berkinerja rendah

Hasil akhir dan masalah yang tersisa

  • Setelah pengaturan, tema juga ditampilkan dengan warna 24-bit di Emacs dalam tmux dan mosh
  • Masalah yang tersisa dapat dirangkum menjadi tiga
    • Terminal-terminal belum sepenuhnya sepakat soal sintaks dan kemampuan
    • terminfo adalah jalur standar untuk query kemampuan
    • terminfo terbatas dan kadang tidak akurat, serta rilis versi barunya tidak sering keluar

Arah setelah terminfo

  • Perangkat lunak yang ingin memanfaatkan kemampuan terminal modern secara memadai perlu beranjak dari terminfo
  • Arah yang memungkinkan adalah sebagai berikut
    • Tetap memakai variabel TERM yang didukung luas
    • Tidak hanya bergantung pada terminfo lama dari sistem operasi atau distribusi, melainkan memungkinkan program mengetahui kemampuan terminal secara independen
    • Menyimpan informasi emulator terminal sekitar 10 tahun terakhir berdasarkan nama dan versi dalam pustaka yang sering diperbarui
    • Tidak memasukkan dukungan untuk terminal perangkat keras yang kini sulit digunakan
    • Tetap mendukung file terminfo yang disediakan OS dan format file terminfo, tetapi menyediakan protokol untuk menentukan informasi mana yang paling mutakhir
    • Membedakan perbedaan kemampuan berdasarkan versi seperti Konsole 2022 dan Konsole 2023 dengan TERMVERSION opsional
    • Merepresentasikan kemampuan modern seperti warna 24-bit, animasi palet 256 warna, tautan URL, dan protokol grafis Kitty tanpa ambiguitas
  • Cara kompatibilitas mundur untuk program legacy juga dimungkinkan
    • Program yang dijalankan dari .bashrc memakai TERM dan TERMVERSION untuk membuat file terminfo biner di $HOME/.terminfo/
    • Membuat kemampuan warna 24-bit yang jelas seperti RGB, setf24, dan setb24
    • Program yang tidak mengenal RGB dianggap mengasumsikan palet 256 warna, sehingga colors#0x100, initc, dan oc dipertahankan

1 komentar

 
GN⁺ 2024-01-31
Opini Hacker News
  • Mengutak-atik terminfo terasa seperti menyinari hieroglif dengan obor yang berkedip-kedip di katakomba yang dalam
    Rasanya aneh kalau memikirkan betapa banyak kompleksitas yang masuk ke satu aplikasi terminal, dan itu membuat saya makin berterima kasih kepada para pengembang terminal seperti iTerm dan Kitty
    Saya mengumpulkan fungsi-fungsi untuk mengatur warna tab di iTerm+zsh: https://gist.github.com/aclarknexient/84ebe33c1879f921685304...
    Dibandingkan cara lama menyambung ke HTTP atau SMTP lewat telnet, teksnya sendiri memang sederhana, tetapi sisi yang menampilkan teks itu adalah aplikasi kompleks yang mendukung segala macam fitur

    • Saat memakai terminal buatan sendiri, di awal saya memutuskan untuk tidak memedulikan terminfo dan berpura-pura sebagai rxvt, serta menerima masalah yang muncul
      Sekarang pilihan itu mungkin karena pengguna terminal tersebut pada dasarnya hanya saya sendiri, tetapi terminal modern mendukung subset bersama yang cukup banyak sehingga ini tidak terlalu menyakitkan daripada aplikasi tidak mengenali nilai TERM yang asing lalu kebingungan
      Tentu saja, kalau tidak sering SSH ke sistem baru, ini bukan masalah yang terlalu penting
    • Akan bagus kalau bisa membagikan screenshot yang memperlihatkan warna tab benar-benar diterapkan
    • Perangkat lunak yang paling saya rindukan dari Mac adalah iTerm
      Bukan emulator terminal tercepat, tetapi tampilannya jelas paling bagus
  • Menyesuaikan palet 16 warna di berbagai aplikasi terminal ternyata lebih mudah daripada mencocokkan kode terminal di sisi aplikasi dengan tepat
    Saya mengatur warna rxvt-unicode di ~/.Xdefaults, lalu di tema Emacs .el saya memakai nama warna berbeda tergantung apakah tampilan grafis tersedia, kemudian menerapkannya ke berbagai face
    Bonusnya, keluaran ls yang berwarna juga jadi lebih enak dilihat. Palet 16 warna bawaan sering kali terlalu jenuh dan kontrasnya buruk

    • Tepatnya, (if (display-graphic-p) adalah kuncinya
      Emacs mendukung output grafis sungguhan, dan di X11/Cocoa/Win32 Esc benar-benar berfungsi sebagai Esc; binding Ctrl+Shift atau Cmd, penggunaan beberapa font sekaligus, penampilan gambar, perubahan bentuk kursor, dan sebagainya juga dimungkinkan
      Rasanya seperti mesin waktu yang membawa kita ke 1989, 20 tahun setelahnya
    • Pada layar TTL lama, warna memang sejenuh itu karena lebih dari itu tidak mungkin
      Garis merah hanya bisa merah kuat atau mati, dan jika garis intensity ditambahkan, hasilnya menjadi merah 100%
    • Jika memasukkan sequence ke DIRCOLORS, ls juga sebenarnya mendukung warna 24-bit
    • Saya juga menyesuaikan palet 16 warna Terminology di file INI agar cocok dengan tema pilihan, jadi saya memakai gaya yang sama di konsol dan aplikasi terminal (vim)
    • Saya memakai cara yang hampir sama
      Warna bawaan terlalu gelap dibanding latar belakang gelap, jadi saya menaikkan luminans semua warna
  • Sepertinya penulis akan jauh lebih sedikit bersusah payah kalau tahu export COLORTERM=truecolor
    Ini juga muncul di catatan kaki deteksi truecolor pada dokumentasi Emacs yang ditautkan dan terlihat di screenshot Konsole, tetapi mungkin saja hilang di dalam beberapa lapis multiplexer terminal
    Dengan mengatur nilai ini, aplikasi langsung memahami bahwa terminal menginginkan truecolor, sehingga bagian sulitnya bisa dilewati, dan database terminfo juga tidak diperlukan

    • Betul. Riwayat ini seharusnya juga memasukkan trial-and-error seperti COLORTERM dan fitur terminfo RGB
      Namun, tidak semua program menghormati COLORTERM, jadi saya pernah meng-unset COLORTERM di .bashrc ketika linux | screen*, dan mengekspor COLORTERM=truecolor untuk sisanya
      Screen sekarang mendukung warna 24-bit, jadi mungkin itu konfigurasi zaman Ubuntu 18
    • Atau gunakan GUI Emacs favorit bersama tramp atau sshfs
    • Benar. Kalau turun ke jalur terminfo, yang menunggu hanya kegilaan
      Di sisi lain, ini juga karena maintainer ncurses cukup konservatif, sementara pengembang terminal baru ingin bergerak cepat
    • Database terminfo baru tidak diperlukan lagi mulai Emacs 28
      Pada Emacs yang lebih lama, database terminfo tetap diperlukan
    • COLORTERM juga cukup aneh
      Kebanyakan waktu tidak perlu didefinisikan, tetapi kalau COLORTERM=truecolor tersetel dalam sesi screen, tiba-tiba tampilan menjadi sangat aneh; jika variabel lingkungan itu dihapus, tampilannya kembali normal
  • Saat berinteraksi dengan Emacs, tidak harus selalu memakai terminal
    Anda bisa memakai frontend grafis untuk MacOS, Windows, X.org, dan Wayland
    Jika toolbar dimatikan, Emacs grafis sangat mirip dengan Emacs yang berjalan di terminal, sehingga orang yang tidak mengenal Emacs bisa mudah salah mengira jendela Emacs grafis di komputer rekan kerja sebagai jendela terminal
    Dalam survei pengguna Emacs, 80% menjawab memakai frontend grafis

    • Sebagai sanggahan, jika ingin memakai terminal tanpa kegemukan GUI penuh, xterm-mouse-mode saja sudah memberi 80% manfaatnya
      Dengan menambahkan mouse, xterm-mouse-mode, mouse-wheel-mode, pengaturan scroll, dan semacamnya, itu cukup layak dipakai, dan auto-save-default dibiarkan nil sesuai kehendak Tuhan
    • Saya tidak menjalankan Emacs di dalam emulator terminal. Emacs-lah emulator terminalnya
      Semua program terminal dijalankan di buffer shell-mode Emacs grafis, dan hanya program langka yang membutuhkan kontrol layar penuh yang memakai term-mode
      Memang bukan yang paling kaya fitur atau paling cepat, tetapi bisa dipindah-pindah seperti buffer lain dan ditangani mulus bersama konten yang sedang diedit
      Jika tidak bisa membuka Emacs grafis di komputer remote, saya mengedit file remote dengan tramp, atau menjalankan server Emacs headless lalu terhubung dengan emacsclient grafis
    • Poin yang bagus
      Saya tidak pernah mempertimbangkan bahwa orang mungkin mengira saya menjalankan Emacs di terminal
      Emacs grafis jauh lebih baik, tetapi tetap luar biasa bahwa di terminal pun sekitar 90% berperilaku dan terlihat dengan cara yang sama
    • Saya memakai Emacs berbasis X dan protokolnya efisien
      Rasanya seringan terminal dan bukan seperti VNC
      Ada keuntungan seperti font, penggunaan beberapa font sekaligus, menu, mouse, warna, serta beberapa frame/jendela
      Jika grafis dijalankan secara lokal dan mengakses sistem remote dengan tramp, pada dasarnya file konfigurasi router berbasis Linux remote yang hanya punya busybox pun bisa diedit dengan segala macam fitur kenyamanan
    • Pada akhirnya ada dua alasan mengapa saya selalu kembali ke Emacs berbasis terminal
      Saya memakai X11 sesekali sejak era 90-an, tetapi untuk font sampai sekarang pun masih pada level mencari-cari lalu kebetulan menemukan perintah yang jalan dan membiarkannya apa adanya
      Performa tampilan sebagian besar program terminal masih terasa jelas lebih cepat daripada konfigurasi X11 yang harus dipakai di lingkungan korporat
  • Sekarang cukup pasang Emacs terbaru, buka terminal yang mendukung xterm 24-bit, lalu jalankan emacs -nw
    Jika setelah tema diterapkan tampilannya baik-baik saja, selesai; jika tidak, tambahkan export COLORTERM=truecolor ke .bashrc, .zshrc, .fishrc, atau semacamnya, lalu muat ulang shell atau jalankan baris itu saja dan mulai ulang emacs -nw
    Tulisan ini membuatnya tampak seperti harus menggali terminfo, tetapi biasanya tidak perlu. Mungkin 10 tahun lalu iya, tetapi sekarang tidak
    Saya cepat-cepat mengecek ulang di iTerm di MacOS serta Alacritty, Kitty, dan Gnome Terminal di Linux, dan sekarang dukungan xterm 24-bit sudah umum

  • Hari ini saya baru tahu bahwa ANSI escape sequence standar juga berfungsi di Command Prompt Windows 10
    Warna 24-bit juga berfungsi dengan baik
    Jika menjalankan echo ^[[48;2;255;0;0mHello^[[0m, Hello akan dicetak dengan latar merah RGB(255,0,0), dan ^[[0m mengembalikan warna seperti semula
    ^[ harus dimasukkan dengan CTRL-[, bukan mengetik ^ dan [ secara terpisah

    • Jika tidak ingin memasukkan karakter yang tidak bisa dicetak langsung di command line, Anda bisa memakai escape code \x1b atau alias \e bersama perintah yang menerima kode escape
      Misalnya bisa seperti echo -e '\e[48;2;255;0;0mHello\e[0m'
      Namun dalam skrip, echo -e tidak standar dan echo biasa pun berbeda pada kasus-kasus tepi, jadi sebaiknya selalu gunakan printf '\e[48;2;255;0;0mHello\e[0m\n'
    • Jangan lupa menambahkan DEVICE=C:\DOS\ANSI.SYS ke file C:\CONFIG.SYS
  • Dibandingkan vim/neovim, hal terbaik dari Emacs adalah adanya dukungan GUI kelas satu, bukan sekadar emulator terminal di dalam jendela
    Saya tahu ada gVim dan banyak frontend neovim yang tanggung, tetapi cara eksekusi default Emacs adalah GUI sungguhan, dan saya menyukai hal itu
    Terminal juga oke, tetapi terlalu banyak residu historis dan batasan, dan banyak hal yang sudah tidak masuk akal di zaman sekarang
    Jika menjalankan Emacs di server remote adalah masalahnya, ada TRAMP dan emacsclient

    • Hal bagus saat menjalankan semuanya di terminal adalah apa pun yang terlihat di terminal bisa disalin
      Menyebalkan ketika aplikasi GUI tidak mengizinkan teks yang sedang ditampilkannya disalin sehingga harus diketik ulang secara manual
    • Itu tidak benar. Neovim punya banyak frontend native, dan sejak awal dirancang agar struktur seperti itu memungkinkan
      https://github.com/neovim/neovim/wiki/Related-projects#gui
    • Sepenuhnya setuju
      Saya sangat menyukai penyuntingan modal dan vim, tetapi sulit menoleransi solusi setengah-setengah yang diberikan editor terminal
      Kalau ada platform grafis yang kaya, mengapa tidak memakainya?
    • Sangat bergantung pada alur kerja
      Misalnya saya memakai vim hampir hanya untuk mengedit file, sementara alat eksternal seperti git, linter, formatter, debugger, dan manipulasi pohon file saya pakai dengan kembali ke shell
      Jadi aplikasi utama saya memang sudah emulator terminal, dan dalam alur kerja ini ketiadaan GUI khusus hampir tidak penting
  • Justru saya ingin Emacs saya terlihat seperti ini: https://imgur.com/a/h0jA1ro
    Bukan serius, cuma bercanda. Cool Retro Term hanya saya pakai saat presentasi
    Ternyata Emacs saya menjalankan warna 24-bit secara default: https://imgur.com/a/BM5OTxp
    Hanya saja penyorotan sintaksnya agak mengganggu

    • https://muppetlabs.com/~mikeh/crt_emacs.png
      Cool Retro Term itu bagus, dan saya juga ingin mencobanya dalam presentasi
    • Saya sangat suka Cool Retro Term, tapi sayang proyeknya nyaris terbengkalai dan ada beberapa masalah di MacOS
      Secara pribadi, terminal retro lain tidak terlihat sebagus ini
    • Saya benar-benar memakai efek CRT yang dikustomisasi ringan di Windows Terminal
  • Sangat memalukan bahwa standar dikurung di balik harga semahal itu
    Orang sampai harus mencari jalan memutar sejauh ini agar tidak membelinya, dan hasil seperti ini pun bisa terjadi
    Kalau itu standar, seharusnya bisa diakses. Pada masa ketika hanya tersedia sebagai buku, mungkin masuk akal memungut biaya cetak, tetapi sulit dipercaya PDF seadanya pernah berharga 200 dolar

  • Saya menulis patch warna 24-bit untuk xterm, tetapi baru hari ini tahu cara menjalankan ncurses dengan xterm-direct
    Saya sudah memakai pustaka terminal sendiri yang dibuat dengan Lisp, tetapi tetap berguna bisa memiliki jalur alternatif dengan ncurses
    Terima kasih kepada Mr. Dickey yang menjawab pertanyaan di Stack Overflow dan kepada Chad yang mengangkat topik ini