2010-11-03 6 views
2

Hé les gars, j'ai été aux prises avec autocomplétion et readline, si j'ai un éventail d'options comme ceci:cordes Autocomplete commençant par un @ (arobase) avec Readline Ruby

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

et je suis dans l'invite d'un mettre le @ (arobase) et appuyez sur TAB il montre toutes les options:

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

mais si je l'utilise tout autre signe: ça marche

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

C'est le code que j'ai jusqu'à présent:

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 

Est-ce que quelqu'un sait comment puis-je faire Readline au courant de l '@?

+1

Pouvez-vous nous montrer ce code que vous avez à ce jour? –

+0

Je viens de mettre à jour le poste avec le code, merci. – raf

Répondre

3

Ceci est dû au fait que le signe @ est inclus dans la liste des caractères de rupture de mot reconnus par readline.

Vous pouvez supprimer le signe @ de la liste des caractères de rupture de mot et cela fonctionnera.

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 

Et les résultats de l'exécution de ce sont les suivantes: -

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

NICE !!!! Ça a marché!!!!! Merci beaucoup!!! – raf

Questions connexes