Когда я нахожусь внутри Vim и набираю :ls
, Vim перечисляет буферы. Скорее всего, он входит в «приготовленный режим» с использованием def_prog_mode()
и endwin()
. Я хотел бы знать, как это печатать значения. Лучшее, что я получил, это использование system("echo ....")
, что было бы довольно трудоемко.
Я пробовал printf
- без эффекта и printw
.
Мне нужно сделать то же самое в моих приложениях, и вместо того, чтобы создавать Windows или всплывающие окна, я хотел бы перечислить внутреннюю информацию, как это делает Vim.
Вот пример того, что я пробовал, с 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;
}
Скомпилируйте его, используя:
gcc -o a.out -lncurses a.c && ./a.out