3 ポイント 投稿者 GN⁺ 2024-12-14 | 1件のコメント | WhatsAppで共有
  • 最近、ターミナルで起きるあらゆることは次の4つの要素の組み合わせだと考えるようになった

    • オペレーティングシステムの役割
    • シェルの役割
    • ターミナルエミュレータの役割
    • 実行中のプログラムの役割(topvimcat など)
  • プログラムは驚くほど一貫して動作する

    • POSIX は主にターミナルエミュレータ、OS、シェルの動作を規定しているが、個々のプログラムの動作方法に関する標準はない
    • それでもターミナルプログラムはおおむね一貫したやり方で動作する
  • これらのルールは記述的であり、規範的ではない

    • ターミナルプログラムの作者にこのルールに従うべきだと説得しようとしているわけではない
    • 新しいターミナルプログラムを使うときに予想できる基本ルールを知っておくのは有用だ
  • プログラムの責任範囲が明確でない場合がある

    • たとえば、Ctrl-D を押して REPL を終了するのは、プログラム側が明示的に実装する必要がある

ルール 1: 非対話型プログラムは Ctrl-C を押すと終了すべき

  • 非対話型プログラムは基本的に Ctrl-C を押すと終了する
  • 対話型プログラムでは Ctrl-C は別の役割を持つ

ルール 2: TUI は q を押すと終了すべき

  • lesshtop のような TUI プログラムは q を押すと終了する

ルール 3: REPL は空行で Ctrl-D を押すと終了すべき

  • ほとんどの REPL は空行で Ctrl-D を押すと終了する

ルール 4: 16色を超える色を使うべきではない

  • ターミナルプログラムは、基本の 16 ANSI カラー以外の色をほとんど使わない

ルール 5: readline のキーバインドをおおむねサポートすべき

  • ほとんどのプログラムは readline のキーバインドをサポートしている

ルール 5.1: Ctrl-W は最後の単語を削除すべき

  • Ctrl-W が最後の単語を削除しないプログラムはほとんどない

ルール 6: パイプへ書き込むときは色を無効化すべき

  • ほとんどのプログラムは、パイプへ書き込むときに色を無効化する

ルール 7: - は stdin/stdout を意味する

  • ファイル名の代わりに - を渡すと、stdin から読み込むか stdout に書き込む

  • こうしたルールを身につけるには時間がかかる

    • ルールがどこに適用されるかを学び、例外を認識し、パターンを無意識に把握する必要がある
    • こうしたルールを明示的に書き出せば、他の人が学ぶ速度を高められる

1件のコメント

 
GN⁺ 2024-12-14
Hacker Newsの意見
  • ユーザーの既定の前景色と背景色を尊重すべき

    • 色を使う場合は、既定の背景色や前景色に関係なく可読性があるべき
    • 色だけで情報を伝えるべきではない
    • 絵文字は慎重に使うべき
    • スクロールする出力で重要な情報を消してはいけない
    • ユーザーが色や視覚要素を選べる設定を提供すべき
  • Command Line Interface Guidelines を推奨

    • Ctrl-Cで終了、stdin用の - を受け入れる、パイプでは色を無効化する、といったルールを含む
  • コマンドラインツールに関する追加ルール

    • ターミナルの種類を決めつけるべきではない
    • ターミナルが存在しない可能性を前提にすべき
    • 引数と出力の構造では一般的な慣例に従うべき
    • 標準の sysexits.h 終了コードを使うべき
    • バイナリ内に --help とマニュアルページを含めるべき
  • readline/emacs キーバインドに関する情報

    • macOSでは Ctrl-E、Ctrl-W、Ctrl-U が使える
    • rlwrap プログラムをインストールして行編集機能を追加できる
  • 色の使用に関する助言

    • 16色を超えて使うべきではない
    • 色は設定可能にすべき
  • GHCiで Ctrl-D を使うと発生する問題

    • :q コマンドで終了すべき
  • ~ をホームディレクトリとして扱うことに関する説明

    • シェルでは動作するが、POSIX API では動作しない
  • プログラムがホームディレクトリにファイルを追加しないようにすべき

    • XDG_CONFIG_HOME を尊重すべき
  • CLI の一貫性に関する意見

    • CLI は GUI より一貫性が高い
    • この特性を GUI に持ち込むのは難しい
  • 長時間実行されるプロセスは、SIGHUP で設定を再読み込みすべき

  • SSH 接続で役立つヒント

    • ~. を使って SSH セッションを終了できる