ncursesを試す
cでncursesを試すのに、moreとかlessっぽいアレを作ってみた。
#include <stdlib.h> #include <stdio.h> #include <ncurses.h> int main(int argc, char **argv) { char *filename; FILE *fp; int ch; int h, w; int lineno = 1; int input; WINDOW *win; if (argc < 2) { fprintf(stderr, "Usage: %s [filename]\n", argv[0]); exit(1); } filename = argv[1]; if ((fp = fopen(filename, "r")) == NULL) { fprintf(stderr, "Could not open %s\n", filename); exit(1); } win = initscr(); noecho(); cbreak(); getmaxyx(win, h, w); scrollok(win, TRUE); while ((ch = fgetc(fp)) != EOF) { if (ch == '\n') { if (h <= lineno) { break; } wmove(win, lineno++, 0); } else { waddch(win, ch); } } refresh(); while ((input = getch()) != 'q') { if (ch == EOF) { wmove(win, h-1, 0); wprintw(win, "(END)"); } else { wscrl(win, 1); wmove(win, h-1, 0); while ((ch = fgetc(fp)) != EOF) { if (ch == '\n') { lineno++; break; } waddch(win, ch); } refresh(); } }; endwin(); return 0; }
メモ
- 左上端の座標が(0, 0)
initscr()
の返り値はWINDOW *
型scrollok(win, TRUE)
でスクロール許可getmaxyx(win, y, x)
でウィンドウのサイズを取得wscrl(win, n)
でn行スクロール