What will give me something like ruby readline wit

2019-01-12 00:48发布

If I want to have a prompt on the terminal with a default value already typed in, how can I do that?

Ruby's standard Readline.readline() lets me set the history but not fill in a default value (as far as I can tell, at least)

I would like something like this:

code:

input = Readline.readline_with_default('>', 'default_text')

console:

> default_text|

5条回答
冷血范
2楼-- · 2019-01-12 00:51

+1 to highline

try with something like:

require 'highline/import'
input = ask('> ') {|q| q.default = 'default_text'} # > |default_text|
查看更多
聊天终结者
3楼-- · 2019-01-12 00:57

Sounds like a job for ncurses. Seems like rbcurse (http://rbcurse.rubyforge.org/) is the best maintained API at the moment.

查看更多
小情绪 Triste *
4楼-- · 2019-01-12 00:58

What you are asking is possible with Readline. There's a callback where you can get control after the prompt is displayed and insert some text into the read buffer.

This worked for me:

Readline.pre_input_hook = -> do
  Readline.insert_text "hello.txt"
  Readline.redisplay

  # Remove the hook right away.
  Readline.pre_input_hook = nil
end

input = Readline.readline("Filename: ", false)
puts "-- input:#{input.inspect}"

BTW, I fairly tried to use HighLine, but it appeared to be a no-alternative to me. One of the disappointing reasons was the fact that HighLine#ask reads cursor movement keys as regular input. I stopped looking in that direction after that sort of discovery.

查看更多
【Aperson】
5楼-- · 2019-01-12 01:11

I'm struggling with the same thing.

The way I'm doing it right now is:

options = ["the_text_you_want"]
question = "use TAB or up arrow to show the text > "

Readline.completion_append_character = " "
Readline::HISTORY.push options.first
Readline.completion_proc = proc { |s| options.grep( /^#{Regexp.escape(s)}/ ) }

while value = Readline.readline(question, true)
  exit if value == 'q'
  puts value.chomp.strip #do something with the value here
end

yes, it's silly, but it has been the only way I've found to do it.

did anybody find any solution to this?

查看更多
放我归山
6楼-- · 2019-01-12 01:12

Highline doesn't do exactly what you describe, but maybe it's close enough.

查看更多
登录 后发表回答