Quellcode durchsuchen

Smooth screen resize handling

master
Arun Prakash Jana vor 5 Jahren
Ursprung
Commit
013ab595b2
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden GPG-Schlüssel-ID: A75979F35C080412
1 geänderte Dateien mit 27 neuen und 16 gelöschten Zeilen
  1. +27
    -16
      src/nnn.c

+ 27
- 16
src/nnn.c Datei anzeigen

@@ -325,6 +325,7 @@ static context g_ctx[CTX_MAX] __attribute__ ((aligned));
static struct entry *dents;
static char *pnamebuf, *pcopybuf;
static int ndents, cur, total_dents = ENTRY_INCR;
static int xlines, xcols;
static uint idle;
static uint idletimeout, copybufpos, copybuflen;
static char *opener;
@@ -584,7 +585,7 @@ static char *xitoa(uint val)
/* Messages show up at the bottom */
static void printmsg(const char *msg)
{
mvprintw(LINES - 1, 0, "%s\n", msg);
mvprintw(xlines - 1, 0, "%s\n", msg);
}

/* Kill curses and display error before exiting */
@@ -1445,7 +1446,7 @@ static int setfilter(regex_t *regex, const char *filter)
int r = regcomp(regex, filter, REG_NOSUB | REG_EXTENDED | REG_ICASE);

if (r != 0 && filter && filter[0] != '\0')
mvprintw(LINES - 1, 0, "regex error: %d\n", r);
mvprintw(xlines - 1, 0, "regex error: %d\n", r);

return r;
}
@@ -2557,7 +2558,7 @@ static int dentfill(char *path, struct entry **dents)
ent_blocks = 0;
mkpath(path, namep, g_buf);

mvprintw(LINES - 1, 0, "scanning %s [^C aborts]\n",
mvprintw(xlines - 1, 0, "scanning %s [^C aborts]\n",
xbasename(g_buf));
refresh();
if (nftw(g_buf, nftw_fn, open_max,
@@ -2642,7 +2643,8 @@ static int dentfill(char *path, struct entry **dents)
num_saved = num_files + 1;
mkpath(path, namep, g_buf);

mvprintw(LINES - 1, 0, "scanning %s [^C aborts]\n", xbasename(g_buf));
mvprintw(xlines - 1, 0, "scanning %s [^C aborts]\n",
xbasename(g_buf));
refresh();
if (nftw(g_buf, nftw_fn, open_max, FTW_MOUNT | FTW_PHYS) == -1) {
printmsg(messages[STR_NFTWFAIL_ID]);
@@ -2732,8 +2734,11 @@ static void populate(char *path, char *lastname)

static void redraw(char *path)
{
size_t ncols = (COLS <= PATH_MAX) ? COLS : PATH_MAX;
int lastln = LINES;
xlines = LINES;
xcols = COLS;

int ncols = (xcols <= PATH_MAX) ? xcols : PATH_MAX;
int lastln = xlines;
int nlines = MIN(lastln - 4, ndents), i, attrs;
char buf[12];
char c;
@@ -3089,11 +3094,11 @@ nochange:
break;
case SEL_PGDN:
if (cur < ndents - 1)
cur += MIN((LINES - 4) / 2, ndents - 1 - cur);
cur += MIN((xlines - 4) / 2, ndents - 1 - cur);
break;
case SEL_PGUP:
if (cur > 0)
cur -= MIN((LINES - 4) / 2, cur);
cur -= MIN((xlines - 4) / 2, cur);
break;
case SEL_HOME:
cur = 0;
@@ -3536,7 +3541,7 @@ nochange:
dents[r].flags |= FILE_COPIED;
}

mvprintw(LINES - 1, 0, "%d files selected\n",
mvprintw(xlines - 1, 0, "%d files selected\n",
copyendid - copystartid + 1);
}

@@ -3546,7 +3551,7 @@ nochange:
spawn(copier, NULL, NULL, NULL, F_NOTRACE);

if (ncp) /* Some files cherry picked */
mvprintw(LINES - 1, 0, "%d files selected\n", ncp);
mvprintw(xlines - 1, 0, "%d files selected\n", ncp);
} else
printmsg("selection off");
goto nochange;
@@ -3935,13 +3940,19 @@ nochange:

dentfree(dents);
return;
} /* switch (sel) */
default:
if (xlines != LINES || xcols != COLS)
goto begin;

/* Locker */
if (idletimeout != 0 && idle == idletimeout) {
idle = 0;
spawn(utils[LOCKER], NULL, NULL, NULL, F_NORMAL | F_SIGINT);
}
/* Locker */
if (idletimeout != 0 && idle == idletimeout) {
idle = 0;
spawn(utils[LOCKER], NULL, NULL, NULL, F_NORMAL | F_SIGINT);
goto begin;
}

goto nochange;
} /* switch (sel) */
}
}



Laden…
Abbrechen
Speichern