【发布时间】:2019-02-04 15:51:25
【问题描述】:
我的 CLI 命令输出需要一个简单的寻呼机。我希望能够在输出中向上/向下滚动,一次一整页或一行一行。
我看了一下“less”的源代码,但它太复杂了,无法帮助我。于是我开始自己写一个简单的。到目前为止,我所做的是将命令输出写入文件。然后逐行读取文件并写入ncurses窗口。当我到达窗口底部时,我等待用户按下一个键,然后清除屏幕并写入一个新页面,依此类推。结果类似于“更多”命令。
这是我使用的简单代码:
int print()
{
FILE *fp;
ssize_t read;
int row, col, x, y;
char *line = NULL;
char c;
size_t len;
initscr();
getmaxyx(stdscr, row, col);
fp = fopen("path_to_output_file", "r");
if (!fp)
{
printf("Failed to open CLI output file.\n");
return -1;
}
while ((read = getline(&line, &len, fp)) != -1)
{
getyx(stdscr, y, x);
if (y == (row - 1))
{
printw("Press Any Key to continue...");
c = getch();
if (c == 'q')
{
break;
}
clear();
move(0, 0);
}
printw(line);
refresh();
}
fclose(fp);
getch();
endwin();
return 0
}
现在我需要帮助来找到实现向后滚动以在输出中向上移动一页/行的想法。我应该如何遍历文件并将行打印到 ncurses 窗口以获得我想要的结果。
除此之外,任何改进我的简单寻呼机的想法都值得赞赏...
【问题讨论】:
-
CLI 输出 是否可以包含比窗口宽度更长的行?它可以包含 TAB 吗?
-
@Armali 两个问题都是。现在我正在努力。我创建了一个大小为
window_rows的char *数组。该数组的每个元素都是大小为window_cols个字符的字符串。我从文件中读取了这么多数据并打印到 ncurses 窗口。我解决了你提到的第一个问题。但是 TAB 字符仍然是一个问题,但现在我忽略了它。
标签: c pagination ncurses