EDITLINE(3)

名称
editline, el_init, el_end, el_reset, el_gets, el_getc, el_push, el_parse, el_set, el_source, el_resize, el_line, el_insertstr, el_deletestr, el_data_set, el_data_get, history_init, history_end, history - ラインエディタと歴史関数

ライブラリ
libedit

書式
#include <histedit.h> EditLine * el_init(const char *prog, FILE *fin, FILE *fout) void el_end(EditLine *e) void el_reset(EditLine *e) const char * el_gets(EditLine *e, int *count) int el_getc(EditLine *e, char *ch) void el_push(EditLine *e, const char *str) int el_parse(EditLine *e, int argc, char *argv[]) int el_set(EditLine *e, int op, ...) int el_source(EditLine *e, const char *file) void el_resize(EditLine *e) const LineInfo * el_line(EditLine *e) int el_insertstr(EditLine *e, char *str) void el_deletestr(EditLine *e, int count) void el_data_set(EditLine *e, void *data) void * el_data_get(EditLine *e) History * history_init() void history_end(History *h) const HistEvent * history(History *h, int op, ...)

解説
editline ライブラリには、汎用のライン編集と歴史関数が備わっています。これは sh(1) にあるものと類似しています。

これらの関数は libedit ライブラリで利用できます (これには libtermcap ライブラリが必要です)。プログラムは -ledit -ltermcap とリンクする 必要があります。

ライン編集関数
ライン編集関数は、共通のデータ構造、 EditLine を使用します。これは el_init() によって作成され、 el_end() によって解放されます。

以下の関数が利用できます。

el_init()
    ラインエディタを初期化し、他のすべてのライン編集関数が使用するデータ構造を 返します。 prog は、起動する側のプログラムの名前であり、どの設定を使用するか 決定するために editrc(5) ファイルを読み取るときに使用されます。 fin と fout はそれぞれ使用する入力ストリームと出力ストリームです。この ドキュメンテーションでは、 “the tty” の参照が実際にはこの入力/出力ストリームの 組み合わせを参照します。

el_end()
    クリーンアップし e で終了します。 el_init() で作成されたと想定されます。

el_reset()
    tty とパーサをリセットします。これは tty の状態を混乱させた可能性のある エラーの後で呼び出す必要があります。

el_gets()
    tty から 1 行を読み取ります。 count は、読み取られたキャラクタ数を 入れるように修正されます。処理が成功した場合は読み取られたラインを返し、 キャラクタが読取られないか、またはエラーが発生した場合は NULL を返します。

el_getc()
    tty から 1 キャラクタを読み取ります。 ch は、読み取られたキャラクタを 入れるように修正されます。処理が成功した場合は読み取られたキャラクタの数を 返し、そうでない場合は -1 を返します。

el_push()
    str を入力ストリームに戻します。これはマクロ展開機構によって使用されます。 詳細については、 editrc(5) の bind -s の説明を参照してください。

el_parse()
    argv 配列(サイズは argc エレメントです) をパースし、組み込み editline コマンドを実行します。コマンドの接頭語が “prog:” の場合、 “prog” が el_init() に指定された prog 引数と一致するなら、 el_parse() はコマンドを 実行するだけです。コマンドが未知の場合は戻り値は -1 です。エラーがないかまたは “prog” が一致しなかった場合は 戻り値は 0 です。コマンドがエラーを 返したときは 1 です。詳細については、 editrc(5) を参照してください。

    注: argv[0] は el_parse() によって修正されることがあります。 “prog” と コマンド command の間のコロンは、NUL (“\0”) で置き換えられます。

