最終更新
readline は、CUI アプリケーションにおいてユーザが行を入力する際に便利な「行頭・行末移動」「ヒストリ機能」などを提供するライブラリである。readline というコマンドがあるわけではない。
●readline の概要
人間が行入力する際、bash であれば Ctrl-a で行頭・Ctrl-e で行末・Ctrl-p で履歴を戻る、といった便利な機能があるが、これと同等の処理を実現するのは結構難易度が高い。
そこで Ctrl-a で行頭、といった機能を提供するのが readline という行入力支援ライブラリである。
通常は、あるプログラム開発者が readline ライブラリを利用するように実装したら、利用者は readline の機能を享受できる。ただ、readline ライブラリを使うように実装されていないコマンドであっても、rlwrap という wrapper コマンドを使うことで、readline と同等の機能を後付けできる。
●readline のキーバインド
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 というファイルに記述することで設定が可能である。
●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 を使用している。機能を比べてみるとおもしろしかもしれない。