Что даст мне что-то вроде ruby ​​readline со значением по умолчанию? - PullRequest
9 голосов
/ 22 февраля 2010

Если я хочу получить приглашение на терминал с уже введенным значением по умолчанию, как я могу это сделать?

Стандарт Ruby Readline.readline() позволяет мне установить историю , но не заполнять значение по умолчанию (насколько я могу судить, по крайней мере)

Я бы хотел что-то вроде этого:

код:

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

Консоль

> default_text|

Ответы [ 5 ]

8 голосов
/ 20 апреля 2015

То, что вы спрашиваете, возможно с Readline. Есть обратный вызов, где вы можете получить контроль после отображения приглашения и вставить некоторый текст в буфер чтения.

Это сработало для меня:

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}"

Кстати, я честно пытался использовать HighLine, но мне показалось, что это не альтернатива. Одной из неутешительных причин был тот факт, что HighLine#ask читает клавиши перемещения курсора как обычный ввод. Я перестал смотреть в этом направлении после такого рода открытия.

5 голосов
/ 28 апреля 2011

+ 1, чтобы выделить

попробуйте что-то вроде:

require 'highline/import'
input = ask('> ') {|q| q.default = 'default_text'} # > |default_text|
3 голосов
/ 23 февраля 2010

Звучит как работа для нянь. Похоже, rbcurse (http://rbcurse.rubyforge.org/) - лучший поддерживаемый API на данный момент.

2 голосов
/ 03 ноября 2010

Я борюсь с тем же самым.

То, как я делаю это прямо сейчас:

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

да, это глупо, но это был единственный способЯ нашел, чтобы сделать это.

кто-нибудь нашел какое-либо решение для этого?

1 голос
/ 23 февраля 2010

Highline делает не совсем то, что вы описываете, но, возможно, это достаточно близко.

...