瀏覽代碼

Refactor status bar printing

master
Arun Prakash Jana 5 年之前
父節點
當前提交
94781f7977
沒有發現已知的金鑰在資料庫的簽署中 GPG Key ID: A75979F35C080412
共有 1 個文件被更改,包括 82 次插入74 次删除
  1. +82
    -74
      src/nnn.c

+ 82
- 74
src/nnn.c 查看文件

@@ -4201,17 +4201,88 @@ static int handle_context_switch(enum action sel, char *newpath)
return r;
}

static void statusbar(char *path)
{
int i = 0, extnlen = 0;
char *ptr;
char sort[] = "\0\0\0\0";
char buf[24];
pEntry pent = &dents[cur];

if (!ndents) {
printmsg("0/0");
return;
}

if (cfg.mtimeorder)
sort[0] = cfg.mtime ? 'T' : 'A';
else if (cfg.sizeorder)
sort[0] = 'Z';
else if (cfg.extnorder)
sort[0] = 'E';

if (sort[i])
++i;

if (entrycmpfn == &reventrycmp) {
sort[i] = 'R';
++i;
}

if (namecmpfn == &xstrverscasecmp) {
sort[i] = 'V';
++i;
}

if (i)
sort[i] = ' ';

/* Get the file extension for regular files */
if (S_ISREG(pent->mode)) {
i = (int)(pent->nlen - 1);
ptr = xmemrchr((uchar *)pent->name, '.', i);
if (ptr) {
extnlen = ptr - pent->name;
extnlen = i - extnlen;
}
if (!ptr || extnlen > 5 || extnlen < 2)
ptr = "\b";
} else
ptr = "\b";

if (cfg.blkorder) { /* du mode */
xstrlcpy(buf, coolsize(dir_blocks << blk_shift), 12);

mvprintw(xlines - 1, 0, "%d/%d [%d:%s] %cu:%s free:%s files:%lu %lldB %s",
cur + 1, ndents, cfg.selmode,
((g_states & STATE_RANGESEL) ? "*" : (nselected ? xitoa(nselected) : "")),
(cfg.apparentsz ? 'a' : 'd'), buf, coolsize(get_fs_info(path, FREE)),
num_files, (ll)pent->blocks << blk_shift, ptr);
} else { /* light or detail mode */
/* Show filename as it may be truncated in directory listing */
/* Get the unescaped file name */
char *fname = unescape(pent->name, NAME_MAX, NULL);

/* Timestamp */
strftime(buf, sizeof(buf), "%F %R", localtime(&pent->t));
buf[sizeof(buf)-1] = '\0';

mvprintw(xlines - 1, 0, "%d/%d [%d:%s] %s%s %s %s %s [%s]",
cur + 1, ndents, cfg.selmode,
((g_states & STATE_RANGESEL) ? "*" : (nselected ? xitoa(nselected) : "")),
sort, buf, get_lsperms(pent->mode), coolsize(pent->size), ptr, fname);
}
}

static void redraw(char *path)
{
xlines = LINES;
xcols = COLS;

int ncols = (xcols <= PATH_MAX) ? xcols : PATH_MAX;
int lastln = xlines - 1, onscreen = xlines - 4;
int i, attrs;
char buf[24];
char c;
char *ptr = path, *base;
int onscreen = xlines - 4;
int i;
char *ptr = path;

/* Clear screen */
erase();
@@ -4233,9 +4304,9 @@ static void redraw(char *path)
if (!g_ctx[i].c_cfg.ctxactive) {
addch(i + '1');
} else {
attrs = (cfg.curctx != i)
? (COLOR_PAIR(i + 1) | A_BOLD | A_UNDERLINE) /* Underline active */
: (COLOR_PAIR(i + 1) | A_BOLD | A_REVERSE); /* Current in reverse */
int attrs = (cfg.curctx != i)
? (COLOR_PAIR(i + 1) | A_BOLD | A_UNDERLINE) /* Active */
: (COLOR_PAIR(i + 1) | A_BOLD | A_REVERSE); /* Current */
attron(attrs);
addch(i + '1');
attroff(attrs);
@@ -4251,7 +4322,8 @@ static void redraw(char *path)
if ((i + MIN_DISPLAY_COLS) <= ncols)
addnstr(path, ncols - MIN_DISPLAY_COLS);
else {
base = xbasename(path);
char *base = xbasename(path);

if ((base - ptr) <= 1)
addnstr(path, ncols - MIN_DISPLAY_COLS);
else {
@@ -4305,71 +4377,7 @@ static void redraw(char *path)
cfg.dircolor = 0;
}

if (ndents) {
char sort[] = "\0\0\0\0";
pEntry pent = &dents[cur];

i = 0;

if (cfg.mtimeorder)
sort[0] = cfg.mtime ? 'T' : 'A';
else if (cfg.sizeorder)
sort[0] = 'Z';
else if (cfg.extnorder)
sort[0] = 'E';

if (sort[i])
++i;

if (entrycmpfn == &reventrycmp) {
sort[i] = 'R';
++i;
}

if (namecmpfn == &xstrverscasecmp) {
sort[i] = 'V';
++i;
}

if (i)
sort[i] = ' ';

/* Get the file extension for regular files */
if (S_ISREG(pent->mode)) {
i = (int)(pent->nlen - 1);
ptr = xmemrchr((uchar *)pent->name, '.', i);
if (ptr)
attrs = ptr - pent->name; /* attrs used as tmp var */
if (!ptr || (i - attrs) > 5 || (i - attrs) < 2)
ptr = "\b";
} else
ptr = "\b";

if (cfg.blkorder) { /* du mode */
xstrlcpy(buf, coolsize(dir_blocks << blk_shift), 12);
c = cfg.apparentsz ? 'a' : 'd';

mvprintw(lastln, 0, "%d/%d [%d:%s] %cu:%s free:%s files:%lu %lldB %s",
cur + 1, ndents, cfg.selmode,
((g_states & STATE_RANGESEL) ? "*" : (nselected ? xitoa(nselected) : "")),
c, buf, coolsize(get_fs_info(path, FREE)), num_files,
(ll)pent->blocks << blk_shift, ptr);
} else { /* light or detail mode */
/* Show filename as it may be truncated in directory listing */
/* Get the unescaped file name */
base = unescape(pent->name, NAME_MAX, NULL);

/* Timestamp */
strftime(buf, sizeof(buf), "%F %R", localtime(&pent->t));
buf[sizeof(buf)-1] = '\0';

mvprintw(lastln, 0, "%d/%d [%d:%s] %s%s %s %s %s [%s]",
cur + 1, ndents, cfg.selmode,
((g_states & STATE_RANGESEL) ? "*" : (nselected ? xitoa(nselected) : "")),
sort, buf, get_lsperms(pent->mode), coolsize(pent->size), ptr, base);
}
} else
printmsg("0/0");
statusbar(path);
}

static void browse(char *ipath, const char *session)


||||||
x
 
000:0
Loading…
取消
儲存