readline は、CUI アプリケーションにおいてユーザが行を入力する際に便利な「行頭・行末移動」「ヒストリ機能」などを提供するライブラリである。readline というコマンドがあるわけではない。
プログラム開発者が「行入力が面倒だけど、いちいちそういう機能を提供するのが面倒だから readline を使おう」と思って readline ライブラリを利用したら、利用者は readline の機能を享受できる。開発者が「readline なんか使わねぇよ」と考えたなら、利用者は仕方なく不便な行入力を行わなくてはならない。
一般的には、readline をソースからコンパイルしてインストールすると
- /usr/local/lib/libreadline.so (と libreadline.a)
- /usr/local/lib/libhistory.so (と libhistory.a)
にインストールされる (Linux や FreeBSD では標準配布物に含まれているので、/usr/lib/ などに置かれる場合が多い)。この状態で readline 対応アプリをコンパイルすると、大抵は configure した際に readline がインストールされているかチェックし、インストール済なら readline をリンク、インストールされていなければリンクしないような Makefile を生成する。
>> コマンド
configure *
readline が提供する主な機能と、そのキーバインドは以下の通りである (ほとんどが emacs と同じ)。
- 1文字戻る (Ctrl-b)
- 1文字進む (Ctrl-f)
- 行頭に移動 (Ctrl-a)
- 行末に移動 (Ctrl-e)
- カーソル位置から行末までを削除 (Ctrl-k)
- 1行上 (直前に入力した内容) に移動 (Ctrl-p)
- 1行下に移動 (Ctrl-n)
- 逆方向インクリメンタルサーチ (Ctrl-r)
- 補完・または候補一覧を表示 (TAB)
- エスケープシーケンスを入力 (Ctrl-q・Ctrl-v)
なお、上記機能は readline を利用するプログラムによりカスタマイズが可能であることに注意。
●.inputrc
readline の機能は、~/.inputrc というファイルに記述することで設定が可能である。
>> 設定ファイル
~/.inputrc *
●libedit
readline のライセンスが GPL であることを嫌い、NetBSD 界隈で readline 互換の libedit というライブラリが開発された。editline と表記することもある。
libedit は GPL ではなく BSD ライセンスとなっている。readline との互換性 100% が目標だが、libedit 独自の機能拡張もある。一部 tcsh の影響も受けているようだ。マニュアルは editline(3)・editrc(5)。
FreeBSD では readline と libedit の両方とも標準配布物に含まれている。FreeBSD 5.2.1-RELEASE では、bc コマンドが readline を、ftp コマンドが libedit を使用している。機能を比べてみるとおもしろしかもしれない。