2011-08-31 6 views
2

J'ai lu dans la documentation GNU getline qu'il est capable de lier certaines fonctions de rappel à certaines clés. Je sais déjà comment lier une action à la touche TAB en utilisant la fonction rl_bind_key.Relecture GNU et raccourcis clavier

Mais comment puis-je l'utiliser pour lier une action aux clés suivantes ?: CTRL +TAB, ESC, PAUSE/PAUSE

Répondre

2
#include <stdio.h> 

#include <readline/readline.h> 

int my_cool_readline_func (int count, int key) { 
    printf ("key pressed: %d\n", key); 
    rl_on_new_line(); 
    return 0; 
} 

int main(void) { 
    rl_command_func_t my_cool_readline_func; 
    rl_bind_key ('\t', my_cool_readline_func); 
    rl_bind_key (27, my_cool_readline_func); /* ascii code for ESC */ 
    rl_bind_keyseq ("\\C-a", my_cool_readline_func); 

    while (1) { 
     char *line = readline ("rl> "); 
    } 
} 

Si vous êtes exécuter un système GNU (ou l'une de ses variantes), puis exécuter:

info readline "command line editing" "introduction" # notation convention 
info readline "programming" "readline" "biding" # biding functions 
+0

Malheureusement, cela ne fonctionne pas comme prévu. Peu importe si je presse TAB ou Ctrl + TAB (ou toute autre combinaison avec TAB), il montre la sortie de la fonction de crochet "touche enfoncée: 9". Il y a aussi quelque chose d'étrange à propos de la touche Esc: Je dois appuyer deux fois dessus, car la première pression ne rend rien visible. Pause/Pause n'affiche rien. Et les touches de fonction F1 .. F12 donne le même code de clé que Esc (255), mais en outre insère quelques charabia dans la ligne de commande. C'est pourquoi j'ai posé cette question. – SasQ

+0

Je n'ai pas les mêmes problèmes, avez-vous trouvé une solution SasQ? – goji