Feature #13604
openExposing 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) almost 7 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) almost 7 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) almost 7 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) over 6 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) about 6 years ago
any update on this?
Updated by nobu (Nobuyoshi Nakada) about 4 years ago
- Assignee changed from kouji (Kouji Takao) to aycabta (aycabta .)