From: Laurent Mazet Date: Sun, 16 Mar 2025 14:08:51 +0000 (+0100) Subject: new menu in search mode X-Git-Tag: v1.1~6 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=10ceccdb5ffc7a9b02fb36083ae9977bbf975d88;p=fm.git new menu in search mode --- diff --git a/display.c b/display.c index 983469a..5b61c06 100644 --- a/display.c +++ b/display.c @@ -153,7 +153,7 @@ int helpwindow (char *msg, int xoffset, int yoffset) return j; } -void menuwindow (window_t *win, char *menu, int *index) +void menuwindow (window_t *win, char *menu, int *index, char *opt) { int i; set_color (black); @@ -165,8 +165,8 @@ void menuwindow (window_t *win, char *menu, int *index) if (_index < 0) { _index = 0; } - if ((int)strlen (menu) - _index < win->xsize) { - _index = strlen (menu) - win->xsize; + if ((int)strlen (menu) + ((opt) ? (int) strlen (opt) : 0) - _index < win->xsize) { + _index = strlen (menu) + ((opt) ? strlen (opt) : 0)- win->xsize; } if (_index < 0) { _index = 0; @@ -179,6 +179,10 @@ void menuwindow (window_t *win, char *menu, int *index) set_color (((menu[_index + i] >= 'A') && (menu[_index + i] <= 'Z')) ? iblue : black); mvaddch (win->yoffset, win->xoffset + i, menu[_index + i]); } + set_color (ired); + for (;(i < win->xsize) && (opt) && (*opt != 0); i++) { + mvaddch (win->yoffset, win->xoffset + i, *opt++); + } set_color (white); set_color (blue); @@ -342,11 +346,6 @@ void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *in set_color (win->active ? (search ? ired : black) : white); _dobound (win->xsize, win->ysize, win->xoffset, win->yoffset); - if (search) { - mvaddstr (win->yoffset + win->ysize, win->xoffset, "Search ["); - mvaddstr (win->yoffset + win->ysize, win->xoffset + 8, search); - mvaddch (win->yoffset + win->ysize, win->xoffset + 8 + strlen (search), ']'); - } if (page > 0) { mvaddch (win->yoffset, win->xoffset - 1, ACS_UARROW); mvaddch (win->yoffset, win->xsize + win->xoffset, ACS_UARROW); diff --git a/display.h b/display.h index caeb105..fe1b604 100644 --- a/display.h +++ b/display.h @@ -5,7 +5,7 @@ int helpwindow (char *msg, int xoffset, int yoffset); -void menuwindow (window_t *win, char *status, int *index); +void menuwindow (window_t *win, char *status, int *index, char *opt); void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y, int *index, char *search); diff --git a/fm.c b/fm.c index 1a2f758..416d17e 100644 --- a/fm.c +++ b/fm.c @@ -34,7 +34,7 @@ int xoffset = 1; int yoffset = 2; int width = 0; -char *help = +char *help0 = "alt Menu functions\n" "ret Go dir/View file\n" "tab Change panel\n" @@ -48,8 +48,13 @@ char *help = " Status right\n" " Status left\n" ; +char *help1 = + "alt Menu functions\n" + "ret Go dir/View file\n" + ; -char *menu = "Help View Copy Move Rename Delete Newdir Select Filter Xmod Quit"; +char *menu0 = "Help View Copy Move Rename Delete Newdir Select Filter Xmod Quit"; +char *menu1 = "Help Next Previous Quit Reset"; int usage (int ret) { @@ -201,7 +206,14 @@ int main (int argc, char *argv[]) elem_t *current = NULL; char *string = NULL; - menuwindow (winmenu, menu, &index_m); + char *opt = NULL; + if (search[panel]) { + opt = (char *) calloc (3 + strlen (search[panel]) + 1, 1); + CHECKALLOC (opt); + sprintf (opt, " [%s]", search[panel]); + } + menuwindow (winmenu, (mode) ? menu1 : menu0 , &index_m, opt); + free (opt); /* display panels */ for (i = 0; i < MAXPANELS; i++) { @@ -243,7 +255,6 @@ int main (int argc, char *argv[]) if (mode) { int len = (search[panel]) ? strlen (search[panel]) : 0; switch (ch) { - case KEY_ESC: case '\n': case '\t': case '\r': @@ -259,6 +270,25 @@ int main (int argc, char *argv[]) search[panel][len - 1] = '\0'; } break; +#ifndef PDCURSES + case KEY_ESC: + switch (getch ()) { +#endif /* PDCURSES */ + case ALT_H: + helpwindow (help1, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset); + break; + case ALT_Q: + mode = 0; + free (search[panel]); + search[panel] = NULL; + break; + case ALT_R: + *search[panel] = '\0'; + break; +#ifndef PDCURSES + } + break; +#endif /* PDCURSES */ default: search[panel] = (char *) realloc (search[panel], len + 2); CHECKALLOC (search[panel]); @@ -296,7 +326,7 @@ int main (int argc, char *argv[]) for (i = 0; i < MAXPANELS; i++) { elementwindow (winelem[i], "", NULL); } - menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL); + menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL, NULL); char *src = newfilename (dirname[panel], current->name); char *status = strdupcat ("Viewing file '", src, "'", NULL); elementwindow (winelem[0], status, NULL); @@ -307,7 +337,7 @@ int main (int argc, char *argv[]) free (msg); } free (src); - menuwindow (winmenu, menu, &index_m); + menuwindow (winmenu, menu0, &index_m, NULL); } break; case '\t': @@ -331,7 +361,7 @@ int main (int argc, char *argv[]) break; case 'H': case 'h': - helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset); + helpwindow (help0, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset); break; case KEY_UP: case 'i': @@ -428,7 +458,7 @@ int main (int argc, char *argv[]) } break; case ALT_H: /* help */ - helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset); + helpwindow (help0, (width - strmaxlen (help0, '\n')) / 2, 3 * yoffset); break; case ALT_M: /* move */ if (askwindow (" Move selected file(s) (Y/N) ", winscreen, "Yy", "Nn") == 1) { @@ -511,7 +541,7 @@ int main (int argc, char *argv[]) for (i = 0; i < MAXPANELS; i++) { elementwindow (winelem[i], "", NULL); } - menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL); + menuwindow (winmenu, "Help up(I) down(J) Mode Quit", NULL, NULL); char *src = newfilename (dirname[panel], current->name); char *status = strdupcat ("Viewing file '", src, "'", NULL); elementwindow (winelem[0], status, NULL); @@ -522,7 +552,7 @@ int main (int argc, char *argv[]) free (msg); } free (src); - menuwindow (winmenu, menu, &index_m); + menuwindow (winmenu, menu0, &index_m, NULL); } break; case ALT_X: /* chmod */