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_PLUGIN_KEYS 35
#define MSG_BOOKMARK_KEYS 36 #define MSG_BOOKMARK_KEYS 36
#define MSG_INVALID_REG 37 #define MSG_INVALID_REG 37
#define MSG_ORDER 38
static const char * const messages[] = { static const char * const messages[] = {
"no traversal", "no traversal",
@ -513,6 +514,7 @@ static const char * const messages[] = {
"plugin keys:", "plugin keys:",
"bookmark keys:", "bookmark keys:",
"invalid regex", "invalid regex",
"toggle 'a'u / 'd'u / 'e'xtn / 'r'everse / 's'ize / 't'ime / 'v'ersion?",
}; };
/* Supported configuration environment variables */ /* 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" "cV Move sel here%-10c^V Copy/move sel as\n"
"cX Delete sel%-13c^X Delete entry\n" "cX Delete sel%-13c^X Delete entry\n"
"cy List sel%-15c^Y Edit sel\n" "cy List sel%-15c^Y Edit sel\n"
"1ORDER TOGGLES\n" "9o ^T Order toggele%-0c\n"
"cS Disk usage%-14cA Apparent du\n"
"cz Size%-20ct Time\n"
"cv Version%-17cE Extension\n"
"9R ^T Reverse (tac)%-0c\n"
"1MISC\n" "1MISC\n"
"9! ^] Shell%-16c; ^F Fire plugin\n" "9! ^] Shell%-16c; ^F Fire plugin\n"
"c] Cmd prompt%-13c^P Pick plugin\n" "c] Cmd prompt%-13c^P Pick plugin\n"
@ -4231,7 +4229,7 @@ static void statusbar(char *path)
if (cfg.mtimeorder) if (cfg.mtimeorder)
sort[0] = cfg.mtime ? 'T' : 'A'; sort[0] = cfg.mtime ? 'T' : 'A';
else if (cfg.sizeorder) else if (cfg.sizeorder)
sort[0] = 'Z'; sort[0] = 'S';
else if (cfg.extnorder) else if (cfg.extnorder)
sort[0] = 'E'; sort[0] = 'E';
@ -4945,16 +4943,7 @@ nochange:
case SEL_MFLTR: // fallthrough case SEL_MFLTR: // fallthrough
case SEL_TOGGLEDOT: // fallthrough case SEL_TOGGLEDOT: // fallthrough
case SEL_DETAIL: // fallthrough case SEL_DETAIL: // fallthrough
case SEL_FSIZE: // fallthrough case SEL_ORDER:
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;
switch (sel) { switch (sel) {
case SEL_MFLTR: case SEL_MFLTR:
cfg.filtermode ^= 1; cfg.filtermode ^= 1;
@ -4980,60 +4969,75 @@ nochange:
cfg.showdetail ? (printptr = &printent_long) : (printptr = &printent); cfg.showdetail ? (printptr = &printent_long) : (printptr = &printent);
cfg.blkorder = 0; cfg.blkorder = 0;
continue; continue;
case SEL_FSIZE: case SEL_ORDER:
cfg.sizeorder ^= 1; r = get_input(messages[MSG_ORDER]);
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;
}
if (cfg.blkorder) { if ((r == 'a' || r == 'd' || r == 'e'
cfg.showdetail = 1; || r == 'r' || r == 's' || r == 't')
printptr = &printent_long; && (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; default:
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;
break; break;
} }

View file

@ -67,6 +67,7 @@ enum action {
SEL_STATS, SEL_STATS,
SEL_CHMODX, SEL_CHMODX,
SEL_ARCHIVE, SEL_ARCHIVE,
SEL_ORDER,
SEL_FSIZE, /* file size */ SEL_FSIZE, /* file size */
SEL_ASIZE, /* apparent size */ SEL_ASIZE, /* apparent size */
SEL_BSIZE, /* block size */ SEL_BSIZE, /* block size */
@ -183,21 +184,9 @@ static struct key bindings[] = {
{ '*', SEL_CHMODX }, { '*', SEL_CHMODX },
/* Create archive */ /* Create archive */
{ 'i', SEL_ARCHIVE }, { 'i', SEL_ARCHIVE },
/* Toggle sort by size */ /* Order toggle */
{ 'z', SEL_FSIZE }, { 'o', SEL_ORDER },
/* Sort by apparent size including dir contents */ { CONTROL('T'), SEL_ORDER },
{ '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 },
/* Redraw window */ /* Redraw window */
{ CONTROL('L'), SEL_REDRAW }, { CONTROL('L'), SEL_REDRAW },
{ KEY_F(5), SEL_REDRAW }, { KEY_F(5), SEL_REDRAW },