Salut à tous,
Dans le cadre d'un petit projet pédagogique, la programmation d'un interpréteur de commandes, je dois recréer les fonctionnalités de saisie de texte habituelles, car je n'utilise pas le mode ligne de saisie proposé par le pilote de terminal linux (mode canonique).
Pour info : je code en C (pour rester proche du système, vu que c'est ce qui m'intéresse), et je n'ai pas posté dans la section C car ma problématique n'est pas en rapport avec le choix du langage.
Je dois donc gérer le déplacement du curseur, le backspace, etc...
J'en arrive donc à ma question : j'utilise pour l'instant un vecteur pour stocker les caractères saisis par l'utilisateur mais je dois déplacer tout le contenu celui ci lors de l'insertion non terminale...
Ex : l'utilisateur saisit la chaîne "ABC", puis déplace le curseur une fois vers la gauche pour insérer après le char 'B'. Le contenu du vecteur doit être décalé de 1 rang vers la droite pour permettre l'insertion du nouveau char > ABxC où x est le nouveau char.
Cela sous entend qu'à chaque insertion non terminale ou chaque effacement, un sous ensemble du vecteur doit être décalé, ce qui me semble un petit peu lourd en terme de traitement
J'envisage donc l'utilisation d'une liste linéaire doublement chaînée pour permettre l'insertion de contenu direct, où chaque élément de la liste contient un char, mais :
- Cela nécessite une allocation mémoire à chaque frappe
- Cela empêche l'accès direct au donnée
- Et puis ça demande à développer une fonction qui retourne un char * de la liste pour l'exploiter...
Au final je me demande si une approche hybride exploitant ces deux types de structure de donnée n'est pas envisagable.
Qu'en pensez vous, et existe-t-il des voies alternatives (car je suis loin d'avoir une vue exhaustive du sujet).
j'avoue ne pas avoir regardé les sources d'autres projets similaires, soit car les sources sont trop touffues, et comme c'est à but pédagogique, je réinvente volontairement la roue (j'utilise le moins de librairies possible par ex.)
Merci d'avance
Partager