]> Sergey Matveev's repositories - nnn.git/commitdiff
Add option -e to use exiftool
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Jul 2017 18:27:41 +0000 (23:57 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Jul 2017 18:27:41 +0000 (23:57 +0530)
README.md
config.def.h
nnn.1
nnn.c

index e68fa78e55787f13df6cb6530ed0671ce2eec9b6..513dd09373e4f6a56407ab4e82c862afa96a6b8a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -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
 
index af53cc94b513b344164406a6e04e11749b1cfbb8..7bf1465ad43d71c82065abe51ff1762ea9a0bf3f 100644 (file)
@@ -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,    "",     "" },
diff --git a/nnn.1 b/nnn.1
index 5b2d7e23e7a50a027f476d01ca64164ff394b345..d16e3f0c1b3500814ffb66462151722bab220f7a 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -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
diff --git a/nnn.c b/nnn.c
index b6df7744c8f0774da82b7554953df0d5272445c9..7bd90a1f721d0aad691b45f920c2c2ee7c00cc79 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -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];