Order toggle re-factor

This commit is contained in:
Arun Prakash Jana 2020-01-13 03:49:28 +05:30
parent 3416287553
commit 5fb4d637ee
No known key found for this signature in database
GPG key ID: A75979F35C080412
2 changed files with 76 additions and 83 deletions

140
src/nnn.c
View file

@ -473,6 +473,7 @@ static char * const utils[] = {
#define MSG_PLUGIN_KEYS 35
#define MSG_BOOKMARK_KEYS 36
#define MSG_INVALID_REG 37
#define MSG_ORDER 38
static const char * const messages[] = {
"no traversal",
@ -513,6 +514,7 @@ static const char * const messages[] = {
"plugin keys:",
"bookmark keys:",
"invalid regex",
"toggle 'a'u / 'd'u / 'e'xtn / 'r'everse / 's'ize / 't'ime / 'v'ersion?",
};
/* Supported configuration environment variables */
@ -3608,11 +3610,7 @@ static void show_help(const char *path)
"cV Move sel here%-10c^V Copy/move sel as\n"
"cX Delete sel%-13c^X Delete entry\n"
"cy List sel%-15c^Y Edit sel\n"
"1ORDER TOGGLES\n"
"cS Disk usage%-14cA Apparent du\n"
"cz Size%-20ct Time\n"
"cv Version%-17cE Extension\n"
"9R ^T Reverse (tac)%-0c\n"
"9o ^T Order toggele%-0c\n"
"1MISC\n"
"9! ^] Shell%-16c; ^F Fire plugin\n"
"c] Cmd prompt%-13c^P Pick plugin\n"
@ -4231,7 +4229,7 @@ static void statusbar(char *path)
if (cfg.mtimeorder)
sort[0] = cfg.mtime ? 'T' : 'A';
else if (cfg.sizeorder)
sort[0] = 'Z';
sort[0] = 'S';
else if (cfg.extnorder)
sort[0] = 'E';
@ -4945,16 +4943,7 @@ nochange:
case SEL_MFLTR: // fallthrough
case SEL_TOGGLEDOT: // fallthrough
case SEL_DETAIL: // fallthrough
case SEL_FSIZE: // fallthrough
case SEL_ASIZE: // fallthrough
case SEL_BSIZE: // fallthrough
case SEL_EXTN: // fallthrough
case SEL_MTIME: // fallthrough
case SEL_REVERSE: // fallthrough
case SEL_VERSION:
if (sel >= SEL_FSIZE && sel < SEL_REVERSE && entrycmpfn == &reventrycmp)
entrycmpfn = &entrycmp;
case SEL_ORDER:
switch (sel) {
case SEL_MFLTR:
cfg.filtermode ^= 1;
@ -4980,60 +4969,75 @@ nochange:
cfg.showdetail ? (printptr = &printent_long) : (printptr = &printent);
cfg.blkorder = 0;
continue;
case SEL_FSIZE:
cfg.sizeorder ^= 1;
cfg.mtimeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
break;
case SEL_ASIZE:
cfg.apparentsz ^= 1;
if (cfg.apparentsz) {
nftw_fn = &sum_sizes;
cfg.blkorder = 1;
blk_shift = 0;
} else
cfg.blkorder = 0;
// fallthrough
case SEL_BSIZE:
if (sel == SEL_BSIZE) {
if (!cfg.apparentsz)
cfg.blkorder ^= 1;
nftw_fn = &sum_bsizes;
cfg.apparentsz = 0;
blk_shift = ffs(S_BLKSIZE) - 1;
}
case SEL_ORDER:
r = get_input(messages[MSG_ORDER]);
if (cfg.blkorder) {
cfg.showdetail = 1;
printptr = &printent_long;
if ((r == 'a' || r == 'd' || r == 'e'
|| r == 'r' || r == 's' || r == 't')
&& (entrycmpfn == &reventrycmp))
entrycmpfn = &entrycmp;
switch (r) {
case 'a': /* Apparent du */
cfg.apparentsz ^= 1;
if (cfg.apparentsz) {
nftw_fn = &sum_sizes;
cfg.blkorder = 1;
blk_shift = 0;
} else
cfg.blkorder = 0;
// fallthrough
case 'd': /* Disk usage */
if (sel == SEL_BSIZE) {
if (!cfg.apparentsz)
cfg.blkorder ^= 1;
nftw_fn = &sum_bsizes;
cfg.apparentsz = 0;
blk_shift = ffs(S_BLKSIZE) - 1;
}
if (cfg.blkorder) {
cfg.showdetail = 1;
printptr = &printent_long;
}
cfg.mtimeorder = 0;
cfg.sizeorder = 0;
cfg.extnorder = 0;
clearfilter(); /* Reload directory */
endselection(); /* We are going to reload dir */
break;
case 'e': /* File extension */
cfg.extnorder ^= 1;
cfg.sizeorder = 0;
cfg.mtimeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
break;
case 'r': /* Reverse sort */
entrycmpfn = (entrycmpfn == &entrycmp) ? &reventrycmp : &entrycmp;
break;
case 's': /* File size */
cfg.sizeorder ^= 1;
cfg.mtimeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
break;
case 't': /* Modification or access time */
cfg.mtimeorder ^= 1;
cfg.sizeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
break;
case 'v': /* Version */
namecmpfn = (namecmpfn == &xstrverscasecmp) ? &xstricmp : &xstrverscasecmp;
break;
default:
cfg.filtermode ? presel = FILTER : statusbar(path);
goto nochange;
}
cfg.mtimeorder = 0;
cfg.sizeorder = 0;
cfg.extnorder = 0;
clearfilter(); /* Reload directory */
endselection(); /* We are going to reload dir */
break;
case SEL_EXTN:
cfg.extnorder ^= 1;
cfg.sizeorder = 0;
cfg.mtimeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
break;
case SEL_MTIME:
cfg.mtimeorder ^= 1;
cfg.sizeorder = 0;
cfg.apparentsz = 0;
cfg.blkorder = 0;
cfg.extnorder = 0;
break;
case SEL_REVERSE:
entrycmpfn = (entrycmpfn == &entrycmp) ? &reventrycmp : &entrycmp;
break;
default: /* SEL_VERSION */
namecmpfn = (namecmpfn == &xstrverscasecmp) ? &xstricmp : &xstrverscasecmp;
default:
break;
}

View file

@ -67,6 +67,7 @@ enum action {
SEL_STATS,
SEL_CHMODX,
SEL_ARCHIVE,
SEL_ORDER,
SEL_FSIZE, /* file size */
SEL_ASIZE, /* apparent size */
SEL_BSIZE, /* block size */
@ -183,21 +184,9 @@ static struct key bindings[] = {
{ '*', SEL_CHMODX },
/* Create archive */
{ 'i', SEL_ARCHIVE },
/* Toggle sort by size */
{ 'z', SEL_FSIZE },
/* Sort by apparent size including dir contents */
{ 'A', SEL_ASIZE },
/* Sort by total block count including dir contents */
{ 'S', SEL_BSIZE },
/* Sort by file extension */
{ 'E', SEL_EXTN },
/* Toggle sort by time */
{ 't', SEL_MTIME },
/* Toggle reverse sort */
{ 'R', SEL_REVERSE },
{ CONTROL('T'), SEL_REVERSE },
/* Toggle version sort */
{ 'v', SEL_VERSION },
/* Order toggle */
{ 'o', SEL_ORDER },
{ CONTROL('T'), SEL_ORDER },
/* Redraw window */
{ CONTROL('L'), SEL_REDRAW },
{ KEY_F(5), SEL_REDRAW },