Utiliser GNU Readline; Comment puis-je ajouter ncurses dans le même programme?

Le titre est un peu plus spécifique que mon but:

j'ai un programme en ligne de commande qui utilise GNU Readline, principalement pour l'historique des commandes (c'est-à-dire retrouver les commandes précédentes en utilisant la flèche haut) et quelques autres subtilités. En ce moment, la sortie du programme apparaît intercalée avec l'entrée de l'utilisateur, ce qui est parfois correct mais la sortie est asynchrone (elle vient via une connexion réseau en réponse aux commandes d'entrée), et cela devient ennuyeux parfois (par exemple si les lignes sont sortie lorsque l'utilisateur tape une nouvelle entrée).

j'aimerais ajouter une fonctionnalité à ce programme: par une "fenêtre" pour la sortie. J'ai pensé utiliser ncurses pour ça. Mais il ressort de l' ncurses FAQ que les deux bibliothèques ne sont pas faciles à utiliser.

je pourrais envisager d'utiliser Editline ou tecla au lieu de Readline, mais il n'est pas clair pour moi si l'un de ceux qui va résoudre mon problème. J'envisagerais aussi d'utiliser quelque chose d'autre que ncurses, y compris une bibliothèque qui fournit les deux types de fonctionnalités (fenêtres en mode texte et historique des commandes), mais je ne sais pas ce qui pourrait être le mieux.

Oh, et le soutien pour le texte coloré pourrait obtenir des points bonus. Je pense que je peut être en mesure de le faire avec Readline, c'est peut-être une autre préoccupation, mais si une solution à mon problème rend également facile d'ajouter un peu de couleur à la sortie, tant mieux.

J'utilise Ubuntu Hardy (Linux 2.6).

21
demandé sur John Zwinck 2009-03-28 01:11:35

6 réponses

j'ai fait quelques recherches, et il semble que vous êtes hors de la chance.

Pour ncurses alternatives y sont argot,Triton et Turbo Vision. L'argot est bien plus qu'une simple manipulation d'écran et donc plus complexe, mais peut-être il peut être utilisé pour votre but?. Newt utilise l'écran la manipulation et est beaucoup plus simple, mais trop simple et mono-threaded-mode pour votre but, je pense.

Turbo vision est la bibliothèque graphique en mode texte de Borland, utilisé par tous leurs outils à la fin des années 80/début des années 90. Borland a publié la source code lorsque le marché pour ce genre de chose diminué, et il est maintenant un port pour linux (note,ce projet semble avoir écrit sa propre mise en œuvre de la vision turbo). Ce port n'est pas mort (il y a a été quelques mises à jour cvs cette année qui a compilé fine (les versions plus anciennes ne l'a pas fait)), mais aucun des exemples de télévision que j'ai trouvé n'était à jour et je a seulement eu quelques-uns d'entre eux pour compiler avant d'abandonner sur le reste. C'est un peu dommage, parce que la TÉLÉVISION était un bel environnement à utiliser. La TÉLÉVISION est btw C++ (et je suppose que vous êtes à l'aide de C?).

pour une alternative à readline, il y a libkinput, ce qui peut fonctionner avec ncurses (il dit qu'il peut utiliser ncurses' terminfo. mais je suis pas sûr si cela signifie qu'il peut coexister avec l'utilisation de ncurses)?

peut-être une option est d'exécuter readline "extérieurement" à votre programme ncurses utiliser rlwrap