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.

"I liken starting one's computing career with Unix, say as an undergraduate, to being born in East Africa. It is intolerably hot, your body is covered with lice and flies, you are malnourished and you suffer from numerous curable diseases. But, as far as young East Africans can tell, this is simply the natural condition and they live within it. By the time they find out differently, it is too late. They already think that the writing of shell scripts is a natural act."
— Ken Pier, Xerox PARC