tail head cat sleep
QR code linking to this page

manページ  — EDITLINE

名称

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 – ラインエディタと歴史関数

内容

ライブラリ

Command Line Editor Library (libedit, -ledit)

書式


#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) ファイルを読み取るときに使用されます。 finfout はそれぞれ使用する入力ストリームと出力ストリームです。この ドキュメンテーションでは、 "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 に結合されたキーが入力されたときに呼び出されます。 helpname の説明です。 起動時に、 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_SIGNALel_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 ライブラリは最初に BSD 4.4 で現れました。

作者

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

バグ

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

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

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


EDITLINE (3) January 11, 1997

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

LISP = Lots of Irritating Silly Parentheses