From d2a1f7b30ab6a1c4dce0e66a79f030e3949680c2 Mon Sep 17 00:00:00 2001 From: Daniel Liu Date: Mon, 14 Dec 2020 00:02:58 -0500 Subject: [PATCH] finally got menu working --- makefile | 5 +--- menutest.c | 7 +++-- taskasaur | Bin 17984 -> 18048 bytes taskasaur.c | 75 +++++++++++++++++++++++++++++----------------------- 4 files changed, 48 insertions(+), 39 deletions(-) diff --git a/makefile b/makefile index 1c1c3e9..c2841d6 100644 --- a/makefile +++ b/makefile @@ -5,8 +5,5 @@ make: taskasaur taskasaur: $(CC) -lncurses -lmenu taskasaur.c -o taskasaur -menutest: - $(CC) -lncurses -lmenu menutest.c -o menutest - clean: - rm taskasaur menutest + rm taskasaur diff --git a/menutest.c b/menutest.c index e76568e..f8c3dac 100644 --- a/menutest.c +++ b/menutest.c @@ -53,12 +53,15 @@ main(int argc, char** argv) // ofc the first thing we need is vim keys switch (ch) { - case 106: // j + case 'j': menu_driver(todo_menu, REQ_DOWN_ITEM); break; - case 107: // k + case 'k': menu_driver(todo_menu, REQ_UP_ITEM); break; + case 'G': // try to implement gg too + menu_driver(todo_menu, REQ_LAST_ITEM); + break; } refresh(); diff --git a/taskasaur b/taskasaur index 275b6ee81722c63c5187b4f641d7839a9b5b5613..09699c469bbab19a3af69543d0587f1acd63af42 100755 GIT binary patch delta 3707 zcmZ8k4Nz3a9pAkV;1uMJfOn@xj#L`_;PP3A-ul6BN_TWm%-izW(Cde<|I2@aDTXC!98K}YaW50t z4ij;)4CAx3gzY!kS(VX2udrUDo%MiI1vh4P(EWn5=9$=GV=8@vOLU55m`drd1%F$N zULJ!E3v9p1L4Pl}H{pLq*eAt!T#UaI<8pYo*{I3Ex`0Y$eP%aPz%61l&hAV?sW##u zE*~$K5WO3unR(*6Hns+8TWea#o)-W17Jq9UX=-c@RPOROv=Kg3*0$8|_QSlxAE>D# z{)XB;^$n!KzegvP^#T7bE(;f?#;uBP4Ybs>HZ?F${5zYqR`W5&83gx@Bq~A&4Wtfb zS~ZcR*4HNyVk9lPu5CfRg~!;(JPCGBG)04r6=*azp(b5FUG%tqn(a+k?o8H{VpIw> zfiIwqolmekpPpr%o@GsEUnJPsB1>XYj@~{qkQoC{Tk@%M-Yln%B29<~v9eurzN8D; zwz+op>fFSniCMPA1N-N`XnNNgrAcb$0yiObPIyd}v-37*+HMpiN0L-;_Qbdn1Ic4#(^Vu-8t*Vea3tCo!l|!EglH_o~cIef#DyWniRaGyU53`<> zoM2O^{g@nT>#3E)rpzpXm!>^YIgQ{~;Y}CsQRzr)&XG zxelF@g*=+`3*eM8EzMgz&B18EhLpbmpM0*!bhI-{Z<+_O#8{g%FtpDCHEW=_8Bma; z`hj|dqtK8jvdIy1Gpa#}V_^Ru%8an~DN@JC<==-47_OE%5LeeO@G0KB&MX;OY zo$Y6T6v*UbumodiUp?H@BpPHZFtQwKN65DR*=Iz-85xnr`SOiO!<;}I)#(_gH)}hkVH%c(<)d;W z^)JE{md5oRdLKE^s^GXB-lp{{k~e>jHmPoIqvMwd(Y!BC80AR$G-fs~(?9cm$RWc_ zx^Tsy9NC1G;_CPL)RXyiLec~d(1e%!Z&$KgK3Wp~#K^+vXxF*+Jl_QBCYn`jWu3KcoXW}D#(RsG8$Y$)6uA#}-)=Iple-^q*b`@Xj^^6i2vnS}UWE(?9)t0)WI z^S$H?J*bc)EB^%b){RRaVn-w>pA9^+--titdL`)DxvRR7c$@rwvZ|@Ek>qao*Z5lr zmJ-*1g~qkzp!j(rXTDU`1E8Cf9Q|55c-Cd4Y_PoVIR8eW*0K_voBoV%IHIm`}{NFn`ix*p*Shd zc+Zd+pFsH6d>`JQFi(bkr3>6KyzT!{)w`fGXsOd^P&l3lk0|JitU1HJ%mr=&ZyjnC z%My#vJ+5dTC9s<)dpl!;Wh2U!F%9zoedhFBXY7|b_Dc+_c*@wFm3B)^s$(=eoz}68 z>`Ge2_Ji+Yec6SyiA`pw+sb(>@$er~{!}rWyO8Fv&F*xn3^cnNDZRw1y-%@ngNaVF zshkg-RpKJ1!DFKl0njv$9j?@yX0#v>_1baab9zhZ7$VqF!d|bN23RlbHZsaCdb{au zwt3Y_C(*AGv1rS{7)TPyVYXa53SF98N~5efx70v<><_uwbP1cv-GflodC$^wER>gS zsd8w}X67@d8)VA5y=e=`2CSKj*vajpSZIybic8;aK04dcC@U}y-{Y7A0&`T1C-}&E zo=dRR>3L$YctqM?A{ft-TiTm63?WF{1vQLTzH@CpTVeQysR&-I6v@hd4EGZsjOXmu~%BUx&L| zSaJw@-m@obJkBm6&!EV2aUkRQO_cp~?Q3bX@8UBzbarQLO{#v~E-EVBShl{n(wptg z&SP8GbtKGO%CD|lAq0L^XAjrq&8cbeR|ou+xWcow1;tif3^dj@YPb0If(-+IFQ}sf zMTIVk<5OMaw#ANEjN-&XtLTR`MoZXak=v4^FIf(A`tmJRx>Uu!@5`S#-LX^N#QJ`CLtBPph-qdJN^Iv Cm`j}i delta 3584 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 JXvVNT{{ySEDh2=m diff --git a/taskasaur.c b/taskasaur.c index 39eaca6..83bbab1 100644 --- a/taskasaur.c +++ b/taskasaur.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -9,9 +10,8 @@ void winch_handler(int sig); char** read_todo(FILE* file, int* length); -WINDOW* create_list_win(int height, int width, int y, int x); - -void draw_todo(WINDOW* todo_win, char** todo_list, int todo_length); +WINDOW* create_win(int height, int width, int y, int x); +MENU* create_todo_menu(char** todo_list, int todo_length); #include "config.h" @@ -22,10 +22,12 @@ main(int argc, char** argv) FILE* board_file; char** todos; int todo_length; + int height, width; - int x, y; int ch; + WINDOW* todo_win; + MENU* todo_menu; signal(SIGWINCH, winch_handler); @@ -71,47 +73,42 @@ main(int argc, char** argv) return 2; } + /* for (int i = 0; i < todo_length; i++) { */ + /* printf("%p\n", todos[i]); */ + /* printf(todos[i]); */ + /* } */ + /* return 0; */ // start ncurses initscr(); cbreak(); - /* raw(); */ noecho(); curs_set(0); start_color(); - - init_pair(1, COLOR_CYAN, COLOR_BLACK); - init_pair(2, COLOR_BLACK, COLOR_CYAN); getmaxyx(stdscr, height, width); - x = y = 0; refresh(); - todo_win = create_list_win(20, 40, 5, 5); - draw_todo(todo_win, todos, todo_length); + /* todo_win = create_win(20, 40, 5, 5); */ + char* test_todo[] = {"1lmao", "2pee", "3poo", "4feces"}; + /* todo_menu = create_todo_menu(test_todo, 4); */ + todo_menu = create_todo_menu(todos, todo_length); + post_menu(todo_menu); - move(y,x); - while ((ch = getch()) != 113) { // while not q + while ((ch = getch()) != 'q') { - // ofc the first thing we need is vim keys switch (ch) { - case 104: // h - x -= 1; - break; - case 106: // j - y += 1; + case 'j': + menu_driver(todo_menu, REQ_DOWN_ITEM); break; - case 107: // k - y -= 1; + case 'k': + menu_driver(todo_menu, REQ_UP_ITEM); break; - case 108: // l - x += 1; + case 'G': // try to implement gg too + menu_driver(todo_menu, REQ_LAST_ITEM); break; } - move(y,x); - refresh(); - /* clear(); */ } endwin(); @@ -146,10 +143,12 @@ read_todo(FILE* file, int* length) while ((nread = getline(&lineptr, &len, file)) != -1) { out_len++; out_arr = realloc(out_arr, (sizeof(char*))*out_len); // bad to keep resizing? + + lineptr[strcspn(lineptr, "\n")] = 0; // remove newline + out_arr[out_len-1] = lineptr; lineptr = NULL; - len = 0; } *length = out_len; @@ -157,18 +156,28 @@ read_todo(FILE* file, int* length) } WINDOW* -create_list_win(int height, int width, int y, int x) +create_win(int height, int width, int y, int x) { WINDOW* new_win = newwin(height, width, y, x); wrefresh(new_win); return new_win; } -void -draw_todo(WINDOW* todo_win, char** todo_list, int todo_length) { +MENU* +create_todo_menu(char** todo_list, int todo_length) +{ + MENU* todo_menu; + ITEM** item_list; + ITEM* cur_item; + + item_list = malloc((todo_length+1)*sizeof(ITEM*)); for (int i = 0; i < todo_length; i++) { - mvwprintw(todo_win, i+1, 2, todo_list[i]); + printf(todo_list[i]); + item_list[i] = new_item(todo_list[i], ""); } - box(todo_win, 0, 0); - wrefresh(todo_win); + item_list[todo_length] = NULL; // last item needs to be a null pointer for some reason? + + todo_menu = new_menu(item_list); + + return todo_menu; } -- 2.20.1