日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
EDITLINE(3) FreeBSD ライブラリ関数マニュアル EDITLINE(3) 名称 editline, el_init, el_init_fd, el_end, el_reset, el_gets, el_wgets, el_getc, el_wgetc, el_push, el_wpush, el_parse, el_wparse, el_set, el_wset, el_get, el_wget, el_source, el_resize, el_cursor, el_line, el_wline, el_insertstr, el_winsertstr, el_deletestr, el_wdeletestr, history_init, history_winit, history_end, history_wend, history, history_w, tok_init, tok_winit, tok_end, tok_wend, tok_reset, tok_wreset, tok_line, tok_wline, tok_str, tok_wstr -- 行エディタ、ヒストリとトークン 化関数 ライブラリ 行編集とヒストリライブラリ (libedit, -ledit) 書式 #include <histedit.h> EditLine * el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr); EditLine * el_init_fd(const char *prog, FILE *fin, FILE *fout, FILE *ferr, int fdin, int fdout, int fderr); void el_end(EditLine *e); void el_reset(EditLine *e); const char * el_gets(EditLine *e, int *count); const wchar_t * el_wgets(EditLine *e, int *count); int el_getc(EditLine *e, char *ch); int el_wgetc(EditLine *e, wchar_t *ch); void el_push(EditLine *e, const char *str); void el_wpush(EditLine *e, const wchar_t *str); int el_parse(EditLine *e, int argc, const char *argv[]); int el_wparse(EditLine *e, int argc, const wchar_t *argv[]); int el_set(EditLine *e, int op, ...); int el_wset(EditLine *e, int op, ...); int el_get(EditLine *e, int op, ...); int el_wget(EditLine *e, int op, ...); int el_source(EditLine *e, const char *file); void el_resize(EditLine *e); int(); el_cursor(EditLine *e, int count); const LineInfo * el_line(EditLine *e); const LineInfoW * el_wline(EditLine *e); int el_insertstr(EditLine *e, const char *str); int el_winsertstr(EditLine *e, const wchar_t *str); void el_deletestr(EditLine *e, int count); void el_wdeletestr(EditLine *e, int count); History * history_init(void); HistoryW * history_winit(void); void history_end(History *h); void history_wend(HistoryW *h); int history(History *h, HistEvent *ev, int op, ...); int history_w(HistoryW *h, HistEventW *ev, int op, ...); Tokenizer * tok_init(const char *IFS); TokenizerW * tok_winit(const wchar_t *IFS); void tok_end(Tokenizer *t); void tok_wend(TokenizerW *t); void tok_reset(Tokenizer *t); void tok_wreset(TokenizerW *t); int tok_line(Tokenizer *t, const LineInfo *li, int *argc, const char **argv[], int *cursorc, int *cursoro); int tok_wline(TokenizerW *t, const LineInfoW *li, int *argc, const wchar_t **argv[], int *cursorc, int *cursoro); int tok_str(Tokenizer *t, const char *str, int *argc, const char **argv[]); int tok_wstr(TokenizerW *t, const wchar_t *str, int *argc, const wchar_t **argv[]); 解説 editline ライブラリは、sh(1) にあるものに似ている、一般的な行編集、ヒスト リとトークン化関数を提供しています。 これらの関数は、(libtermcap ライブラリを必要とする) libedit ライブラリ利 用可能です。プログラムは、-ledit -ltermcap でリンクされるべきです。 editline ライブラリは、アプリケーションプログラムによって設定された LC_CTYPE ロケールを尊重し、決して、ロケールを変更するために、setlocale(3) を使用しません。サポートされる唯一のロケールは、UTF-8 とデフォルトの C ま たは POSIX ロケールです。何かの他のロケールが設定されるなら、振る舞いは、 未定義です。 行編集機能 行編集機能は、el_init() または el_init_fd() によって作成され、el_end() に よって解放される、共通のデータ構造体 EditLine を使用します。 ワイド文字機能は、それらの狭い対応するものと同じ方法で振る舞います。 次の機能が利用可能です: el_init() 行エディタを初期設定し、他のすべての行編集機能によって使用される データ構造を返し、失敗すれば、NULL を返します。prog は、どの設定を 使用するかを決定するために editrc(5) ファイルを読み込むとき、使用さ れる、呼び出されるプログラムの名前です。fin, fout と ferr は、(それ ぞれ) 使用する入力、出力とエラーストリームです。この文書において、 ``the tty'' への参照は、実際に、この入力/出力ストリームの組み合わせ です。 el_init_fd() el_init() に似ていますが、それらが funopen(3) で作成された場合に、 stdio(3) 対応ストリームのためのファイル記述子を指定することを許可し ます。 el_end() クリーンアップして、el_init() または el_init_fd() で作成されたと仮 定されて、e で終了します。 el_reset() tty とパーサをリセットします。これは、tty の状態をめちゃくちゃにし たかもしれないエラーの後に呼び出されるべきです。 el_gets() tty から行を読み込みます。count は、読み込まれた文字の数を含むよう に修正されます。成功するなら、読み込まれた行を返し、文字が読み込ま れなかったなら、またはエラーが生じたなら、NULL を返します。エラーが 生じたなら、count は、-1 に設定され、errno は、それを引き起こしたエ ラーコードを含みます。返り値は、el_gets() への呼び出しにわたって有 効なままでありません、そしてデータが保持されることになっているな ら、コピーされなければなりません。 el_wgetc() 現在のロケールを尊重して、tty から、またはそれが空ではなく、ch にそ れを格納するなら、el_wpush() と el_push() によって書き込まれる入力 ストリームからワイド文字を読み込みます。無効のまたは不完全な文字が 見つけられるなら、それは、破棄され、errno は、EILSEQ に設定され、次 の文字が読み込まれ、ch に格納されます。有効な文字が読み込まれたな ら、1 を返し、ファイルの終わりで 0 を返し、read(2) が失敗すると、-1 を返します。後者の場合に、errno は、エラーを示す値に設定されます。 el_getc() el_wgetc() に記述されるようにワイド文字を読み込み、ファイルに終り で、0 を返し、失敗すると、-1 を返します。ワイド文字が単一バイト文字 として表現することができるなら、wctob(3) でそれを変換し、結果を ch に格納し、1 を返します。そうでなければ、errno を ERANGE に設定し、 -1 を返します。C または POSIX ロケールで、これは、バイトを単に読み 込みますが、UTF-8 を含んで、あらゆる他のロケールについて、これは、 めったに役に立ちません。 el_push() 入力ストリームに str を押し戻します。これは、マクロ展開メカニズムに よって使用されます。詳細については、editrc(5) の bind -s の説明を参 照してください。 el_parse() 組み込み editline コマンドを実行するために (argc 要素のサイズであ る) argv 配列を解析します。コマンドに ``prog'': が前に付けられてい るなら、el_parse() は、``prog'' が el_init() に供給された prog 引数 と一致するなら、単にコマンドを実行します。コマンドが未知であるな ら、返り値は、-1 で、エラーがなかったか、または ``prog'' が一致しな かったなら、返り値は、0 で、コマンドがエラーを返すなら、返り値は、1 です。詳細については、editrc(5) を参照してください。 el_set() editline パラメータを設定します。op は、どのパラメータを設定するか を決定し、各操作は、それ自身のパラメータのリストがあります。成功す れば、0 を返し、失敗すると -1 を返します。 op のための次の値は、要求される引数リストとともにサポートされます: #. EL_PROMPT, char *(*f)(EditLine *) プロンプトを含んでいる文字列を返すことである f としてプロンプ ト印刷関数を定義します。 EL_PROMPT_ESC, char *(*f)(EditLine *), char c EL_PROMPT と同じですが、c 引数は、スタート/ストップのリテラル プロンプト文字を示します。 スタート/ストップのリテラル文字がプロンプトで見つかるなら、文 字自身は、印刷されませんが、その後の文字は、現在の行の状態に 影響せずに、端末に直接印刷されます。その後の 2 番目のスター ト/ストップのリテラル文字は、この振る舞いを終了します。これ は、一般的にプロンプトの端末の色/スタイルを変更するリテラルの エスケープシーケンスを組み込むために使用されます。0 は、その 設定を取り消します。 EL_REFRESH 次の端末の行で現在の行を再表示します。 EL_RPROMPT, char *(*f)(EditLine *) プロンプトを含んでいる文字列を返すことである、右側のプロンプ ト印刷関数を f として定義します。 EL_RPROMPT_ESC, char *(*f)(EditLine *), char c 正しいプロンプトの印刷関数を定義しますが、リテラルのエスケー プ文字付きです。 EL_TERMINAL, const char *type tty の端末タイプを type と定義するか、または type が NULL で あるなら、TERM と定義すします。 EL_EDITOR, const char *mode ``emacs'' または ``vi'' の 1 つでなければならない、編集モード を mode に設定します。 EL_SIGNAL, int flag flag が 0 でないなら、editline は、コマンド入力を読み込むと き、次のシグナルのためのそれ自体のシグナルハンドラをインス トールします: SIGCONT, SIGHUP, SIGINT, SIGQUIT, SIGSTOP, SIGTERM, SIGTSTP と SIGWINCH。そうでなければ、現在のシグナル ハンドラが使用されます。 EL_BIND, const char *, ..., NULL bind 組み込みコマンドを実行します。詳細については、editrc(5) を参照してください。 EL_ECHOTC, const char *, ..., NULL echotc 組み込みコマンドを実行します。詳細については、 editrc(5) を参照してください。 EL_SETTC, const char *, ..., NULL settc 組み込みコマンドを実行します。詳細については、editrc(5) を参照してください。 EL_SETTY, const char *, ..., NULL setty 組み込みコマンドを実行します。詳細については、editrc(5) を参照してください。 EL_TELLTC, const char *, ..., NULL telltc 組み込みコマンドを実行します。詳細については、 editrc(5) を参照してください。 EL_ADDFN, const char *name, const char *help, unsigned char (*func)(EditLine *e, int ch) name に結び付けられるキーが入力されるとき、呼び出される name として参照される、ユーザ定義関数 func() を追加します。help は、name の説明です。呼び出し時に、ch は、呼び出しを引き起こ すキーです。func() の返り値は、次の 1 つであるべきです: CC_NORM 通常の文字を追加します。 CC_NEWLINE 行の終りが入力されました。 CC_EOF EOF が入力されました。 CC_ARGHACK 引数としてさらなるコマンド入力を期待して、視覚 的に何もしません。 CC_REFRESH 表示をリフレッシュします。 CC_REFRESH_BEEP 表示をリフレッシュし、ビープ音を鳴らします。 CC_CURSOR カーソルが移動されたので、CC_REFRESH を更新し て、実行します。 CC_REDISPLAY すべての入力行を再表示します。これは、キーの結 合が特別の情報を出力するなら、役に立ちます。 CC_ERROR エラーが生じました。ビープ音を鳴らして、tty を フラッシュします。 CC_FATAL 決定的なエラー、既知の状態に tty をリセットしま す。 EL_HIST, History *(*func)(History *, int op, ...), const char *ptr 通常 history() である、使用するヒストリ関数を定義します。ptr は、history_init() によって返される値であるべきです。 EL_EDITMODE, int flag flag が 0 でなければ、編集は、有効にされます (デフォルト)。こ れは、目安だけであり、editline の操作に影響しないことに注意し てください。このとき、編集が有効にされるかどうか決定するため に、(el_get() を使用して) これをチェックするのは、呼び出し側 の責任です。 EL_UNBUFFERED, int flag flag が 0 であるなら、非バッファモードは、無効にされます (デ フォルト)。非バッファモードで、el_gets() は、単一の文字を処理 した直後に返ります。 EL_GETCFN, int (*f)(EditLine *, char *c) 読み込んだ文字数を返し、それらを c に格納する、文字読み込み関 数を f と定義します。この関数は、el_gets() と el_getc() に よって内部的に呼び出されます。組み込み関数は、特別な関数名 ``EL_BUILTIN_GETCFN'' で設定するか復旧することができます。 EL_CLIENTDATA, void *data この EditLine 構造体に関連している data を登録します。それ は、対応する el_get() 呼び出しで検索することができます。 EL_SETFP, int fd, FILE *fp fp から、現在の editline ファイルポインタを ``入力'' fd = 0, ``出力'' fd = 1 または ``エラー'' fd = 2 に設定します。 el_get() editline パラメータを取得します。op は、result にどのパラメータを取 り出したらよいかを決定します。成功するなら、0 を返し、そうでなけれ ば、-1 を返します。 op のための次の値は、実際のタイプの result と共にサポートされます: EL_PROMPT, char *(*f)(EditLine *), char *c f をプロンプトを表示する関数へのポインタに設定します。c が NULL でないなら、それをスタート/ストップのリテラルプロンプト 文字に設定します。 EL_RPROMPT, char *(*f)(EditLine *), char *c f をプロンプトを表示する関数へのポインタに設定します。c が NULL でないなら、それをスタート/ストップのリテラルプロンプト 文字に設定します。 EL_EDITOR, const char **n ``emacs'' または ``vi'' の 1 つである、n のエディタの名前を設 定します。 EL_GETTC, const char *name, void *value name が有効な termcap(5) ケーパビリティであるなら、value を ケーパビリティの現在の値に設定します。 EL_SIGNAL, int *s editline がプライベートシグナルハンドラをインストールしたな ら、(上記の el_get() を参照) s を 0 以外に設定します。 EL_EDITMODE, int *c 編集が有効にされているなら、c を 0 以外に設定します。 EL_GETCFN, int (**f)(EditLine *, char *) デフォルトの組み込み関数の場合に、``EL_BUILTIN_GETCFN'' と等 しい文字を読み込む関数へのポインタを返します。 EL_CLIENTDATA, void **data data を el_set() 呼び出しによって、以前に登録されたクライアン トデータセットに設定します。 EL_UNBUFFERED, int *c 非バッファモードが有効にされているなら、c を 0 以外に設定しま す。 EL_GETFP, int fd, FILE **fp fp を ``入力'' fd = 0, ``出力'' fd = 1 または ``エラー'' fd = 2 のための現在の editline ファイルポインタに設定します。 el_source() file の内容を読み込むことによって、editline を初期化します。 el_parse() は、file の各行ごとに呼び出されます。file が NULL である なら、$HOME/.editrc を試みます。file の形式に関する詳細については、 editrc(5) を参照してください。el_source() は、成功すれば、0 を返 し、エラーであるなら、-1 を返します。 el_resize() 端末のサイズが変更されるなら、呼び出されなければなりません。 EL_SIGNAL が el_set() で設定されているなら、これは、自動的に行われ ます。そうでなければ、適切な時に el_resize() を呼び出すことはアプリ ケーションの責任です。 el_cursor() カーソルを count 文字、右 (正でなるなら)、または左 (負であるなら) に移動します。行の最初からカーソルの結果のオフセットを返します。 el_line() 次のように定義される、LineInfo 構造体の現在の行のために編集情報を返 します: typedef struct lineinfo { const char *buffer; /* バッファのアドレス */ const char *cursor; /* カーソルのアドレス */ const char *lastchar; /* 最後の文字のアドレス */ } LineInfo; buffer は、ヌル (NUL) 文字で終了していません。この関数は、EL_ADDFN で追加されたユーザ定義関数の中から、その関数によって返された行に関 連する LineInfo 構造体を取得するために el_gets() の後で、呼び出され るかもしれません。 el_insertstr() カーソルがある行に str を挿入します。str が空か適合しない場合 -1 を 返します。そうでなければ 0 を返します。 el_deletestr() カーソルの前の count 文字を削除します。 ヒストリリスト関数 ヒストリ関数は、history_init() によって作られ、history_end() によって解放 される共通のデータ構造体 History を使用します。 次の関数が利用可能です: history_init() ヒストリリストを初期化して、他のすべてのヒストリリスト関数によって 使用されるデータ構造体を返し、失敗するなら、NULL を返します。 history_end() クリーンアップして、history_init() で作成されたと仮定される h で終 了します。 history() 演算によって必要とされるオプション引数と共に、ヒストリリストで演算 op を実行します。ev は、操作に従って変更されます。要求された引数リ ストとともに、op のための次の値がサポートされます。 H_SETSIZE, int size ヒストリのサイズを size に要素に設定します。 H_GETSIZE ヒストリの現在のイベントの数を取得します。 H_END クリーンアップし、h で終了します。history_init() で作成される と仮定されます。 H_CLEAR ヒストリをクリアします。 H_FUNC, void *ptr, history_gfun_t first, history_gfun_t next, history_gfun_t last, history_gfun_t prev, history_gfun_t curr, history_sfun_t set, history_vfun_t clear, history_efun_t enter, history_efun_t add さまざまなヒストリ演算を実行する関数を定義します。ptr は、そ れが呼び出されるときに関数に与えられる引数です。 H_FIRST ヒストリの最初の要素を返します。 H_LAST ヒストリの最後の要素を返します。 H_PREV ヒストリの前の要素を返します。 H_NEXT ヒストリの次の要素を返します。 H_CURR ヒストリの現在の要素を返します。 H_SET, int position 要求された要素を指すカーソルを設定します。 H_ADD, const char *str ヒストリの現在の要素に str を追加するか、または現在の要素がな ければ、引数 str で H_ENTER 操作を実行します。 H_APPEND, const char *str ヒストリの最後の新しい要素に str を追加します。 H_ENTER, const char *str ヒストリに新しい要素として str を加え、そして必要ならば作成さ れたサイズにリストを保持するために最も古いエントリを削除しま す。H_SETUNIQUE が 0 以外の引数で呼び出されたなら、内容が現在 のヒストリ要素の 1 つに適合するなら、要素は、ヒストリに入れら れません。要素が入れられるなら、history() は、1 を返します。 重複として無視されるなら、0 を返します。最後に、history() は、エラーが起こったなら、-1 を返します。 H_PREV_STR, const char *str str で始まる最も近い前のイベントを返します。 H_NEXT_STR, const char *str str で始まる最も近い次のイベントを返します。 H_PREV_EVENT, int e 番号 e の前のイベントを返します。 H_NEXT_EVENT, int e 番号 e の次のイベントを返します。 H_LOAD, const char *file file に格納されたヒストリリストをロードします。 H_SAVE, const char *file ヒストリリストを file に保存します。 H_SAVE_FP, FILE *fp オープンされた FILE ポインタ fp へのヒストリリストを保存しま す。 H_SETUNIQUE, int unique 隣接する同じイベント文字列は、ヒストリに入れられるべきでない というフラグを設定します。 H_GETUNIQUE 隣接している同じ要素がヒストリに入れられるべきなら、現在の設 定を検索します。 H_DEL, int e 番号が付けられたイベント e を削除します。この関数は、 readline(3) 互換性のためだけに提供されています。呼び出し側 は、返された HistEvent の文字列を解放する責任があります。 history() は、操作 op が成功するなら、>= 0 を返します。そうでなけれ ば、-1 を返し、エラー関するより詳細を含むように ev を更新します。 トークン化関数 トークン化関数は、共通のデータ構造体、Tokenizer を使用します。Tokenizer は、tok_init() によって作成され、tok_end() によって解放されます。 つぎの関数が利用可能です: tok_init() tokenizer を初期化し、他のすべての tokenizer 関数によって使用される データ構造体を返します。IFS は、NULL であるなら、デフォルトである < 空白>, <タブ> と <改行> の入力フィールドセパレータ (分離文字) を含 みます。 tok_end() tok_init() で作成されたと想定される t で、後始末をして、終了しま す。 tok_reset() tokenizer 状態をリセットします。tok_line() または tok_str() によっ てうまくトークン化された行の後で、トークン化された新しい行の前で使 用します。 tok_line() li をトークン化し、成功するなら、次を変更します: 単語を含む argv、 単語の数を含む argc、(NULL でなければ) カーソルを含む単語のインデッ クスを含む cursorc と (NULL でなければ) カーソルの argv[cursorc] 中 のオフセットを含む cursoro。 成功すれば、0 を返し、内部エラーであれば -1 を返し、単一引用付が不 一致なら 1 を返し、二重引用付が不一致なら 2 を返し、そしてバックス ラッシュでクォートされた <改行> なら、3 を返します。正の終了コード は、別の行が読み込まれるべきであり、トークン化が再び試みられたこと を示します。 tok_str() tok_line() の、より簡単な形式です。str は、トークン化するためのヌル (NUL) 文字で終了した文字列です。 関連項目 sh(1), signal(3), termcap(3), editrc(5), termcap(5) 歴史 editline ライブラリは、4.4BSD ではじめて登場しました。CC_REDISPLAY は、 NetBSD 1.3 で登場しました。CC_REFRESH_BEEP, EL_EDITMODE と readline エ ミュレーションは、NetBSD 1.4 で登場しました。EL_RPROMPT は、NetBSD 1.5 で 登場しました。 作者 editline ライブラリは、Christos Zoulas によって書かれました。Luke Mewburn は、このマニュアルを書いて、CC_REDISPLAY, CC_REFRESH_BEEP, EL_EDITMODE と EL_RPROMPT を実装しました。Jaromir Dolecek は、readline エミュレーション を実装し、Johny Mattsson は、ワイド文字のサポートを実装しました。 バグ このとき、editline がさらなる入力に使用されるかどうか決定するために (el_source() か el_parse() の後で) el_get() の EL_EDITMODE 操作の結果を チェックするのは呼び出し側の責任です。すなわち、EL_EDITMODE は、純粋に最 新の editrc(5) edit (編集) コマンドの結果を示しています。 FreeBSD 11.4 April 28, 2017 FreeBSD 11.4