Comme Vim: quand il commence, il vous amène à un autre "tampon". Lorsque VIM ferme, l'utilisateur voit le contenu précédent de l'invite de commande. p>
Quelqu'un peut-il savoir comment faire cela en utilisant c #? p>
merci p>
Edit: L'utilisateur ne verrait plus la sortie de l'application. J'espère que cela l'explique mieux. P>
3 Réponses :
Je pense que VIM enregistre son historique des fichiers ouverts et les plus probablement les tampons également, comme une copie de sauvegarde. L'idée de faire la même chose en C # est d'implémenter un tampon de fichier, une sorte de stockage qui enregistrerait et garderait une trace des choses que vous souhaitez - les paramètres d'entrée, etc. P>
Un autre problème ici est que Vim (comme VI) a le mode de commande qu'il aurait besoin de mettre en œuvre dans C #. Maintenant, cela dépend de ce que vous voulez exactement accomplir avec votre programme C #, c'est que c'est un éditeur, alors d'accord, dans tous les cas, vous devez distinguer entre commande et autres modes. P>
Cela a très peu à voir avec la question.
Je crois que la question de l'OP était un peu frappée dans le noir - pas facile à comprendre du tout. J'ai répondu à ce que je pensais être correct.
La question a du sens pour moi. Ouvrez une invite de commande. Démarrer Vim. Notez comment Vim apparaît dans cette même fenêtre. Quitter Vim. Remarquez comment aucun morceau de vim reste visible. Maintenant, la question est de savoir comment faire fonctionner de C #.
Eh bien, si c'est le cas, alors cela n'a rien à voir avec Vim, mais avec le terminal lui-même.
Vous pouvez le faire en écrivant de l'ancien contenu sur le tampon de la console comme décrit ici: Comment puis-je écrire une sortie de couleur rapide à la console? P>
..Comment-tu proposer d'obtenir l'ancien contenu?
J'ai suscité cela parce que je l'ai trouvé utile. Je ne savais pas à propos de Pinvoke, donc je n'étais pas au courant, je pouvais appeler des API Win32 du code C #. Grâce à cela, j'ai trouvé Creatisteconsolescreenbuffer. La réponse de Justin est plus détaillée, mais cela était assez bon pour me débloquer.
Je l'ai compris en regardant le code source VIM Les bits pertinents peuvent être trouvés dans OS_WIN32.C Dans la fonction afin qu'il enregistre simplement les informations de la console (y compris le titre et l'icône) puis restaure à nouveau sur la sortie. P> Malheureusement, le MCH_INIT CODE>, j'ai copié et collé le bit pertinent ici
CONSOLE CODE>
La classe ne donne pas accès au contenu du tampon d'écran, afin de le faire que vous allez avoir besoin de p / invoquer dans les fonctions Win32 pertinentes. P> < P> Sinon, la console Win32 prend en charge réellement Plusieurs tampons d'écran , ce qui pourrait être un moyen plus facile de mettre en œuvre cela - plutôt que de copier le tampon d'écran existant, créez simplement une nouvelle avec le Creatisteconsolescreenbuffer code>
et définissez ce tampon pour être Celui qui a été présenté actuellement en utilisant SetConsoleActivesCreenbuffer Code>
. Encore une fois, la classe code> code> n'est malheureusement pas en charge de ne pas prendre en charge plusieurs tampons d'écran afin que vous aurez besoin de P / invoke pour le faire. Aussi la classe code> console code> écrit toujours sur le tampon d'écran actif au point que l'application a été lancée, de sorte que si vous échangez le tampon d'écran actif, la catégorie console code> sera toujours L'écriture sur le tampon de vieil écran (qui n'est plus visible) - Pour vous déplacer, vous auriez besoin de p / invoquer tous vos accès à la console, voir Utilisation des tampons d'écran de la console dans .NET . P> P>
Merci! Vous avez raison, j'aurais dû regarder le code. J'oublie que certains projets sont toujours open source même dans le monde des fenêtres. J'avais heurté la créationConsolescreenbuffer grâce à Jgauffin Réponse, mais sauver l'état du tampon précédent est une bonne idée!
Il est nécessaire d'enregistrer le contenu de la mémoire tampon d'origine, car il est effacé lorsque le tampon n'est pas actif.
L'exemple que vous décrivez est la manière dont une application C # console fonctionnerait actuellement si elle est invoquée à partir d'une ligne de commande; Si vous exécutez une application de console, fermez-la, vous êtes retourné à votre ligne de commande précédente. Ou je manque quelque chose?
Je pense que l'affiche signifie que toute sortie de l'application ne doit plus être sur la console, mais plutôt ce qu'il y avait avant l'exécution.
@RICHARD Les applications telles que DIR ou CAT sembleront sur la même console "tampon". Des applications telles que Vim redessinent beaucoup de texte sur la fenêtre de votre console, mais après la clôture, l'utilisateur revient à voir les commandes qu'il a tapé, y compris Vim. Toute la sortie que Vim mis sur la fenêtre est partie. Laissez-moi savoir si je ne m'explique pas correctement
Votre explication va bien, mais personne n'a encore compris! Je n'ai pas de suggestion pour toi désolé ..
Si vous souhaitez comprendre la question meilleure Exécuter Vim de la ligne de commande (vous donez Il faut simplement installer, simplement décompresser et exécuter vim.exe), puis tapez
: q code> pour quitter - le contenu précédent de la console re-apparaît.
@robertoprs Oh, je vois ton point, oui, désolé j'ai mal interprété votre question. Je ne sais de aucune façon que vous puissiez le faire dans Native C #, vous devrez peut-être creuser dans l'API Windows via Pinvoke, je suis désolé que je ne sois pas aidée.