用 C 中的 Curses 连续键盘输入保存字符串和 N 行的历史记录

Continuous keyboard input with Curses in C saving string and history of N lines

我想知道是否有人知道如何修改以下代码以允许我等待输入文本条目,将其存储在相应的变量中并直接跳转到它下面的下一行而不用删除之前写入的内容,除非超过创建的 window 的大小。

#include <curses.h>

int main()
{
    WINDOW *wnd;
    char txt[100];
    // INICIALIZACIÓN DE LAS VENTANAS.
    initscr();
    cbreak();
    noecho();
    refresh();
    start_color();
    init_pair(1,COLOR_WHITE,COLOR_RED);

    wnd = newwin(10,100,1,1);
    wattron(wnd,COLOR_PAIR(1));
    wbkgd(wnd,COLOR_PAIR(1) | ' ');
    wclear(wnd);
    box(wnd,ACS_VLINE,ACS_HLINE);

    wmove(wnd,1,1);
    wprintw(wnd,">> ");
    wrefresh(wnd);
    wmove(wnd,1,6);
    echo();
    wgetstr(wnd,txt);
    noecho();

    return 0;
}

我现在编写的程序一检测到第一个介绍就将值存储在 char 中但关闭 ncurses window...

有谁知道如何修复它以获得我正在寻找的东西?

您需要围绕 wgetstr() 进行一些循环。所以,忽略你想要什么样的逻辑,像这样:

while (<your condition>)
{
    wgetstr(window, text);

    <do something with the text you read>
}

你是说当光标位于 window 底部时滚动 window 吗?

#include <ncurses.h> // <-------------- I use ncurses

int main()
{
  WINDOW *wnd;
  char txt[100];
  int  line;

  // INICIALIZACIÓN DE LAS VENTANAS.
  initscr();
  cbreak();
  noecho();
  refresh();
  start_color();
  init_pair(1,COLOR_WHITE,COLOR_RED);

  wnd = newwin(10,100,1,1);
  scrollok(wnd, TRUE);       // <--------- Allow scrolling
  wattron(wnd,COLOR_PAIR(1));
  wbkgd(wnd,COLOR_PAIR(1) | ' ');
  wclear(wnd);
  box(wnd,ACS_VLINE,ACS_HLINE);

  line = 1; // <------------- First line in the window

  while (1) {

    wmove(wnd,line,1);
    wprintw(wnd,">> ");
    wnoutrefresh(wnd);
    doupdate(); // <----- Refresh all the preceding modifications
    echo();
    wgetstr(wnd,txt);
    noecho();
    if (line < 8) {  // <------- Check bottom of window
      line ++;
    } else {
      box(wnd,COLOR_PAIR(1) | ' ', COLOR_PAIR(1) | ' '); // <--- Clear old box before scrolling
      wscrl(wnd, 1); // <------ scroll 1 line up
      box(wnd,ACS_VLINE,ACS_HLINE); // <------ Redo the box
    }
  }

  endwin();

  return 0;
}