2 ポイント 投稿者 GN⁺ 2024-01-31 | 1件のコメント | WhatsAppで共有

Emacsをきれいにしたかった — ターミナルで24ビットカラーを使う

  • Emacsコミュニティは活発で、LSPを通じてモダンな自動補完やインライン型チェック機能を提供している。
  • グラフィカル環境では Emacs は自動的に24ビットカラーをサポートするが、ターミナルではそうではない。

ANSIエスケープコード

  • 初期のハードウェア端末は互換性のない制御コードをそれぞれ提供していたが、ANSIがこれを標準化した。
  • SGR(Select Graphics Rendition) によって、さまざまな文字表示属性を設定できる。

3・4・8ビットカラー

  • カラーが導入された当初は8種類の基本色があり、のちに明るい色が追加されて合計16色になった。
  • 1999年に Todd Larason が xterm に256色をサポートするパッチを追加した。

24ビットカラー対応はどこから来たのか?

  • 8ビットおよび24ビットカラーを互換ターミナルへ送る方法はよく文書化されている。
  • 70年代のANSI標準化プロセスと90年代の ISO 8613-6 (ITU T.416) によって、38 と 48 は拡張された前景色・背景色モードとして定義された。

Terminfo

  • Terminfo はターミナル機能のデータベースを提供し、TERM 環境変数によってプログラムにどの terminfo レコードを使うべきかを知らせる。
  • xterm-256colorxterm-direct はそれぞれ256色と RGB カラーをサポートする。

TERM設定: セミコロン問題

  • 多くのターミナルではセミコロン構文しかサポートしていないため、TERM が正しく設定されていることを確認する必要がある。

Emacs設定

  • Emacs は truecolor サポートを検出する方法を文書化している。
  • RGB は Emacs の基本的なカラー機能で、まず setf24setb24 の文字列を探す。

入れ子になったターミナル

  • 一般的なワークフローでは、複数のターミナルを入れ子にして使う。
  • すべてのレイヤーが24ビットカラーを理解し、正確に変換できなければならない。

グラフィカルなターミナルエミュレーター

  • ほとんどのターミナルは TERM を妥当なデフォルト値に設定するか、上書きできる。

ssh

  • ssh は TERM の値をリモートホストへ渡す。

tmux

  • tmux 内では tmux-direct のような TERM を設定する必要がある。

GN⁺の見解

  • この記事で最も重要なのは、ターミナル環境でも高品質な色を使いたいというユーザーの要求と、それを可能にする技術的な進歩である。
  • 24ビットカラー対応は、開発者がより良いユーザー体験を提供できるようにする重要な機能であり、特にコードエディタのようなツールで視覚的な使いやすさを大きく向上させる。
  • この記事はターミナルと Emacs のユーザーにとって興味深く役立つ内容であり、ターミナルベースの作業環境でも優れた視覚体験を求めるユーザーに有用な情報を提供する。

1件のコメント

 
GN⁺ 2024-01-31
Hacker Newsのコメント
  • ターミナルアプリケーションの複雑さに驚きを示し、iTermやKittyのようなターミナルアプリケーションの開発者に感謝を述べている。

    • iTermとzsh向けのタブ色設定関数をまとめたリンクを共有している。
    • terminfoと、旧式のtelnet経由でHTTPやSMTPに接続する方法を比較し、テキストベースのインターフェースの複雑さを指摘している。
  • 個人的には、アプリケーション側のターミナルコードを正確に合わせるより、ターミナルアプリごとに16色パレットを調整するほうが簡単だと考えている。

    • .Xdefaults ファイルとユーザー定義テーマの .el ファイルで色を設定するコード例を示している。
    • これにより、ls の出力などの色も改善されると述べている。
  • 著者が export COLORTERM=truecolor を知っていれば、もっと良い体験ができただろうと推測している。

    • これはEmacsのドキュメントの脚注でtruecolorサポートの検出について触れられており、Konsoleのスクリーンショットにも現れているが、ターミナルマルチプレクサの複数の層の中では見落とされがちだと指摘している。
    • この設定により、複雑な設定を飛ばして、アプリケーションにtrue colorを求めていることを理解させる段階に直接進めると説明している。
  • Emacsを使う際に必ずしもターミナルを使う必要はなく、MacOS、Windows、X.org、Wayland向けの「グラフィカル」フロントエンドを使えることを強調している。

    • グラフィカル版Emacsはターミナルで動いているように見えるが、実際には画像ビューアを含むさまざまな機能を備えていると述べている。
    • Emacsユーザー調査では、80%がグラフィカルフロントエンドを使っていると回答している。
  • 1970年代のターミナルエミュレータ、エディタ、OSのバージョンを使う本番システムによって、コンピューティングは方向を見失ってしまったのかもしれないと指摘している。

    • コンピュータが数百万倍も強力になったにもかかわらず、いまだに半世紀前と同じやり方で作業していると批判している。
  • Cool Retro Termを使ってEmacsをもっと格好よく見せたい、と冗談めかして述べている。

    • 実際には、Cool Retro Termはプレゼンテーションのためにしか使っていないと明かしている。
    • 自分のEmacsが最初から24ビットカラーをサポートしていることに気づき、構文強調が少しうるさいと述べている。
  • Windows 10のコマンドプロンプトで標準のANSIエスケープシーケンスが動作し、24ビットカラーもうまく機能することを発見した。

    • 赤い背景で "Hello" を出力するコード例を示している。
  • Emacsがvim/neovimと比べてGUIサポートを第一級の機能として扱っているのが、最も優れている点だと述べている。

    • gVimや未完成のneovimフロントエンドは数多くあるが、Emacsは本物のGUIでそのまま動く点を好んでいる。
    • ターミナルには、現代では不要な歴史的遺物や制約が多いと指摘している。
    • リモートサーバーでEmacsを実行する必要があるなら、TRAMPやemacsclient(TCP経由で動くかどうかは不明)を使えると述べている。
  • 色を最小限に使うEmacs設定を使っているのでこの機能は使わないだろうが、それでも非常に楽しく読めたと述べている。

    • tmuxの鮮やかな緑と、Emacsの色のさびた赤茶色に慣れてしまったと言っている。
  • 標準が高額で縛られているため、人々が購入せずにこうした回り道をせざるを得ないのは本当に恥ずべきことだと批判している。

    • 標準は公開されているべきで、かつては印刷費を請求するのも理にかなっていたかもしれないが、PDFが200ドルもするのは信じがたいと指摘している。