2009-01-17 9 views
1

Je voudrais écrire une application en C qui utilise des touches fléchées pour naviguer et des touches F pour d'autres fonctions, telles que l'enregistrement dans un fichier, la sélection de langue, etcQuelles sont les valeurs numériques des touches F (F [1-12]) et des touches fléchées?

Propablement les valeurs dépendent de la plate-forme , alors comment puis-je savoir quelles sont les valeurs des clés?

Dans le cas contraire, ou si vous les connaissez, je n'ai pas savoir comment trouver;)

Edit: Mes plates-formes sont Linux et M $ de Windows. Par conséquent, je suis à la recherche d'une solution aussi portable que possible.

(Propably quelque chose comme

#ifdef __unix__ 
    #define F1 'some number' 
    /* ... */ 
    #define ARROW_UP 'some other number' 
#elif __WIN32__ || MSDOS /*whatever*/ 
    #define F1 'something' 
    /* ... */ 
    #define ARROW_UP 'something different' 
#endif 

)

Répondre

1

Je pense que cela dépend de $ TERM, mais de toute façon ça va être une séquence de caractères. Je reçois ceci:

% read x; echo $x | od -c -- 
^[[15~ 
0000000 033 [ 1 5 ~ \n           
0000006 

C'est ma touche F5, et des excuses pour ce qui est une réponse * nix centrée, si ce n'est pas votre plate-forme.

0

Si vous utilisez un ordinateur Unix ou Linux, entrez simplement cntl-V, puis la clé dans vim *. Vous verrez le code.

HTH

acclamations,

Rob

1

Ce problème est beaucoup messier que quiconque voudrait. En bref, chacune de ces clés envoie une séquence de caractères et les détails dépendent de l'émulateur de terminal utilisé. Sur Unix, vous avez deux choix:

  • Écrivez votre application pour utiliser la bibliothèque curses et utiliser son interface à la base de données terminfo.

  • Parcourez la base de données terminfo pour trouver les séquences. Ou pour utiliser une API, regardez les sources pour tput pour voir comment cela est fait.

  • Utilisez le programme de ligne de commande tput pour vous aider à découvrir les séquences. Par exemple, pour apprendre la séquence pour F10, exécutez tput kf10 | od -a. Gardez à l'esprit que ce changement de terminal à terminal, vous devez exécuter tput chaque fois que vous exécutez votre application. Ecrivez votre application en utilisant l'une des bibliothèques X et accédez aux «symboles clés» plutôt qu'à une séquence de caractères. la fonction XLookupKeysym est un bon endroit pour commencer; vous trouverez les noms des symboles dans /usr/include/X11/keysymdef.h. Si vous souhaitez vous connecter au réseau à partir de systèmes non-X (Windows, par exemple), cette option n'est pas très bonne.

Je n'ai aucune idée de comment faire tout cela sur Windows.

0

Certaines des clés génèrent 2 caractères key codes. Une technique que j'ai utilisée avec succès sur le pc, est d'obtenir les 2 caractères, et de définir le 7ème bit sur le second caractère, et de renvoyer ce caractère comme réponse. Il laisse le reste du programme traiter chaque frappe comme un seul caractère.

La solution à votre problème dépend des clés que vous devez prendre en charge. Cacher la traduction derrière une fonction quelconque est généralement une bonne idée.

Questions connexes