From 74eebb5e3459200f2e23bc891e97dda90d9e5398 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Fri, 10 Jan 2025 00:07:58 +0100 Subject: [PATCH] add function 'create new directory' --- display.c | 20 ++++++++++++++------ display.h | 4 ++-- fm.c | 29 ++++++++++++++++++++--------- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/display.c b/display.c index 95f4349..50c92dd 100644 --- a/display.c +++ b/display.c @@ -307,10 +307,11 @@ char *getwindow (char *msg, window_t *win, int length, int size) if (xoffset < 1) { xoffset = 1; } + int xsize = strlen (msg) + 1 + length; int yoffset = win->yoffset + (win->ysize - 1) / 2; set_color (black); - _dobound (strlen (msg) + 1 + length, 1, xoffset, yoffset); + _dobound (xsize, 1, xoffset, yoffset); mvaddstr (yoffset, xoffset, msg); xoffset += strlen (msg); mvaddch (yoffset, xoffset, ' '); @@ -398,19 +399,26 @@ char *getwindow (char *msg, window_t *win, int length, int size) return name; } -void msgwindow (char *msg, int xoffset, int yoffset, int length) +void msgwindow (char *msg, window_t *win, int length) { + int xsize = (length > 0) ? length : (int)strlen (msg); + int xoffset = win->xoffset + (win->xsize - xsize) / 2; + if (xoffset < 1) { + xoffset = 1; + } + int yoffset = win->yoffset + (win->ysize - 1) / 2; + set_color (black); - _dobound ((length > 0) ? length : (int)strlen (msg), 1, xoffset, yoffset); - mvaddstr (yoffset, xoffset + ((length > 0) ? (length - (int)strlen (msg)) / 2 : 0), msg); + _dobound (xsize, 1, xoffset, yoffset); + mvaddstr (yoffset, xoffset, msg); set_color (white); } -int askwindow (char *msg, int xoffset, int yoffset, char *ok, char *ko) +int askwindow (char *msg, window_t *win, char *ok, char *ko) { size_t i; - msgwindow (msg, xoffset, yoffset, 0); + msgwindow (msg, win, 0); int stop = 0; while (!stop) { diff --git a/display.h b/display.h index 91f6d41..98a5bf1 100644 --- a/display.h +++ b/display.h @@ -13,9 +13,9 @@ void elementwindow (window_t *win, char *status, int *index); char *getwindow (char *msg, window_t *win, int length, int size); -void msgwindow (char *msg, int xoffset, int yoffset, int length); +void msgwindow (char *msg, window_t *win, int length); -int askwindow (char *msg, int xoffset, int yoffset, char *ok, char *ko); +int askwindow (char *msg, window_t *win, char *ok, char *ko); #define KEY_DELETE 0x014a #define KEY_ESC 0x1b diff --git a/fm.c b/fm.c index 1dcae02..5c12caf 100644 --- a/fm.c +++ b/fm.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "debug.h" @@ -186,7 +187,7 @@ int main (int argc, char *argv[]) int stop = 0; while (!stop) { elem_t *current = NULL; - char *filter = NULL; + char *string = NULL; menuwindow (winmenu, menu, &index_menu); @@ -300,11 +301,10 @@ int main (int argc, char *argv[]) case ALT_E: /* edit */ break; case ALT_F: /* filter */ - VERBOSE(DEBUG, fprintf (stderr, "ALT F\n")); - filter = getwindow ("Set filter", windir[pane], 8, 32); - if (filter) { - filterlist (list[pane], filter); - free (filter); + string = getwindow ("Set filter", windir[pane], 8, 32); + if (string) { + filterlist (list[pane], string); + free (string); } break; case ALT_H: /* help */ @@ -316,9 +316,19 @@ int main (int argc, char *argv[]) case ALT_M: /* move */ break; case ALT_N: /* new dir */ + string = getwindow ("New directory", windir[pane], 8, 32); + if (string) { + if (mkdir (string, 0750) != 0) { + msgwindow ("Can't create directory", windir[pane], 0); + getch (); + } + freelist (list[pane]); + list[pane] = NULL; + free (string); + } break; case ALT_Q: /* quit */ - if (askwindow (" Restart (Y/N) ", max (windir[pane]->xoffset + (windir[pane]->xsize - 15) / 2, 1), windir[pane]->yoffset + (windir[pane]->ysize - 1) / 2, "Yy", "Nn") == 1) { + if (askwindow (" Restart (Y/N) ", windir[pane], "Yy", "Nn") == 1) { stop = 1; } break; @@ -362,8 +372,9 @@ int main (int argc, char *argv[]) /* test: { sleep 1; echo -n KKKKK; sleep 1; echo -n IIIII; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d /dev -d . */ /* test: { sleep 1; echo -n kkkkkkkkkkkkkkkkkkkkkkkk; sleep 1; echo -n iiiiiiiiiiiiiiiiiiiii; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d /dev -d . */ /* test: { sleep 1; echo -n kkkkkkkkk; sleep 1; echo -n ooo; sleep 1; echo -n uu; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 */ -/* test: { sleep 1; echo -en '\ef'; sleep 1; echo ' .*\.c'; sleep 1; echo -en 'kkk\esl'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */ +/* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n ' .*\.c'; sleep 1; echo; sleep 1; echo -en 'kkk\esl'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */ /* test: { sleep 1; echo -en '\ef'; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */ /* test: { sleep 1; echo -en '\ef'; sleep 1; echo -n 123456789012345678901234567890123; sleep 1; echo -en '\b\b'; sleep 1; echo -ne '\e'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */ - +/* test: { sleep 1; echo -en '\en'; sleep 1; echo -n foobar; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir foobar */ +/* test: { sleep 1; echo -en '\en'; sleep 1; echo -n foo/bar; sleep 1; echo; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */ /* vim: set ts=4 sw=4 et: */ -- 2.30.2