Lorsque je suis dans Vim et tapez :ls
, Vim liste les tampons. Très probablement, il va en "mode cuit" en utilisant def_prog_mode()
et endwin()
. Je voudrais savoir comment il imprime les valeurs. Le meilleur que je sors est d'utiliser system("echo ....")
ce qui serait assez laborieux. J'ai essayé printf
- aucun effet, et printw
.Comment Vim affiche-t-il: ls résultats (curses/mode cuit)
Je dois faire le même genre de chose dans mes applications, et plutôt que de créer des fenêtres ou des fenêtres pop-up, je voudrais répertorier des informations internes comme Vim.
Voici un échantillon de ce que j'ai essayé, de http://gist.github.com/587622
#include <ncurses.h>
// it seems system echo is the only way to print some stuff in cooked mode
// i am trying to figure out how VIM displays the result of :ls
int main()
{
initscr(); /* Start curses mode */
printw("Hello World !!! Hit a key\n"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch();
def_prog_mode(); /* Save the tty modes */
endwin(); /* End curses mode temporarily */
int i = 0;
for (i = 0; i < 5; i++) {
system("echo inside cooked mode");
}
//printf("helllow there\n");
//system("/bin/ls"); /* Do whatever you like in cooked mode */
//system("read");
//system("/bin/sh"); /* Do whatever you like in cooked mode */
//system("echo hit a key"); /* Do whatever you like in cooked mode */
//printw("Hit a key buddy\n"); /* Print Hello World */
reset_prog_mode(); /* Return to the previous tty mode*/
getch();
/* stored by def_prog_mode() */
refresh(); /* Do refresh() to restore the */
/* Screen contents */
printw("After cooked mode.\nKey to quit"); /* Back to curses use the full */
getch();
refresh(); /* capabilities of curses */
endwin(); /* End curses mode */
return 0;
}
Compile à l'aide:
gcc -o a.out -lncurses a.c && ./a.out
Eh oui fonctionnait très bien! Je n'ai pas pensé à fflush puisque j'utilise du ruby et que je n'ai pas écrit en C depuis 18 ans. Merci. – rahul
Cela fonctionne très bien. Cependant, je vois que dans les micro-ordinateurs lorsque vous tapez C-x c pour aller à l'interpréteur de commande, cela n'efface pas l'écran. Vim fait et fait aussi mon prog, en raison de 'endwin()'. Si je supprime 'endwin' l'écran n'est pas effacé. mais au retour, il reste défilé. J'ai essayé def_shell_mode (???) mais ça gâche. Donc, comment conserver les fenêtres et les panneaux existants, et inversement. THX. – rahul
ok, compris, nous devons arrêter et redémarrer ncurses. – rahul