[#45922] Ruby の Readline から redraw-current-line を呼び出すことは可能でしょうか? — kohno kazuyuki <kkohno@...>
こんにちは
14 messages
2009/03/17
[#45923] Re: Ruby の Readline から redraw-current-line を呼び出すことは可能でしょうか?
— Takao Kouji <kouji@...7.net>
2009/03/17
高尾宏治です。
[#45925] Re: Ruby の Readline から redraw-current-line を呼び出すことは可能でしょうか?
— "Akinori MUSHA" <knu@...>
2009/03/17
At Tue, 17 Mar 2009 13:15:54 +0900,
[#45926] Re: Ruby のReadline から redraw-current-line を呼び出すことは可能でしょうか?
— kohno kazuyuki <kkohno@...>
2009/03/17
河野(jugyo)です
[#45927] Re: Ruby のReadline から redraw-current-line を呼び出すことは可能でしょうか?
— kohno kazuyuki <kkohno@...>
2009/03/17
河野(jugyo)です
[#45939] [ANN] nokogiri 1.2.3 リリース — Aaron Patterson <aaron@...>
こんいちは!アーロンです!
3 messages
2009/03/23
[#45945] 「Rubyリファレンスマニュアル刷新計画」2009-03分のスナップショットリリース — okkez <okkez000@...>
「Rubyリファレンスマニュアル刷新計画」メンバーの okkez です。
6 messages
2009/03/29
[ruby-list:45925] Re: Ruby の Readline から redraw-current-line を呼び出すことは可能でしょうか?
From:
"Akinori MUSHA" <knu@...>
Date:
2009-03-17 11:02:50 UTC
List:
ruby-list #45925
At Tue, 17 Mar 2009 13:15:54 +0900,
Takao Kouji wrote:
> On 2009/03/17, at 12:08, kohno kazuyuki wrote:
> > GNU Readline には「redraw-current-line」という機能があって、これを呼び出すとカレント行を再表示させることができます。
> > この機能を Ruby の Readline から呼び出すことは可能でしょうか?
>
> RubyのReadlineではできないと思います。
GNU Readline のソースを見ると redraw-current-line の実体は
rl_refresh_line() のようなので、メソッドを追加してあげるのはどう
でしょうか。
何を追加して何を追加しないというポリシーの問題かもしれませんが。
> > もしくは「redraw-current-line」と同じような機能を Ruby 側で頑張って実装することは可能でしょうか?
>
> これはRuby 1.8.7のようにリリース済みのRubyを使って、
> 「redraw-current-line」を実装できないかというご質問ですよね。
> その方法はわかりませんね。
とりあえずUnix系OSとRuby 1.8系を仮定すると以下で動くと思います。
FreeBSD, Mac OS X, Linuxでは行けましたが、libeditしかない環境や
他のOSではわかりません。DL2 (ruby 1.9)では動きません。
require 'readline'
require 'dl/import'
module Readline
module LIBREADLINE
extend DL::Importable
dlload 'libreadline.so' # Mac OS Xは .dylib
extern 'int rl_refresh_line(int, int)'
end
def self.refresh_line
LIBREADLINE.rl_refresh_line(0, 0)
end
end
# 以下テスト
Thread.start {
STDOUT.sync = 1
print 'aaa'
sleep 1
print 'bbb'
sleep 1
print 'ccc'
Readline.refresh_line
}
while buf = Readline.readline('> ', true)
puts '=> ' + buf
end
--
Akinori MUSHA / http://akinori.org/