est-il possible d'avoir une manière multi-plateforme de gérer les touches de retour arrière et de flèches dans un programme C ou OCaml?Reconnaissance des touches fléchées avec stdin
En fait, une solution OCaml serait appréciée, mais de nombreuses fonctions unix standard sont directement intégrées aux appels API correspondants, donc il ne devrait pas y avoir de problème à porter une solution C. Ce que je vais faire est d'attraper les touches fléchées pour remplacer son comportement à l'intérieur du shell (en repropostant la dernière ligne ou des opérations comme celles-ci). Je pense que cette chose tombe avant le programme et n'est pas traitée par le code lui-même, donc je ne sais pas si c'est possible.
Le programme est compilé soit sous Linux, OS X et Windows (Cygwin) donc je voudrais le faire pour toutes les plateformes ..
J'ai presque réussi à faire ce travail, mais comment dois-je gérer l'écho manuel du personnage? Je demande cela parce que le stdin est ensuite transmis à un analyseur qui analyse ligne par ligne et l'interprète. Je devrais placer au milieu et imprimer chaque char? Mais lorsque l'utilisateur appuie sur la touche haut, il doit remplacer le caractère déjà imprimé par quelque chose de différent. – Jack
Après avoir relu vos questions, je pense que l'utilisation de readline/ledit est probablement votre meilleur pari. Mais si vous voulez faire les choses manuellement, alors vous devrez contrôler manuellement le stdin de votre analyseur. Lire à partir de stdin, vérifier une séquence d'échappement vers le haut-char, directement à stdin de votre analyseur. Je fais quelque chose de similaire ici: https://github.com/aplusbi/reflow/blob/master/reflow.ml dans la fonction 'main', où je suis en train de lire stdin dans une chaîne puis de l'écrire dans un fichier_descr . Vous finirez probablement par faire la même chose, mais vérifiez d'abord les séquences d'échappement. –
ces caractères fléchés sont en fait de ECMA 48 standartd ici http://man7.org/linux/man-pages/man4/console_codes.4.html vous pouvez voir quels caractères de contrôle de ECMA 48 Linux prend en charge: il semblerait que déplacer le curseur à gauche 5 caractères que vous pouvez faire \ 027 [5D – aeroson