From: kohno kazuyuki Date: 2009-03-17T13:58:02+09:00 Subject: [ruby-list:45924] Re: Ruby の Readline から redraw-current-line を呼び出すことは可能でしょうか? 河野(jugyo)です。 高尾さんレスありがとうございます。 > RubyのReadlineではできないと思います。 やはりできませんか。。 > また、河野(jugyo)さんの用途をおしえていただけると、 > 何かよいアイデアが思いつくかもしれません。 そうですね。何がしたいのかということですよね。 Termtter というコンソールベースの Twitter クライアントを作っていまして、その中で ruby の readline を使っています。 Termtter の基本動作ですが、以下のような感じになります。 (1) 一定間隔でデータを取得し、コンソールに出力 (2) コンソールからコマンドを実行してメッセージを投稿 (1)と(2)がそれぞれ別のスレッドで動いています。 で、問題になるのがメッセージを投稿しようとしている時に(1)が動作するケースで、 そうなるとコンソールに Twitter ユーザーの発言が出力されて入力中の文字が流れてしまいます。 今は .inputrc に高尾さんがおっしゃられているような設定を書いて、 キー入力によって入力中の文字列をカレント行に復活させるようにしています。 できればこの「入力中の文字列をカレント行に復活させる」処理をプログラム内で自動で行いたいのです。 サンプルコードを書いてみました。Termtter はこんな感じの動作をします。 # ---------------------------------- require 'readline' Thread.new do loop do sleep 5 puts 'jugyo: 帰宅ったー' # ここで入力中の文字を復活させたい! end end while buf = Readline.readline('> ') puts '=> ' + buf end # ---------------------------------- 何か良いアイデアを思いついた方がいましたらお返事ください。 # jugyo.org@gmail.com # http://jugyo.org/ # http://github.com/jugyo 2009/3/17 Takao Kouji : > 高尾宏治です。 > > On 2009/03/17, at 12:08, kohno kazuyuki wrote: >> GNU Readline には「redraw-current-line」という機能があって、これを呼び出すとカレント行を再表示させることができます。 >> この機能を Ruby の Readline から呼び出すことは可能でしょうか? > > RubyのReadlineではできないと思います。 > >> もしくは「redraw-current-line」と同じような機能を Ruby 側で頑張って実装することは可能でしょうか? > > これはRuby 1.8.7のようにリリース済みのRubyを使って、 > 「redraw-current-line」を実装できないかというご質問ですよね。 > その方法はわかりませんね。 > > 考えられる方法としては、GNU Readlineの設定をするというのはどうでしょうか。 > 例えば、~/.inputrcに次の設定を行います。すると、 > Ctrl+xのあとにrを押すと、redraw-current-lineが実行されます。 > > $if Ruby > "\C-xr": redraw-current-line > $endif > > また、河野(jugyo)さんの用途をおしえていただけると、 > 何かよいアイデアが思いつくかもしれません。 > > --- > TAKAO Kouji > blog: http://d.hatena.ne.jp/kouji0625/ > twitter: takaokouji / projects: ruby, s7-seven > > > > >