From: Koji Arai Date: 2000-08-31T00:02:17+09:00 Subject: [ruby-list:24649] Re: (RDP) readline 新井です。 From: Koji Arai Date: Sat, 26 Aug 2000 13:45:03 +0900 Subject: [ruby-list:24522] (RDP) readline > readline ライブラリです。 パッチです。 o readline/README の内容も取り込みました。 o Readline::HISTORY はモジュールではなく定数でした。 るびきちさん、お願いします。 --- readline.rd.old Sat Aug 26 20:17:38 2000 +++ readline.rd Wed Aug 30 22:03:42 2000 @@ -42,2 +42,3 @@ system("stty", stty_save) + exit end @@ -47,3 +48,3 @@ stty_save = `stty -g`.chomp - trap("INT") { system "stty", stty_save } + trap("INT") { system "stty", stty_save; exit } @@ -53,3 +54,9 @@ - などとします。 + などとします。単に、^C を受け付けなくするだけならば以下で十分です。 + + trap("INT", "SIG_IGN") + + while buf = Readline.readline + p buf + end @@ -58,5 +65,8 @@ --- Readline.completion_proc= proc + 補完時の動作を決定する(())オブジェクトを指定します。 + ((|proc|))は引数に入力文字列を取り、候補文字列の配列を返すように + してください。 + --- Readline.completion_proc - 入力補完を行う方法を定義します。 - デフォルトでは、ファイル名の補完とユーザ名の補完が定義されています。 + 補完時の動作を決定する(())オブジェクトを返します。 @@ -76,2 +86,3 @@ == 定数 + --- Readline::FILENAME_COMPLETION_PROC @@ -79,2 +90,31 @@ +--- Readline::HISTORY + Readlineモジュールで入力した内容は入力履歴として記録されます(有効にし + ていればですが。(()) を参照) + + この定数により、入力履歴の内容にアクセスすることができます。おおよそ、 + (()) クラスのインスタンスのように振舞います。 + ((()) モジュールをextend しています) + + while buf = Readline.readline("> ", true) + p Readline::HISTORY.to_a + print "-> ", buf, "\n" + end + + 空行や直前の入力と同じ内容は入力履歴に残したくないと思うかも知れません。 + この場合、以下のようにします。 + + while buf = Readline.readline("> ", true) + # p Readline::HISTORY.to_a + Readline::HISTORY.pop if /^\s*$/ =~ buf + + begin + Readline::HISTORY.pop if Readline::HISTORY[Readline::HISTORY.length-2] == buf + rescue IndexError + end + + # p Readline::HISTORY.to_a + print "-> ", buf, "\n" + end + == 備考 @@ -82,52 +122,2 @@ 入力待ち状態のときはスレッドコンテキストの切替えが発生します。 - -= Readline::HISTORY - -Readlineモジュールで入力した内容は入力履歴として記録されます(有効にし -ていればですが。(()) を参照) - -このモジュールにより、入力履歴の内容にアクセスすることができます。おお -よそ、(()) クラスのインスタンスのように振舞います。 - - while buf = Readline.readline("> ", true) - p Readline::HISTORY.to_a - print "-> ", buf, "\n" - end - -空行や直前の入力と同じ内容は入力履歴に残したくないと思うかも知れません。 -この場合、以下のようにします。 - - while buf = Readline.readline("> ", true) - # p Readline::HISTORY.to_a - Readline::HISTORY.pop if /^\s*$/ =~ buf - - begin - Readline::HISTORY.pop if Readline::HISTORY[Readline::HISTORY.length-2] == buf - rescue IndexError - end - - # p Readline::HISTORY.collect - print "-> ", buf, "\n" - end - -== インクルードしているモジュール - -(()) - -== モジュールメソッド: - -Readline::HISTORY モジュールには、Array オブジェクトのように振舞うため -に以下のモジュールメソッドが定義されています。 - ---- Readline::HISTORY.[] ---- Readline::HISTORY.[]= ---- Readline::HISTORY.<< ---- Readline::HISTORY.push(*str) ---- Readline::HISTORY.pop ---- Readline::HISTORY.shift ---- Readline::HISTORY.each ---- Readline::HISTORY.length ---- Readline::HISTORY.empty? ---- Readline::HISTORY.delete_at(index) - 詳細は (()) クラスを参照してください。 =end