要約
GNU Readline 互換の行編集機能を提供するモジュールです。
Reline.readline でユーザからの一行入力を、Reline.readmultiline で複数行の入力を取得できます。入力時には行内編集が可能で、vi モードと Emacs モードが用意されています。デフォルトは Emacs モードです。
入力した内容は入力履歴(ヒストリ)として記録できます。履歴には定数 Reline::HISTORY(Array のサブクラスのインスタンス)でアクセスできます。
挙動のカスタマイズは Reline モジュールのアトリビュートへの代入で行います。主なものは以下の通りです。
- Reline.completion_proc= -- 補完候補を計算する Proc を設定します。
- Reline.autocompletion= -- 入力中の自動補完表示を有効にします。
- Reline.prompt_proc= -- 行ごとにプロンプトを動的に差し替える Proc を設定します。
- Reline.output_modifier_proc= -- 表示前に入力内容を加工(シンタックスハイライトなど)する Proc を設定します。
- Reline.auto_indent_proc= -- 自動インデントの幅を計算する Proc を設定します。
- Reline.input= / Reline.output= -- 入出力先を差し替えます。デフォルトは標準入力/標準出力です。
キーバインドや変数は、GNU Readline と同様に inputrc ファイルで設定できます。inputrc は環境変数 INPUTRC、~/.inputrc、XDG
設定ディレクトリの readline/inputrc から探索されます。inputrc 内では
$if Ruby(または $if Reline)の条件ブロックも利用できます。
また、Reline::Face で補完ダイアログなどの表示スタイルをカスタマイズできます(reline 0.4.0 以降)。
目次
- 特異メソッド
-
- auto_indent_proc
- auto_indent_proc=
- autocompletion
- autocompletion=
- basic_quote_characters
- basic_quote_characters=
- basic_word_break_characters
- basic_word_break_characters=
- completer_quote_characters
- completer_quote_characters=
- completer_word_break_characters
- completer_word_break_characters=
- completion_append_character
- completion_append_character=
- completion_case_fold
- completion_case_fold=
- completion_proc
- completion_proc=
- completion_quote_character
- dig_perfect_match_proc
- dig_perfect_match_proc=
- emacs_editing_mode
- emacs_editing_mode?
- filename_quote_characters
- filename_quote_characters=
- get_screen_size
- input=
- output=
- output_modifier_proc
- output_modifier_proc=
- pre_input_hook
- pre_input_hook=
- prompt_proc
- prompt_proc=
- readline
- readmultiline
- special_prefixes
- special_prefixes=
- vi_editing_mode
- vi_editing_mode?
特異メソッド
auto_indent_proc -> Proc | nilRuby 2.7 から[permalink][rdoc][edit]auto_indent_proc=(proc)-
複数行編集時に、行頭の自動インデントの幅を計算する Proc オブジェクトを取得/設定します。デフォルトは
nilです。procは次の 4 つの引数を受け取り、インデントに使う半角スペースの個数を整数で返すようにします。nilを返すとインデントを変更しません。対象の行の行頭の空白は、返した個数の半角スペースに置き換えられます。lines: 入力中の各行の文字列の配列line_index: インデントを計算する対象の行のlines内の位置byte_pointer: 行内のカーソルのバイト単位の位置is_newline: 改行の入力直後かどうか
- [PARAM]
proc: -
インデント幅を返す Proc オブジェクト、または
nilを指定します。
autocompletion -> boolRuby 3.1 から[permalink][rdoc][edit]autocompletion=(bool)-
入力中に補完候補を自動的にダイアログ表示するかどうかを取得/設定します。デフォルトは
falseです。trueを指定すると、文字を入力するたびに Reline.completion_proc が呼ばれ、候補がダイアログに表示されます(irb の入力補完表示で使われている機能です)。- [PARAM]
bool: - 自動補完表示を有効にするかどうかを真偽値で指定します。
- [PARAM]
basic_quote_characters -> StringRuby 2.7 から[permalink][rdoc][edit]basic_quote_characters=(string)-
クオートとみなす文字の集合を取得/設定します。
デフォルトは
"'(ダブルクオートとシングルクオート)です。設定値は保持されますが、現在の reline の補完処理では使用されません。クオートの判定には Reline.completer_quote_characters が使われます。
- [PARAM]
string: - 文字列を指定します。
- [PARAM]
basic_word_break_characters -> StringRuby 2.7 から[permalink][rdoc][edit]basic_word_break_characters=(string)-
単語の区切りを示す文字の集合を取得/設定します。
デフォルトは
" \t\n`><=;|&{("(半角スペースを含む)です。設定値は保持されますが、現在の reline の補完処理では使用されません。補完の単語の区切りには Reline.completer_word_break_characters が使われます。
- [PARAM]
string: - 文字列を指定します。
- [PARAM]
completer_quote_characters -> StringRuby 2.7 から[permalink][rdoc][edit]completer_quote_characters=(string)-
ユーザの入力の補完を行う際、クオートとみなす文字の集合を取得/設定します。クオートの内側では、Reline.completer_word_break_characters= で指定した文字も通常の文字として扱われます。
デフォルトは
"'(ダブルクオートとシングルクオート)です。- [PARAM]
string: - 文字列を指定します。
- [PARAM]
completer_word_break_characters -> StringRuby 2.7 から[permalink][rdoc][edit]completer_word_break_characters=(string)-
ユーザの入力の補完を行う際、単語の区切りを示す文字の集合を取得/設定します。
デフォルトは
" \t\n`><=;|&{("(半角スペースを含む)です。- [PARAM]
string: - 文字列を指定します。
- [PARAM]
completion_append_character -> String | nilRuby 2.7 から[permalink][rdoc][edit]completion_append_character=(string)-
補完が 1 つの候補に確定したときに、末尾に付加する文字を取得/設定します。デフォルトは
nil(何も付加しない)です。1 文字しか指定できないため、
stringに 2 文字以上の文字列を指定した場合は最初の 1 文字だけが使われます。半角スペース" "などの単語を区切る文字を指定すれば、補完後に続けて入力する際に便利です。- [PARAM]
string: -
付加する 1 文字を指定します。
nilを指定すると何も付加しません。
- [PARAM]
completion_case_fold -> boolRuby 2.7 から[permalink][rdoc][edit]completion_case_fold=(bool)-
ユーザの入力を補完する際、大文字と小文字を同一視するかどうかを取得/設定します。
boolが真ならば同一視します。デフォルトはnilです。inputrc の
set completion-ignore-case onでも設定できます。- [PARAM]
bool: -
大文字と小文字を同一視する(
true)/しない(false)を指定します。
- [PARAM]
completion_proc -> Proc | nilRuby 2.7 から[permalink][rdoc][edit]completion_proc=(proc)-
ユーザからの入力を補完するときの候補を取得する Proc オブジェクトを取得/設定します。デフォルトは
nilで、このときは補完を行いません。procは、引数に入力中の単語(カーソル位置までの、Reline.completer_word_break_characters に含まれる文字で区切られた文字列)を受け取り、候補の文字列の配列を返すようにします。 2 個以上の引数を受け取るprocを指定した場合は、第 2 引数に単語より前の文字列が、第 3 引数に単語より後ろの文字列も渡されます。補完は Tab キーの押下で実行されます。 Reline.autocompletion が真のときは、文字の入力のたびに呼ばれて候補がダイアログに表示されます。
- [PARAM]
proc: -
補完候補を取得する Proc オブジェクト、または
nilを指定します。
require 'reline' WORDS = %w(foo foobar foobaz) Reline.completion_proc = proc { |word| WORDS.grep(/\A#{Regexp.quote(word)}/) } while buf = Reline.readline("> ") print("-> ", buf, "\n") end - [PARAM]
completion_quote_character -> String | nilRuby 2.7 から[permalink][rdoc][edit]-
ユーザ入力の補完中(Reline.completion_proc の呼び出し中)に、開いたまま閉じられていないクオート文字(Reline.completer_quote_characters のいずれか)があればそれを返します。補完中以外は
nilを返します。 dig_perfect_match_proc -> Proc | nilRuby 2.7 から[permalink][rdoc][edit]dig_perfect_match_proc=(proc)-
補完候補が 1 つに確定している状態で、さらに補完しようとしたときに呼ばれる Proc オブジェクトを取得/設定します。
procは確定した候補の文字列を引数として呼ばれます。デフォルトはnilです。- [PARAM]
proc: -
Proc オブジェクト、または
nilを指定します。
- [PARAM]
emacs_editing_mode -> nilRuby 2.7 から[permalink][rdoc][edit]-
編集モードを Emacs モードにします。デフォルトは Emacs モードです。
[SEE_ALSO] Reline.vi_editing_mode、Reline.emacs_editing_mode?
emacs_editing_mode? -> boolRuby 2.7 から[permalink][rdoc][edit]-
編集モードが Emacs モードかどうかを返します。
[SEE_ALSO] Reline.emacs_editing_mode
filename_quote_characters -> StringRuby 2.7 から[permalink][rdoc][edit]filename_quote_characters=(string)-
ファイル名の補完の際にクオートするための文字の集合を取得/設定します。デフォルトは
""です。設定値は保持されますが、現在の reline の補完処理では使用されません。
- [PARAM]
string: - 文字列を指定します。
- [PARAM]
get_screen_size -> [Integer, Integer]Ruby 2.7 から[permalink][rdoc][edit]-
端末のサイズを [行数, 桁数] の配列で返します。
input=(input)Ruby 2.7 から[permalink][rdoc][edit]-
Reline が入力の読み取りに使うオブジェクトを
inputに変更します。デフォルトは標準入力です。- [PARAM]
input: -
getcメソッドを持つオブジェクト(IO など)、またはnilを指定します。 - [EXCEPTION]
TypeError: -
inputがnilでもgetcメソッドを持つオブジェクトでもない場合に発生します。
- [PARAM]
output=(output)Ruby 2.7 から[permalink][rdoc][edit]-
Reline が表示に使うオブジェクトを
outputに変更します。デフォルトは標準出力です。- [PARAM]
output: -
writeメソッドを持つオブジェクト(IO など)、またはnilを指定します。 - [EXCEPTION]
TypeError: -
outputがnilでもwriteメソッドを持つオブジェクトでもない場合に発生します。
- [PARAM]
output_modifier_proc -> Proc | nilRuby 2.7 から[permalink][rdoc][edit]output_modifier_proc=(proc)-
入力内容を表示する直前に、表示用に加工する Proc オブジェクトを取得/設定します。シンタックスハイライトなどに利用できます。デフォルトは
nilです。procは、第 1 引数に入力内容全体の文字列(末尾に改行を含む)を、キーワード引数completeに入力が確定したかどうかの真偽値を受け取り、表示に使う文字列を返すようにします。返した文字列は表示にだけ使われ、Reline.readline などの返り値は変わりません。- [PARAM]
proc: -
表示用の文字列を返す Proc オブジェクト、または
nilを指定します。
- [PARAM]
pre_input_hook -> Proc | nilRuby 2.7 から[permalink][rdoc][edit]pre_input_hook=(proc)-
Reline.readline や Reline.readmultiline が入力の受け付けを始める直前に呼ばれる Proc オブジェクトを取得/設定します。
procは引数なしで呼ばれます。デフォルトはnilです。- [PARAM]
proc: -
Proc オブジェクト、または
nilを指定します。
- [PARAM]
prompt_proc -> Proc | nilRuby 2.7 から[permalink][rdoc][edit]prompt_proc=(proc)-
Reline.readmultiline での複数行編集時に、行ごとのプロンプトを動的に生成する Proc オブジェクトを取得/設定します。デフォルトは
nilです。procは、入力中の各行の文字列を要素とする配列を受け取り、行ごとのプロンプト文字列の配列を返すようにします。Reline.readline による一行入力では使われません。- [PARAM]
proc: -
プロンプトの配列を返す Proc オブジェクト、または
nilを指定します。
- [PARAM]
readline(prompt = "", add_hist = false) -> String | nilRuby 2.7 から[permalink][rdoc][edit]-
promptを出力し、ユーザからのキー入力を待ちます。エンターキーの押下などでユーザが文字列を入力し終えると、入力した文字列を返します。返り値の末尾に改行は含まれません。このとき、add_histが真であれば、入力した文字列を入力履歴 Reline::HISTORY に追加します。空の入力は追加されません。何も入力していない状態で EOF(UNIX では ^D)を入力するなどで、ユーザからの入力がない場合はnilを返します。- [PARAM]
prompt: -
カーソルの前に表示する文字列を指定します。デフォルトは
""です。 - [PARAM]
add_hist: - 真ならば、入力した文字列を入力履歴に追加します。デフォルトは偽です。
require 'reline' while buf = Reline.readline("> ", true) print("-> ", buf, "\n") end - [PARAM]
readmultiline(prompt = "", add_hist = false) { |text| ... } -> String | nilRuby 2.7 から[permalink][rdoc][edit]-
promptを出力し、ユーザからの複数行の入力を待ちます。一行の入力が確定するたびに、それまでに入力された全体の文字列
textを引数としてブロックが呼ばれます。ブロックが真を返すと入力を終了し、入力された複数行全体をひとつの文字列(各行を"\n"で連結したもの)として返します。返り値の末尾に改行は含まれません。add_histが真であれば、入力した複数行全体をひとつのエントリとして入力履歴 Reline::HISTORY に追加します。空の入力は追加されません。何も入力していない状態で EOF(UNIX では ^D)を入力するなどで、ユーザからの入力がない場合は
nilを返します。- [PARAM]
prompt: -
カーソルの前に表示する文字列を指定します。デフォルトは
""です。 - [PARAM]
add_hist: - 真ならば、入力した文字列を入力履歴に追加します。デフォルトは偽です。
- [EXCEPTION]
ArgumentError: - ブロックを省略した場合に発生します。
require 'reline' code = Reline.readmultiline("> ", true) { |text| text.split("\n").last == "end" } puts code - [PARAM]
special_prefixes -> StringRuby 2.7 から[permalink][rdoc][edit]special_prefixes=(string)-
補完対象の単語の一部として扱う接頭辞の文字の集合を取得/設定します。デフォルトは
""です。設定値は保持されますが、現在の reline の補完処理では使用されません。
- [PARAM]
string: - 文字列を指定します。
- [PARAM]
vi_editing_mode -> nilRuby 2.7 から[permalink][rdoc][edit]-
編集モードを vi モードにします。
inputrc の
set editing-mode viでも設定できます。[SEE_ALSO] Reline.emacs_editing_mode、Reline.vi_editing_mode?
vi_editing_mode? -> boolRuby 2.7 から[permalink][rdoc][edit]-
編集モードが vi モードかどうかを返します。
[SEE_ALSO] Reline.vi_editing_mode