8

Если у меня есть запрос на терминал со значением по умолчанию, уже введенным, как я могу это сделать?Что даст мне что-то вроде ruby ​​readline со значением по умолчанию?

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

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

код:

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

консоль:

> default_text| 
+0

Пример или иллюстрация могут сделать этот вопрос более понятным. –

+1

трудно привести пример поведения интерактивной консоли, но вот попытка. – jes5199

+0

Вам нужен пользователь, чтобы иметь возможность изменять default_text, например backspace над ним, или просто хотите прочитать пустую строку как текст по умолчанию? –

ответ

1

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

2

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

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

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

Да, есть решение, ищите« pre_input_hook »один вокруг. –

5

+1 к Highline

попробовать что-то вроде:

require 'highline/import' 
input = ask('> ') {|q| q.default = 'default_text'} # > |default_text| 
+0

И что делают вертикальные полосы (в комментарии) означают? –

+0

Это результат, который вы видите. Если вы ничего не вводите, вход устанавливается в «default_text». – rainkinz

+1

@rainkinz: Таким образом, пользователю придется видеть вертикальные полосы, не будет ли он ? Это как-то необычно: ввести что-то не сразу после pr ompt, но между двумя вертикальными полосами. –

4

Что вы спрашиваете, можно с 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 читает клавиши перемещения курсора в качестве обычного ввода. После такого открытия я перестала смотреть в этом направлении.

+0

Это именно то, что я искал! Благодаря! – wrzasa

Смежные вопросы