@@ -79,7 +79,7 @@ Have fun with it! PRs are welcome. Check out [#1](https://github.com/jarun/nnn/i | |||
- Information | |||
- Basic and detail view | |||
- Detailed file information | |||
- Media information (needs mediainfo) | |||
- Media information (needs mediainfo or exiftool, if specified) | |||
- Ordering | |||
- Numeric order (1, 2, ... 10, 11, ...) for numeric names | |||
- Sort by modification time, size | |||
@@ -140,8 +140,9 @@ Have fun with it! PRs are welcome. Check out [#1](https://github.com/jarun/nnn/i | |||
PATH directory to open [default: current dir] | |||
optional arguments: | |||
-l start in light mode (fewer details) | |||
-e use exiftool instead of mediainfo | |||
-i start in navigate-as-you-type mode | |||
-l start in light mode (fewer details) | |||
-n disable color for directory entries | |||
-p path to custom nlay | |||
-S start in disk usage analyzer mode | |||
@@ -174,8 +175,8 @@ Right, Enter, l, ^M | Open file or enter dir | |||
c | Show change dir prompt | |||
d | Toggle detail view | |||
D | Toggle current file details screen | |||
m | Show concise mediainfo | |||
M | Show full mediainfo | |||
m | Show concise media info | |||
M | Show full media info | |||
s | Toggle sort by file size | |||
S | Toggle disk usage analyzer mode | |||
t | Toggle sort by modified time | |||
@@ -228,7 +229,7 @@ The following abbreviations are used in the detail view: | |||
export NNN_DE_FILE_MANAGER=thunar | |||
export NNN_DE_FILE_MANAGER=nautilus | |||
- [mediainfo](https://mediaarea.net/en/MediaInfo) is required to view media information | |||
- [mediainfo](https://mediaarea.net/en/MediaInfo) (or exiftool, if specified) is required to view media information | |||
#### Help | |||
@@ -120,16 +120,16 @@ static struct key bindings[] = { | |||
{ 'd', SEL_DETAIL, "", "" }, | |||
/* File details */ | |||
{ 'D', SEL_STATS, "", "" }, | |||
/* Show mediainfo short */ | |||
{ 'm', SEL_MEDIA, "", "" }, | |||
/* Show mediainfo full */ | |||
{ 'M', SEL_FMEDIA, "", "" }, | |||
/* Show media info short, run is hacked */ | |||
{ 'm', SEL_MEDIA, NULL, "" }, | |||
/* Show media info full, run is hacked */ | |||
{ 'M', SEL_FMEDIA, "-f", "" }, | |||
/* Open dir in desktop file manager */ | |||
{ 'o', SEL_DFB, "", "" }, | |||
/* Toggle sort by size */ | |||
{ 's', SEL_FSIZE, "", "" }, | |||
/* Sort by total block count including dir contents */ | |||
{ 'S', SEL_BSIZE, "", "" }, | |||
{ 'S', SEL_BSIZE, "", "" }, | |||
/* Toggle sort by time */ | |||
{ 't', SEL_MTIME, "", "" }, | |||
{ CONTROL('L'), SEL_REDRAW, "", "" }, | |||
@@ -66,9 +66,9 @@ Toggle detail view | |||
.It Ic D | |||
Toggle current file details screen | |||
.It Ic m | |||
Show concise mediainfo | |||
Show concise media info | |||
.It Ic M | |||
Show full mediainfo | |||
Show full media info | |||
.It Ic s | |||
Toggle sort by file size | |||
.It Ic S | |||
@@ -101,12 +101,15 @@ directory you came out of. | |||
.Nm | |||
supports the following options: | |||
.Pp | |||
.Fl l | |||
start in light mode (fewer details) | |||
.Fl e | |||
use exiftool instead of mediainfo | |||
.Pp | |||
.Fl i | |||
start in navigate-as-you-type mode | |||
.Pp | |||
.Fl l | |||
start in light mode (fewer details) | |||
.Pp | |||
.Fl n | |||
disable color for directory entries | |||
.Pp | |||
@@ -180,15 +180,19 @@ static const double div_2_pow_10 = 1.0 / 1024.0; | |||
static uint _WSHIFT; | |||
/* Utilities to open files, run actions */ | |||
static char *utils[] = { | |||
static char * const utils[] = { | |||
#ifdef __APPLE__ | |||
"/usr/bin/open", | |||
#else | |||
"/usr/bin/xdg-open", | |||
#endif | |||
"nlay" | |||
"nlay", | |||
"mediainfo", | |||
"exiftool" | |||
}; | |||
static char *metaviewer; | |||
/* For use in functions which are isolated and don't return the buffer */ | |||
static char g_buf[MAX_CMD_LEN]; | |||
@@ -1440,11 +1444,11 @@ show_stats(char *fpath, char *fname, struct stat *sb) | |||
static int | |||
show_mediainfo(char *fpath, char *arg) | |||
{ | |||
if (!get_output(g_buf, MAX_CMD_LEN, "which", "mediainfo", NULL, 0)) | |||
if (!get_output(g_buf, MAX_CMD_LEN, "which", metaviewer, NULL, 0)) | |||
return -1; | |||
exitcurses(); | |||
get_output(NULL, 0, "mediainfo", fpath, arg, 1); | |||
get_output(NULL, 0, metaviewer, fpath, arg, 1); | |||
initcurses(); | |||
return 0; | |||
} | |||
@@ -1475,8 +1479,8 @@ show_help(void) | |||
c | Show change dir prompt\n\ | |||
d | Toggle detail view\n\ | |||
D | Toggle current file details screen\n\ | |||
m | Show concise mediainfo\n\ | |||
M | Show full mediainfo\n\ | |||
m | Show concise media info\n\ | |||
M | Show full media info\n\ | |||
s | Toggle sort by file size\n\ | |||
S | Toggle disk usage analyzer mode\n\ | |||
t | Toggle sort by modified time\n\ | |||
@@ -2360,23 +2364,14 @@ nochange: | |||
break; | |||
} | |||
case SEL_MEDIA: | |||
if (ndents > 0) { | |||
mkpath(path, dents[cur].name, oldpath, | |||
PATH_MAX); | |||
if (show_mediainfo(oldpath, NULL) == -1) { | |||
printmsg("mediainfo missing"); | |||
goto nochange; | |||
} | |||
} | |||
break; | |||
case SEL_FMEDIA: | |||
if (ndents > 0) { | |||
mkpath(path, dents[cur].name, oldpath, | |||
PATH_MAX); | |||
if (show_mediainfo(oldpath, "-f") == -1) { | |||
printmsg("mediainfo missing"); | |||
if (show_mediainfo(oldpath, run) == -1) { | |||
sprintf(g_buf, "%s missing", metaviewer); | |||
printmsg(g_buf); | |||
goto nochange; | |||
} | |||
} | |||
@@ -2470,8 +2465,9 @@ The missing terminal file browser for X.\n\n\ | |||
positional arguments:\n\ | |||
PATH directory to open [default: current dir]\n\n\ | |||
optional arguments:\n\ | |||
-l start in light mode (fewer details)\n\ | |||
-e use exiftool instead of mediainfo\n\ | |||
-i start in navigate-as-you-type mode\n\ | |||
-l start in light mode (fewer details)\n\ | |||
-n disable color for directory entries\n\ | |||
-p path to custom nlay\n\ | |||
-S start in disk usage analyzer mode\n\ | |||
@@ -2497,7 +2493,7 @@ main(int argc, char *argv[]) | |||
exit(1); | |||
} | |||
while ((opt = getopt(argc, argv, "lSinp:vh")) != -1) { | |||
while ((opt = getopt(argc, argv, "lSinep:vh")) != -1) { | |||
switch (opt) { | |||
case 'S': | |||
cfg.blkorder = 1; | |||
@@ -2512,6 +2508,9 @@ main(int argc, char *argv[]) | |||
case 'n': | |||
cfg.showcolor = 0; | |||
break; | |||
case 'e': | |||
metaviewer = utils[3]; | |||
break; | |||
case 'p': | |||
player = optarg; | |||
break; | |||
@@ -2560,6 +2559,10 @@ main(int argc, char *argv[]) | |||
if (getenv("NNN_USE_EDITOR")) | |||
editor = xgetenv("EDITOR", "vi"); | |||
/* Set metadata viewer if not set */ | |||
if (!metaviewer) | |||
metaviewer = utils[2]; | |||
/* Set player if not set already */ | |||
if (!player) | |||
player = utils[1]; | |||