| 原作者 | ブライアン・フォックス |
|---|---|
| 開発者 | チェット・レイミー |
| 初回リリース | 1989年 |
| 安定版リリース | 8.2 [1]
/ 2022年9月26日 |
| プレビューリリース | 8.3アルファ[2]
/ 2024年4月22日 |
| リポジトリ |
|
| 書かれた | C |
| タイプ | 図書館 |
| ライセンス | 2009: GPL-3.0 以降[a] 1997: GPL-2.0 以降[b] 1994: GPL-1.0 以降[c] |
| Webサイト | www.gnu.org/software/readline/ |
GNU Readlineは、 Bashなどのコマンドライン インターフェイスを備えた対話型プログラムにインライン編集機能と履歴機能を提供するソフトウェア ライブラリです。現在はGNU プロジェクトの一環として Chet Ramey によって保守されています。
これにより、ユーザーはテキスト カーソルを移動したり、コマンド履歴を検索したり、キル リング(コピー/貼り付けクリップボードのより柔軟なバージョン) を制御したり、テキスト端末でタブ補完を使用したりできます。クロスプラットフォームライブラリである readline により、さまざまなシステム上のアプリケーションで同一の行編集動作を実行できます。
編集モード
Readline は、キーボード入力がエディタ コマンドとしてどのように解釈されるかを決定する Emacs と vi の両方の編集モードをサポートしています。エディタ モード § 比較を参照してください。
Emacs キーボードショートカット
Emacs 編集モードのキーバインディングは、テキストエディタ Emacsから取得されます。
一部のシステムでは、ショートカットが別のショートカットと競合するため、Escの代わりに を使用する必要があります。たとえば、Xfce のターミナル エミュレータウィンドウで+ を押しても、カーソルは 1 単語分前進しませんが、エミュレータの設定で無効にされていない限り、ターミナル ウィンドウのメニューで [ファイル] がアクティブになります。 AltAltAltf
- Tab ↹ :カーソル位置から自動補完します。
- Ctrl+ a : カーソルを行頭に移動します( キーに相当)。Home
- Ctrl+ b : カーソルを 1 文字戻します ( キーに相当)。←
- Ctrl+ c :疑似端末経由で現在のタスクにSIGINTシグナルを送信し、タスクを中止して閉じます。 [d]
- Ctrl+d
- Ctrl+ e : (end) はカーソルを行末に移動します ( キーに相当)。End
- Ctrl+ f : カーソルを 1 文字前進させます ( キーに相当)。→
- Ctrl+ g : 逆方向の検索を中止し、元の行を復元します。
- Ctrl+ h : 前の文字を削除します (バックスペースと同じ)。
- Ctrl+ i : Tab キーに相当します。
- Ctrl+ j : Enter キーに相当します。
- Ctrl+ k : カーソルの後の行の内容をクリアし、クリップボードにコピーします。
- Ctrl+ l : 画面の内容をクリアします (コマンド と同等
clear)。 - Ctrl+ n : (次へ) は次のコマンドを呼び出します (キー に相当)。↓
- Ctrl+ o : 履歴から見つかったコマンドを実行し、編集のために現在の行に関連する次の行を履歴から取得します。
- Ctrl+ p : (前) 前のコマンドを呼び出します (キー に相当)。↑
- Ctrl+ r : (逆検索) は、指定された文字を含む最後のコマンドを呼び出します。2番目の+ は、検索に対応する次の前のコマンドを呼び出します。Ctrlr
- Ctrl+ s : 逆検索の次の最近のコマンドに戻ります (このコマンドは XOFF も起動するため、ターミナルから実行しないように注意してください)。XOFF 設定を変更した場合は、+ を使用して戻ります。Ctrlq
- Ctrl+ t : 前の 2 つの文字を入れ替えます。
- Ctrl+ u : カーソルの前の行の内容をクリアし、クリップボードにコピーします。
- Ctrl+ v : 次の入力も制御シーケンスの場合は、それを文字通り入力します (例: * + +は、文字通りのバックスペースである "^H" を入力します)。Ctrlv Ctrlh
- Ctrl+ w : カーソルの前の単語をクリアし、クリップボードにコピーします。
- Ctrl+ + : $EDITOR プログラム内の現在の行を編集します。未定義の場合はvi を編集します。x Ctrle
- Ctrl+ + : inputrc ファイルの内容を読み取り、そこに見つかったバインディングまたは変数の割り当てを組み込みます。x Ctrlr
- Ctrl+ + : 増分元に戻す。行ごとに個別に記憶されます。x Ctrlu
- Ctrl+ + : Bash の現在のインスタンスに関するバージョン情報を表示します。x Ctrlv
- Ctrl+ + : カーソルを以前の位置と交互に移動します。(Cx、x は交差形状であるため)x Ctrlx
- Ctrl+ y : (ヤンク)カーソル位置からクリップボードの内容を追加します。
- Ctrl+ :現在のタスクにSIGTSTPz シグナルを送信し、タスクを一時停止します。バックグラウンドで実行するには、 を入力します。バックグラウンドまたは一時停止 (フォアグラウンド) から戻すには、を発行します。
bgfg ['process name or job id'] - Ctrl+ _ : 増分的に元に戻す操作。各行ごとに個別に記憶されます。
- Alt+ b : (後方) カーソルを 1 単語後方に移動します。
- Alt+ c : カーソルの下の文字を大文字にして、単語の末尾に移動します。
- Alt+ d : カーソルの後の単語を切り取ります。
- Alt+ f : (前進) カーソルを 1 単語前進させます。
- Alt+ l : カーソルの位置から現在の単語の末尾までのすべての文字の大文字と小文字を小文字にします。
- Alt+ r : 変更をキャンセルし、行を履歴内の元の状態に戻します。
- Alt+ u : カーソルの位置から現在の単語の末尾までのすべての文字を大文字にします。
- Alt+ . : 前のコマンドの最後の引数 (前の履歴エントリの最後の単語) を挿入します。
GNU Readline のライセンスとして GPL を選択
GNU Readline は、 GNU 一般公衆利用許諾書(GPL) の下でライセンスされるフリーソフトウェアライブラリとして有名です。フリーソフトウェア ライブラリは、GNU C ライブラリ、GNU gettext、FLTKなど、GNU Lesser General Public License (LGPL) の下でライセンスされることが多いです。LGPLv3 ライセンスのライブラリにリンクすることを選択したアプリケーションの開発者は、「結合された作品に含まれるライブラリの部分の変更と、そのような変更をデバッグするためのリバース エンジニアリングを制限」しないライセンスであればどれでも使用できます。[4]ただし、 Readline などのGPLv3ライセンスのライブラリにリンクする場合は、配布時に結合された結果のアプリケーション全体をGPLv3 の下でライセンスし、GPL の第 5 条に準拠する必要があります。[5] [6]
FSF は、ソフトウェアが GPL に切り替えることを促すことを期待して、このライセンスを選択しました。[7] GNU Readline のコピーレフト条件に準拠するようにライセンスを変更したアプリケーションの重要な例として、 Common Lispの実装であるCLISPがあります。1987 年に最初にリリースされたこのライセンスは、CLISP のオリジナル作者の 1 人である Bruno Haible とRichard Stallmanの間で電子メールのやり取りが行われた後、1992 年に GPL ライセンスに変更されました。その中で Stallman は[9]、 CLISP で readline がリンクされているため、readline を使用した CLISP の実装を配布したい場合は、Haible が CLISP を GPL で再ライセンスする必要があると主張しました。 [10]
別の対応としては、一部のプロジェクトではこれを使用しないようにし、テキスト入力の編集には原始的な Unix ターミナル ドライバーを使用するようにするというものがあります。
代替ライブラリ
代替ライブラリは他のライセンスで作成されており、コマンドライン編集機能を実装したいが非 GPL ライセンスでリリースしたいソフトウェア プロジェクトで使用できます。
- 多くのBSDシステムにはBSDライセンスの libeditがあります。[11] [12] MariaDBとPHPでは、ビルド時にGNU Readlineとリンクするかlibeditとリンクするかをユーザーが選択できます。[13] [14]
- linenoiseは行編集機能を提供する小さなCライブラリです。[15]
- HaskelineはBSD-3条項ライセンスのHaskell用のreadlineライクなライブラリです。主にGlasgow Haskell Compiler [16]向けに書かれていますが、行編集サービスを必要とする他のHaskellプロジェクトでも利用可能です。[17]
- PSReadLineは、 bashとGNU Readlineに触発されてC#で書かれたPowerShell用のBSD-2条項ライセンスのreadline実装です[18]
サンプルコード
次のコードはCで記述されており、コンパイラに -lreadlineフラグを渡して readline ライブラリにリンクする必要があります。
#include <stdlib.h> #include <stdio.h> #include <readline/readline.h> #include <readline/history.h>
int main () { // Tab キーが押されたときにパスを自動補完するように readline を設定します。rl_bind_key ( ' \t' , rl_complete );
// 履歴を有効にする
using_history ();
while ( 1 ) { // プロンプトを表示し、入力を読み取りますchar * input = readline ( "prompt> " );
// EOFをチェックします。if ( ! input ) break ;
// 入力をreadline履歴に追加します。add_history ( input );
// 何かを実行します...
// readline によって割り当てられたバッファを解放します
free ( input ); } return 0 ; }
バインディング
readlineの 言語バインディングを提供するC以外のプログラミング言語には、
- Python の組み込み
readlineモジュール。 - Rubyの組み込み
readlineモジュール[19] - Perl のサードパーティ (CPAN)
Term::ReadLineモジュール、特にTerm::ReadLine::GnuGNU ReadLine 用。
readline の代替のサポートは、これらのバインディングによって異なります。
注記
参考文献
- ^ Chet Ramey (2022年9月26日). 「Readline-8.2リリースが利用可能」。2022年9月26日閲覧。
- ^ 「readline.git - GNU Readline ライブラリ」 。2024年8 月 7 日閲覧。
- ^ 「pty(7) - Linuxマニュアルページ」。man7.org 。2021年9月30日閲覧。
- ^ 「GNU Lesser General Public License」。GNU Lesser General Public License v3.0 - GNU プロジェクト。フリーソフトウェア財団。2007 年。2011 年 9 月 3 日閲覧。
- ^ 「GNU 一般公衆利用許諾書」。GNU一般公衆利用許諾書 v3.0 - GNU プロジェクト。フリーソフトウェア財団。2007 年。2011年 9 月 3 日閲覧。
- ^ 「GNU ライセンスに関するよくある質問」。GNUライセンスに関するよくある質問 - GNU プロジェクト。フリーソフトウェア財団。2010 年。2011 年 9 月 3 日閲覧。
- ^ 「次のライブラリに Lesser GPL を使用しない理由」。次のライブラリに Lesser GPL を使用しない理由 - GNU プロジェクト - フリーソフトウェア財団。フリーソフトウェア財団。2016 年。2019 年 10 月 15 日閲覧。
- ^ 「CLISP 著作権表示」。CLISP リポジトリ。1992 年。2011 年 9 月 3 日閲覧。
- ^ 「CLISP が GPL の下にある理由」CLISP リポジトリ。1992 年。2023 年 1 月 19 日閲覧。
- ^ 「ライセンス - なぜ GNU GPL なのか?」。CLISP に関するよくある質問 (回答付き)。CLISP チーム。2011 年 9 月 3 日閲覧。
- ^ "editline(3) - NetBSD マニュアルページ". NetBSD . 2022-09-13取得。
コマンドラインエディターライブラリ (libedit、-ledit)
- ^ Editline ライブラリ (libedit)
- ^ "MariaDB/server/blob/10.2/BUILD/SETUP.sh". MariaDB リポジトリ. MariaDB Foundation . 2017 年 10 月 24 日閲覧。
- ^ "php/php-src/tree/master/ext/readline". PHP リポジトリ。PHP グループ。2017年 10 月 24 日閲覧。
- ^ サンフィリッポ、サルヴァトーレ (2020 年 5 月 10 日)。 「アンチレズ/ラインノイズ」。GitHub。
- ^ 「アプリケーションとライブラリ」。Haskell wiki。haskell.org。2017年10月24日閲覧。
- ^ Judah Jacobson. 「judah/haskeline: コマンドラインプログラムでの行入力用の Haskell ライブラリ」. Haskeline リポジトリ. 2017 年 10 月 24 日閲覧。
- ^ 「PowerShell/PSReadLine: PowerShell 用の bash にインスパイアされた readline 実装」。PSReadLineリポジトリ。2023年 12 月 20 日閲覧。
- ^ 「モジュール: Readline (Ruby 3.0.2)」.
外部リンク
- GNU Readline についてあなたが知らなかったこと