el_set()
    el_set() editline パラメータを設定します。 op はどのパラメータを設定するかを決定し、 各操作には独自のパラメータリストがあります。

    op の値については、必須引数リストとともに次のパラメータがサポート されています。

    EL_PROMPT, char *(*f)(EditLine *)
        プロンプト印刷関数を f として定義します。これはプロンプトの入ったストリング を返すことです。

    EL_TERMINAL, const char *type
        tty の端末タイプが type であると定義します。 type が NULL の場合は TERM にです。

    EL_EDITOR, const char *mode
        編集モードを mode に設定します。それは “emacs” または “vi” の 1 つである必要があります。

    EL_SIGNAL, int flag
        flag がゼロでない場合、 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) ユーザ定義関数 func() を追加します。これは name として参照され、 name に結合されたキーが入力されたときに呼び出されます。 help は name の説明です。 起動時に、 ch は呼び出しを起こすキーです。 func() の戻り値は次の 1 つです。

        CC_NORM
            通常のキャラクタを追加します。

        CC_NEWLINE
            行末が入力されました。

        CC_EOF
            が入力されました。

        CC_ARGHACK
            引数としてさらにコマンド入力を予期しています。表示されることは 何もしません。

        CC_REFRESH
            表示をリフレッシュします。

        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_source()
    file の内容を読むことで editline を初期化します。 el_parse() が、 file 内の行ごとに呼び出されます。 file が NULL の場合、 $HOME/.editrc を試します。 file の形式の詳細については、 editrc(5) を 参照してください。

el_resize()
    端末のサイズが変化する場合は呼び出す必要があります。 EL_SIGNAL が el_set() で設定されている場合、これは自動的に行われます。そうでない場合は、適切な 機会に el_resize() を呼び出すのはアプリケーションの責任です。

el_line()
    現在のラインについての編集情報を LineInfo で返します。これは次のように 定義されます。

        typedef struct lineinfo {
            const char *buffer;    /* バッファのアドレス */
            const char *cursor;    /* カーソルのアドレス */
            const char *lastchar;  /* 最後のキャラクタのアドレス */
        } LineInfo;

el_insertstr()
    カーソルがあるラインに str を挿入します。 str が空であるかフィットしない 場合は -1 を返します。それ以外の場合は 0 を返します。

el_deletestr()
    カーソルの前の num 個のキャラクタを削除します。

el_data_set()
    ユーザデータを data へ設定します。

el_data_get()
    ユーザデータを取得します。

歴史リスト関数
歴史関数は共通のデータ構造 History を使用します。 History は、 history_init() によって作成され、 history_end() によって解放されます。

次の関数が利用できます。

history_init()
    歴史リストを初期化し、他のすべての歴史関数が使用するデータ構造を返します。

history_end()
    クリーンアップし、 h で終了します。 history_init() で作成されたものと 想定されます。

history()
    歴史リストについて演算 op を実行します。演算が要求する オプション引数があります。 op について次の値が、必須引数リストとともに サポートされています。

    H_EVENT, int size
        size エレメントに歴史のサイズを設定します。

    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_vfun_t clear, history_efun_t enter, history_efun_t add さまざまな歴史演算を実行する関数を定義します。 ptr は、関数が起動されるときに関数に指定される引数です。

    H_FIRST
        歴史の最初のエレメントを返します。

    H_LAST
        歴史の最後のエレメントを返します。

    H_PREV
        歴史の直前のエレメントを返します。

    H_NEXT
        歴史の次のエレメントを返します。

    H_CURR
        歴史の現在のエレメントを返します。

    H_ADD, const char *str
        歴史の現在のエレメントの末尾に str を追加するか、またはエレメントがない 場合は H_ENTER で 1 つのエレメントを作成します。

    H_ENTER, const char *str
        str を新しいエレメントとして history() に追加します。必要であれば、最も古い エントリを削除して、リストを作成されたサイズに保ちます。

    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 に保存します。

関連項目
sh(1), signal(3), termcap(3), editrc(5)

歴史
editline ライブラリは最初に 4.4BSD で現れました。

作者
-nosplit editline ライブラリは Christos Zoulas が作成しました。このマニュアルは Luke Mewburn が作成しました。

バグ
このドキュメンテーションはおそらく不完全であると考えられます。

el_parse() は、指定された argv[0] を修正してはなりません。

トークン化関数は <histedit.h> 内では公に定義されていません。