[#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,

[ruby-list:45926] Re: Ruby のReadline から redraw-current-line を呼び出すことは可能でしょうか?

From: kohno kazuyuki <kkohno@...>
Date: 2009-03-17 11:17:36 UTC
List: ruby-list #45926
河野(jugyo)です

>  とりあえずUnix系OSとRuby 1.8系を仮定すると以下で動くと思います。
> FreeBSD, Mac OS X, Linuxでは行けましたが、libeditしかない環境や
> 他のOSではわかりません。DL2 (ruby 1.9)では動きません。

おおお!!
まさに求めていた答えかもしれません!
試してみます!


# jugyo.org@gmail.com
# http://jugyo.org/
# http://github.com/jugyo

2009/3/17 Akinori MUSHA <knu@idaemons.org>:
> 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/
>

In This Thread