J'ai parcouru la documentation et je dois dire que je n'ai trouvé aucun moyen de détecter et d'afficher le vi-mode actuel. J'espère que vous aurez une agréable surprise et que quelqu'un trouvera une solution, mais je ne vois certainement pas de moyen de faire ce que vous demandez.
Je pense qu'il y a un moyen de le faire, mais c'est une exagération massive pour une petite gêne, et je ne pense pas que c'est ce que vous aviez en tête lorsque vous avez posé cette question. Si cela est vrai, arrêtez de lire maintenant et profitez de votre vie.
OTOH, si c'est vraiment votre bête noire, et que cela vous rend fou, et que vous voulez vraiment absolument désespérer de toucher ce problème, voici mon idée de la façon de procéder:
- Obtenez une copie de la programmation avancée dans l'environnement UNIX (R) de W. Richard Stevens.
- Lisez les chapitres sur les flux et les E / S du terminal.
- Téléchargez le code source dans le livre susmentionné, qui comprend un exemple de flux pouvant être superposé sur un terminal.
- Implémentez votre gestion de la combinaison de touches Échap (ou les deux touches de changement de mode) et indiquez-la via une cloche ou une manipulation en arrière-plan de la ligne actuelle.
En bref, Unix implémente les E / S du terminal en tant que flux d'E / S en duplex intégral entre le pilote de périphérique et le processus utilisateur, dans lequel des modules peuvent être insérés. Il est organisé comme une pile, vous pouvez donc superposer autant de flux que vous le souhaitez. La somme des flux injectés crée votre comportement d'E / S de terminal.
Lorsqu'un personnage est entré, le premier module doit l'inspecter et le transmettre (s'il le souhaite). Lorsque la réponse arrive dans la direction opposée, elle a à nouveau l'occasion de l'inspecter et de la transmettre. C'est ainsi qu'un Ctrl-C est traité à un niveau supérieur à une touche de caractère normale.
Vous pouvez créer un binaire implémentant un module de flux qui, lorsqu'il est appelé, s'exécute silencieusement au premier plan, inspectant et transmettant toutes les frappes, effectuant votre action préférée sur les frappes qui vous intéressent. À toutes fins utiles, il semblera que vous travaillez sur le shell. Oooh. Vous pouvez invoquer ce binaire sur la dernière (ou la première, ou n'importe quelle) ligne de votre .tcshrc et vous ne sauriez même pas qu'il est là.
Il y a une bonne introduction ici , mais je n'ai pas trouvé grand-chose sur ce sujet, probablement parce qu'il a dépassé son apogée.