2010-11-03 1 views
2

Эй, ребята, я боролся с автодополнение и Readline, если у меня есть множество вариантов, как это:автозаполнение строки, начинающиеся с @ (в знак) с Readline в Руби

["@lorem", "@ipsum", "#bla", "#meh"] 

и я в приглашении поставить @ (в знак) и нажмите TAB показывает все варианты:

what do you want? > @[TAB] 
@lorem @ipsum #bla #meh 

, но если я использую любой другой знак это работает:

what do you want? > #[TAB] 
#bla #meh 

Это код, который я до сих пор:

opts = ["@lorem", "@ipsum", "#bla", "#meh"] 
    question = "whatever? > " 

    Readline.completion_append_character = " " 
    Readline.completion_proc = proc { |s| opts.grep(/^#{Regexp.escape(s)}/) } 

    while value = Readline.readline(question, true) 
     exit if value == 'q' 
     puts value.chomp.strip 
    end 
end 

Кто-нибудь знает, как я могу сделать Readline осведомлен о @ s?

+1

Можете ли вы показать нам, что код, который вы до сих пор? –

+0

Я только что обновил сообщение с кодом, спасибо. – raf

ответ

3

Это вызвано знаком @, включенным в список символов разрыва слова, распознаваемых readline.

Вы можете удалить знак @ из списка символов разрыва слова, и это сработает.

opts = ["@lorem", "@ipsum", "#bla", "#meh"] 
question = "whatever? > " 

Readline.basic_word_break_characters = 
    Readline.basic_word_break_characters.delete("@") 
Readline.completion_append_character = " " 
Readline.completion_proc = proc { |s| opts.grep(/^#{Regexp.escape(s)}/) } 

while value = Readline.readline(question, true) 
    exit if value == 'q' 
    puts value.chomp.strip 
end 

И результаты выполнения этого были следующие: -

 
whatever? > #(TAB) 
#bla #meh 
whatever? > @(TAB) 
@lorem @ipsum 
whatever? > q 
+0

NICE !!!! Это сработало !!!!! большое спасибо!!! – raf