From 4ab8bdd88c15303edf8211319d539a69d5c6a19c Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Mon, 6 Jan 2025 21:31:34 +0100 Subject: [PATCH] add options to setup screen --- fm.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/fm.c b/fm.c index fdbf63d..9e213d2 100644 --- a/fm.c +++ b/fm.c @@ -24,9 +24,11 @@ char *progname = NULL; char *version = "0.1"; char *dirname[MAXPANES] = {0}; +int height = 0; int pane = 0; int xoffset = 1; int yoffset = 2; +int width = 0; char *help = "ret Enter directory\n" @@ -49,6 +51,8 @@ int usage (int ret) fprintf (fd, "usage: %s [-d dir] [-h] [-w]\n", progname); fprintf (fd, " -d: dir name (%s)\n", (dirname[0]) ? dirname[0] : "."); fprintf (fd, " -h: help message\n"); + fprintf (fd, " -x: screen height (%d)\n", (height) ? height : LINES); + fprintf (fd, " -x: screen width (%d)\n", (width) ? width : COLS); fprintf (fd, "%s version %s\n", progname, version); return ret; @@ -97,6 +101,22 @@ int main (int argc, char *argv[]) } verbose = atoi (arg); break; + case 'x': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + VERBOSE (ERROR, fprintf (stderr, "%s: no width specified\n", progname)); + return usage (1); + } + width = atoi (arg); + break; + case 'y': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + VERBOSE (ERROR, fprintf (stderr, "%s: no height specified\n", progname)); + return usage (1); + } + height = atoi (arg); + break; case 'h': default: return usage (c != 'h'); @@ -117,23 +137,31 @@ int main (int argc, char *argv[]) curs_set (0); start_color (); + /* check screen size */ + if ((height == 0) || (height > LINES)) { + height = LINES; + } + if ((width == 0) || (width > COLS)) { + width = COLS; + } + /* init pane windows */ window_t *windir[MAXPANES] = {0}; for (i = 0; i < MAXPANES; i++) { windir[i] = allocwindow (); windir[i]->active = (pane == i); - windir[i]->xoffset = xoffset + COLS / 2 * i; - windir[i]->xsize = COLS / 2 - 2 * xoffset; + windir[i]->xoffset = xoffset + width / 2 * i; + windir[i]->xsize = width / 2 - 2 * xoffset; windir[i]->yoffset = yoffset; - windir[i]->ysize = LINES - 2 * yoffset; + windir[i]->ysize = height - 2 * yoffset; } /* init status windows */ window_t *winelem[MAXPANES] = {0}; for (i = 0; i < MAXPANES; i++) { winelem[i] = allocwindow (); - winelem[i]->xoffset = xoffset + COLS / 2 * i; - winelem[i]->xsize = COLS / 2 - 2 * xoffset; + winelem[i]->xoffset = xoffset + width / 2 * i; + winelem[i]->xsize = width / 2 - 2 * xoffset; winelem[i]->yoffset = windir[i]->yoffset + windir[i]->ysize + 1; winelem[i]->ysize = 1; } @@ -214,7 +242,7 @@ int main (int argc, char *argv[]) } break; case 'h': - helpwindow (help, (COLS - strmaxlen (help, '\n')) / 2, 3 * yoffset); + helpwindow (help, (width - strmaxlen (help, '\n')) / 2, 3 * yoffset); while (getch () == ERR) { usleep (200 * 1000); } @@ -277,11 +305,14 @@ int main (int argc, char *argv[]) /* test: fm.exe -d not_directory 2>&1 | grep "can't read directory" */ /* test: fm.exe -h | grep usage */ /* test: fm.exe -v 2>&1 | grep missing */ +/* test: fm.exe -x 2>&1 | grep width */ +/* test: fm.exe -y 2>&1 | grep height */ /* test: fm.exe _ 2>&1 | grep invalid */ /* test: { sleep 1; echo -n q; sleep 1; echo -n y; } | fm.exe -d . -d /dev -d .. -v 1 */ /* test: { sleep 1; echo h; sleep 1; echo -n q; sleep 1; echo -n y; } | fm.exe -d . -d /dev -d .. */ /* test: { sleep 1; echo ; sleep 1; echo; sleep 1; echo -en '\tjikkkkklljllll'; sleep 1; echo -n ilk; sleep 1; echo -n q; sleep 1; echo -n y; } | fm.exe */ /* test: { sleep 1; echo -n KKKKK; sleep 1; echo -n IIIII; sleep 1; echo -n q; sleep 1; echo -n y; } | fm.exe -d /dev -d . */ /* test: { sleep 1; echo -n kkkkkkkkkkkkkkkkkkkkkkkk; sleep 1; echo -n iiiiiiiiiiiiiiiiiiiii; sleep 1; echo -n q; 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 -n q; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 */ /* vim: set ts=4 sw=4 et: */ -- 2.30.2