2010-12-10 3 views
4

Presque toutes les applications que j'ai écrites ont été des interfaces graphiques d'une forme ou d'une autre - HTML/Flex/Swing - et la plupart de mes applications en ligne de commande ont été extrêmement simples, sans beaucoup d'interaction. Le plus que j'ai jamais fait est de faire un jeu Ascii simple qui fait juste une boucle d'impression/entrée, en imprimant le plateau de jeu encore et encore. Je pensais à faire quelque chose d'un peu plus complexe, et j'étais vraiment curieux de voir comment certaines des applications de ligne de commande les plus avancées comme emacs fonctionnent. Plus précisément, je n'ai aucune idée de la façon dont ils semblent pouvoir avoir une ligne de commande interactive qui répond aux pressions de touches et semble fonctionner sur un tampon dans le terminal au lieu de passer constamment par la boucle print-> read-> print. Est-ce tout simplement stdin/stdout kung fu je ne suis pas au courant ou est-ce quelque chose de complètement différent?Les applications en ligne de commande comme emacs utilisent-elles normalement stdin/stdout?

Mise à jour - Je tiens à préciser que je n'essaie pas de poser une question générale ici, peut-être que j'ai juste de la difficulté à trouver les bons mots. Fondamentalement, je ne sais pas comment je ferais fonctionner emacs en utilisant stdin/stdout. Est-ce que j'utilise un mécanisme que je ne connais pas, et si oui, quoi?

+0

+1 Intéressé dans la réponse à cet effet. – vcsjones

+0

@Cameron - Pourquoi? Ce n'est pas une discussion, c'est une vraie question qui a une réponse très réelle, je n'arrive pas à trouver les bons termes à utiliser dans google. –

+0

Cela me semble un peu large, mais c'est juste mon opinion. Je ne me sens pas assez fort pour avoir voté pour fermer :) Ne vous méprenez pas; Je suis intéressé par la réponse, mais je ne sais pas si c'est plus approprié pour les «programmeurs» ou non. –

Répondre

2

Vous avez raison de dire que ce n'est pas seulement stdin/stdout pour un programme comme celui-ci. Généralement, il s'agit d'une bibliothèque de contrôle de terminal telle que curses.

D'autres bibliothèques arbitrairement choisies comprennent:

Voir aussi Text user interface sur Wikipedia.

Je ne suis pas très familier avec l'utilisation de ces bibliothèques tout, mais the current version of terminfo.c in the emacs source a le commentaire suivant, ce qui suggère qu'ils n'utilisent malédictions:

/* Interface to curses/terminfo library. 
    Turns out that all of the terminfo-level routines look 
    like their termcap counterparts except for tparm, which replaces 
    tgoto. Not only is the calling sequence different, but the string 
    format is different too. 
*/ 
+0

Parfait, merci! –

+0

emacs est décidément une application ** termcap **, n'utilisant pas la bibliothèque de curses de haut niveau. –

Questions connexes