Skip to content

Instantly share code, notes, and snippets.

@delta4d
Created March 16, 2017 01:50
Show Gist options
  • Save delta4d/97ccaf7ccc440f9a177109708c1cc44b to your computer and use it in GitHub Desktop.
Save delta4d/97ccaf7ccc440f9a177109708c1cc44b to your computer and use it in GitHub Desktop.
#include <ncurses.h>
#include <string.h>
char menus[10][100];
int read_menu() {
int n = 0;
char *p = NULL;
while (fgets(menus[n], sizeof(*menus), stdin)) {
if (p = strchr(menus[n], '\n')) *p = '\0';
++n;
}
return n;
}
void print_menu(int cur, int const n) {
int i = 0;
for (i=0; i<n; ++i) {
if (i == cur) attron(A_REVERSE);
mvaddstr(i, 0, menus[i]);
if (i == cur) attroff(A_REVERSE);
}
refresh();
}
int main(int argc, char **argv) {
int n = read_menu();
int cur = 0;
int ch = 'A';
initscr();
noecho();
cbreak();
keypad(stdscr, TRUE);
print_menu(cur, n);
mvprintw(n, 0, "First: %d\n", ch); // 65
while (true) {
ch = getch();
if (ch == KEY_UP || ch == 'k') --cur;
else if (ch == KEY_DOWN || ch == 'j') ++cur;
cur = (cur + n) % n;
print_menu(cur, n);
mvprintw(n+1, 0, "%d\n", ch); // -1
}
endwin();
return 0;
}
@delta4d
Copy link
Author

delta4d commented Mar 16, 2017

  1. gcc menu.c -lncurses
  2. ls | ./a.out
  3. ch is -1 inside loop

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment