diff --git a/README.md b/README.md index 32ed6467..7683c76b 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ Stripped binary (or script) size and memory usage of `nnn` and some other simila 1M 50496 15328 4076 S 0.2 vifm 1M 72152 12468 7336 S 0.2 mc 70K 16068 4620 2408 S 0.1 ncdu - 60K 15748 4396 2516 S 0.1 nnn -S + 55K 15748 4396 2516 S 0.1 nnn -S Intrigued? Find out [HOW](https://github.com/jarun/nnn/wiki/performance-factors). diff --git a/src/nnn.c b/src/nnn.c index 5c692edc..7d387ff1 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1127,8 +1127,6 @@ static int nextsel(char **run, char **env, int *presel) for (i = 0; i < len; ++i) if (c == bindings[i].sym) { - *run = bindings[i].run; - *env = bindings[i].env; return bindings[i].act; } @@ -2974,10 +2972,14 @@ nochange: mkpath(path, dents[cur].name, newpath, PATH_MAX); - if (sel == SEL_MEDIA || sel == SEL_FMEDIA) - r = show_mediainfo(newpath, run); + if (sel == SEL_MEDIA) + r = show_mediainfo(newpath, NULL); + else if (sel == SEL_FMEDIA) + r = show_mediainfo(newpath, "-f"); + else if (sel == SEL_LIST) + r = handle_archive(newpath, "-l", path); else - r = handle_archive(newpath, run, path); + r = handle_archive(newpath, "-x", path); if (r == -1) { xstrlcpy(newpath, "missing ", PATH_MAX); diff --git a/src/nnn.h b/src/nnn.h index 58a3ab0f..c9a6d6fd 100644 --- a/src/nnn.h +++ b/src/nnn.h @@ -94,8 +94,6 @@ enum action { struct key { int sym; /* Key pressed */ enum action act; /* Action */ - char *run; /* Program to run or program option */ - char *env; /* Environment variable to run */ }; /* Extension pattern and mime combination */ @@ -110,133 +108,134 @@ static struct assoc assocs[] = { static struct key bindings[] = { /* Back */ - { KEY_BACKSPACE, SEL_BACK, "", "" }, - { '\b' /* BS */, SEL_BACK, "", "" }, - { 127 /* DEL */, SEL_BACK, "", "" }, - { KEY_LEFT, SEL_BACK, "", "" }, - { 'h', SEL_BACK, "", "" }, - { CONTROL('H'), SEL_BACK, "", "" }, - /* Inside */ - { KEY_ENTER, SEL_GOIN, "", "" }, - { '\r', SEL_GOIN, "", "" }, - { KEY_RIGHT, SEL_NAV_IN, "", "" }, - { 'l', SEL_NAV_IN, "", "" }, + { KEY_BACKSPACE, SEL_BACK }, + { '\b' /* BS */, SEL_BACK }, + { 127 /* DEL */, SEL_BACK }, + { KEY_LEFT, SEL_BACK }, + { 'h', SEL_BACK }, + { CONTROL('H'), SEL_BACK }, + /* Inside or select */ + { KEY_ENTER, SEL_GOIN }, + { '\r', SEL_GOIN }, + /* Pure navigate inside */ + { KEY_RIGHT, SEL_NAV_IN }, + { 'l', SEL_NAV_IN }, /* Next */ - { 'j', SEL_NEXT, "", "" }, - { KEY_DOWN, SEL_NEXT, "", "" }, - { CONTROL('N'), SEL_NEXT, "", "" }, + { 'j', SEL_NEXT }, + { KEY_DOWN, SEL_NEXT }, + { CONTROL('N'), SEL_NEXT }, /* Previous */ - { 'k', SEL_PREV, "", "" }, - { KEY_UP, SEL_PREV, "", "" }, - { CONTROL('P'), SEL_PREV, "", "" }, + { 'k', SEL_PREV }, + { KEY_UP, SEL_PREV }, + { CONTROL('P'), SEL_PREV }, /* Page down */ - { KEY_NPAGE, SEL_PGDN, "", "" }, - { CONTROL('D'), SEL_PGDN, "", "" }, + { KEY_NPAGE, SEL_PGDN }, + { CONTROL('D'), SEL_PGDN }, /* Page up */ - { KEY_PPAGE, SEL_PGUP, "", "" }, - { CONTROL('U'), SEL_PGUP, "", "" }, + { KEY_PPAGE, SEL_PGUP }, + { CONTROL('U'), SEL_PGUP }, /* First entry */ - { KEY_HOME, SEL_HOME, "", "" }, - { 'g', SEL_HOME, "", "" }, - { CONTROL('A'), SEL_HOME, "", "" }, - { '^', SEL_HOME, "", "" }, + { KEY_HOME, SEL_HOME }, + { 'g', SEL_HOME }, + { CONTROL('A'), SEL_HOME }, + { '^', SEL_HOME }, /* Last entry */ - { KEY_END, SEL_END, "", "" }, - { 'G', SEL_END, "", "" }, - { CONTROL('E'), SEL_END, "", "" }, - { '$', SEL_END, "", "" }, + { KEY_END, SEL_END }, + { 'G', SEL_END }, + { CONTROL('E'), SEL_END }, + { '$', SEL_END }, /* HOME */ - { '~', SEL_CDHOME, "", "" }, + { '~', SEL_CDHOME }, /* Initial directory */ - { '&', SEL_CDBEGIN, "", "" }, + { '&', SEL_CDBEGIN }, /* Last visited dir */ - { '-', SEL_CDLAST, "", "" }, + { '-', SEL_CDLAST }, /* Leader key */ - { CONTROL('_'), SEL_LEADER, "", "" }, - { '`', SEL_LEADER, "", "" }, + { CONTROL('_'), SEL_LEADER }, + { '`', SEL_LEADER }, /* Cycle contexts in forward direction */ - { '\t', SEL_CYCLE, "", "" }, - { CONTROL('T'), SEL_CYCLE, "", "" }, + { '\t', SEL_CYCLE }, + { CONTROL('T'), SEL_CYCLE }, /* Mark a path to visit later */ - { 'b', SEL_PIN, "", "" }, + { 'b', SEL_PIN }, /* Visit marked directory */ - { CONTROL('W'), SEL_VISIT, "", "" }, + { CONTROL('W'), SEL_VISIT }, /* Filter */ - { '/', SEL_FLTR, "", "" }, + { '/', SEL_FLTR }, /* Toggle filter mode */ - { KEY_IC, SEL_MFLTR, "", "" }, - { CONTROL('I'), SEL_MFLTR, "", "" }, + { KEY_IC, SEL_MFLTR }, + { CONTROL('I'), SEL_MFLTR }, /* Toggle hide .dot files */ - { '.', SEL_TOGGLEDOT, "", "" }, + { '.', SEL_TOGGLEDOT }, /* Detailed listing */ - { 'd', SEL_DETAIL, "", "" }, + { 'd', SEL_DETAIL }, /* File details */ - { 'D', SEL_STATS, "", "" }, + { 'D', SEL_STATS }, /* Show media info short, run is hacked */ - { 'm', SEL_MEDIA, NULL, "" }, + { 'm', SEL_MEDIA }, /* Show media info full, run is hacked */ - { 'M', SEL_FMEDIA, "-f", "" }, + { 'M', SEL_FMEDIA }, /* Launch a GUI application */ - { 'o', SEL_LAUNCH, "", "" }, + { 'o', SEL_LAUNCH }, /* Create archive */ - { 'f', SEL_ARCHIVE, "", "" }, + { 'f', SEL_ARCHIVE }, /* List archive */ - { 'F', SEL_LIST, "-l", "" }, + { 'F', SEL_LIST }, /* Extract archive */ - { CONTROL('F'), SEL_EXTRACT, "-x", "" }, + { CONTROL('F'), SEL_EXTRACT }, /* Toggle sort by size */ - { 's', SEL_FSIZE, "", "" }, + { 's', SEL_FSIZE }, /* Sort by apparent size including dir contents */ - { 'S', SEL_ASIZE, "", "" }, + { 'S', SEL_ASIZE }, /* Sort by total block count including dir contents */ - { CONTROL('J'), SEL_BSIZE, "", "" }, + { CONTROL('J'), SEL_BSIZE }, /* Toggle sort by time */ - { 't', SEL_MTIME, "", "" }, + { 't', SEL_MTIME }, /* Redraw window */ - { CONTROL('L'), SEL_REDRAW, "", "" }, - { KEY_F(5), SEL_REDRAW, "", "" }, /* Undocumented */ + { CONTROL('L'), SEL_REDRAW }, + { KEY_F(5), SEL_REDRAW }, /* Undocumented */ /* Copy currently selected file path */ - { CONTROL('K'), SEL_COPY, "", "" }, - { ' ', SEL_COPY, "", "" }, + { CONTROL('K'), SEL_COPY }, + { ' ', SEL_COPY }, /* Toggle copy multiple file paths */ - { CONTROL('Y'), SEL_COPYMUL, "", "" }, - { 'Y', SEL_COPYMUL, "", "" }, + { CONTROL('Y'), SEL_COPYMUL }, + { 'Y', SEL_COPYMUL }, /* Show list of copied files */ - { 'y', SEL_COPYLIST, "", "" }, + { 'y', SEL_COPYLIST }, /* Copy from copy buffer */ - { 'P', SEL_CP, "", "" }, + { 'P', SEL_CP }, /* Move from copy buffer */ - { 'V', SEL_MV, "", "" }, + { 'V', SEL_MV }, /* Delete from copy buffer */ - { 'X', SEL_RMMUL, "", "" }, + { 'X', SEL_RMMUL }, /* Delete currently selected */ - { CONTROL('X'), SEL_RM, "", "" }, + { CONTROL('X'), SEL_RM }, /* Open in a custom application */ - { CONTROL('O'), SEL_OPEN, "", "" }, + { CONTROL('O'), SEL_OPEN }, /* Create a new file */ - { 'n', SEL_NEW, "", "" }, + { 'n', SEL_NEW }, /* Show rename prompt */ - { CONTROL('R'), SEL_RENAME, "", "" }, - { KEY_F(2), SEL_RENAME, "", "" }, /* Undocumented */ + { CONTROL('R'), SEL_RENAME }, + { KEY_F(2), SEL_RENAME }, /* Undocumented */ /* Rename contents of current dir */ - { 'r', SEL_RENAMEALL, "", "" }, + { 'r', SEL_RENAMEALL }, /* Show help */ - { '?', SEL_HELP, "", "" }, + { '?', SEL_HELP }, /* Run command */ - { '!', SEL_RUN, "", "" }, - { CONTROL(']'), SEL_RUN, "", "" }, + { '!', SEL_RUN }, + { CONTROL(']'), SEL_RUN }, /* Run a custom script */ - { 'R', SEL_RUNSCRIPT, "", "" }, + { 'R', SEL_RUNSCRIPT }, /* Run command with argument */ - { 'e', SEL_RUNEDIT, "", "" }, - { 'p', SEL_RUNPAGE, "", "" }, + { 'e', SEL_RUNEDIT }, + { 'p', SEL_RUNPAGE }, /* Lock screen */ - { 'L', SEL_LOCK, "", "" }, + { 'L', SEL_LOCK }, /* Quit a context */ - { 'q', SEL_QUITCTX, "", "" }, + { 'q', SEL_QUITCTX }, /* Change dir on quit */ - { CONTROL('G'), SEL_QUITCD, "", "" }, + { CONTROL('G'), SEL_QUITCD }, /* Quit */ - { 'Q', SEL_QUIT, "", "" }, - { CONTROL('Q'), SEL_QUIT, "", "" }, + { 'Q', SEL_QUIT }, + { CONTROL('Q'), SEL_QUIT }, };