Feature #13604
closedExposing alternative interface of readline
Description
GNU Readline has multiple modes of operation. At the moment, the readline extension only supports typical, Readline.readline mode. However, there is also alternative callback-based interface which is also useful.
require_relative 'readline' PROMPT = "rltest$ " $running = true $sigwinch_received = false Readline.handler_install(PROMPT, add_hist: true) do |line| # Can use ^D (stty eof) or `exit' to exit. if !line || line == "exit" puts unless line puts "exit" Readline.handler_remove $running = false else puts "input line: #{line}" end end Signal.trap('SIGWINCH') { $sigwinch_received = true } while $running do rs = IO.select([$stdin]) if $sigwinch_received Readline.resize_terminal $sigwinch_received = false end Readline.read_char if r = rs[0] end puts "rltest: Event loop has exited" Patch adding support for this is attached. This is my first try at contributing to ruby, so please tell me what I did wrong (I'm sure something, C is not my strong language).
Files
Updated by shevegen (Robert A. Heiler) over 8 years ago
All improvements to Readline are great - I can't have commandline user interfaces in ruby (on linux) without Readline these days. :)
The only thing that I think isn't too great is the use of global variables. Is it possible to get rid of them?
Updated by graywolf (Gray Wolf) over 8 years ago
It should be possible. The bool is easy (I just set it on Readline module just like I do the handler block and I try to find a way to pass char * inside VALUE. I'll find a way and post updated patch.
I don't really see a benefit though, it's not like you can use Readline multiple times at once anyway, underlying C library doesn't support it (afaict).
Updated by graywolf (Gray Wolf) over 8 years ago
I think I managed to simplify it quite a bit, if you would take a look :)
Also I'm thinking about exposing the add_hist setting, since it's saved on mReadline anyway, it would allow user to dynamicly enable/disable auto-adding of history between each invocation of read_char. What do you think?
Updated by hsbt (Hiroshi SHIBATA) about 8 years ago
- Status changed from Open to Assigned
- Assignee set to kouji (Kouji Takao)
@kouji (Kouji Takao) or @nobu (Nobuyoshi Nakada)
Can you review this patch?
Updated by graywolf (Gray Wolf) almost 8 years ago
any update on this?
Updated by nobu (Nobuyoshi Nakada) almost 6 years ago
- Assignee changed from kouji (Kouji Takao) to aycabta (aycabta .)
Updated by hsbt (Hiroshi SHIBATA) over 1 year ago
- Status changed from Assigned to Closed
The C wrapper library of libreadline is extracted https://github.com/ruby/readline-ext from Ruby 3.3. If you still interest this, can you submit your proposal to upstream?