Автозаполнение строк, начинающихся с символа @ (на знаке) с Readline в Ruby - PullRequest
2 голосов
/ 03 ноября 2010

Привет, ребята, я боролся с автозаполнением и 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 Ответ

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

Это вызвано тем, что знак @ включен в список символов разрыва слова, распознаваемых 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
...