]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #26: Provide an option to use a custom nlay file.
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 14 May 2017 15:30:46 +0000 (21:00 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 14 May 2017 15:30:46 +0000 (21:00 +0530)
README.md
nlay
nnn.c

index 83482b6a501c2e457f16b7a4b696380dd8c972c9..d8831b3edea6e870bb6385f22d855a83e210eafe 100644 (file)
--- a/README.md
+++ b/README.md
@@ -121,6 +121,7 @@ nnn needs libreadline, libncursesw (on Linux or ncurses on OS X) and standard li
 
     optional arguments:
       -d             start in detail view mode
+      -p             path to custom nlay
       -S             start in disk usage analyzer mode
       -v             show program version and exit
       -h             show this help and exit
diff --git a/nlay b/nlay
index 0106125d94b8e2f2194f5729e71a7ba0d05126bc..20d6e8ed7d0775c24e2c9e35d9d39ec17b549e38 100755 (executable)
--- a/nlay
+++ b/nlay
 # 3. Assuming you don't to play multiple audio/video files simultaneously,
 #    nlay kills any running instances of the audio/video player in bg mode.
 #
-# 4. Keep a personal backup (on GitHub Gist maybe?) of this file if you modify
-#    it. nlay is OVERWRITTEN during nnn upgrade.
+# 4. nlay is OVERWRITTEN during nnn upgrade. You can store your custom nlay in a
+#    location other than the default and have an alias with nnn option '-p' to
+#    invoke it. Remember it might break or lack new capabilities added to nlay
+#    in future releases. Check the file diff once in a while.
 #
 # Author: Arun Prakash Jana
 # Email: engineerarun@gmail.com
diff --git a/nnn.c b/nnn.c
index 512f20fe8156ac6989ff6981e9a3e017521b5f32..0fb3d4b7e3f42e4a91b9c6db515406d2d0cd11eb 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -144,6 +144,7 @@ static int ndents, cur, total_dents;
 static int idle;
 static char *opener;
 static char *fb_opener;
+static char *player;
 static char *copier;
 static char *desktop_manager;
 static off_t blk_size;
@@ -1570,7 +1571,7 @@ nochange:
                                /* If NNN_OPENER is set, use it */
                                if (opener) {
                                        sprintf(cmd, "%s \'", opener);
-                                       xstrlcpy(cmd + strlen(cmd), newpath, sizeof(cmd) - strlen(cmd));
+                                       xstrlcpy(cmd + strlen(cmd), newpath, MAX_CMD_LEN - strlen(cmd));
                                        strcat(cmd, "\' > /dev/null 2>&1");
                                        r = system(cmd);
                                        continue;
@@ -1579,8 +1580,13 @@ nochange:
                                /* Play with nlay if identified */
                                mime = getmime(dents[cur].name);
                                if (mime) {
-                                       strcpy(cmd, "nlay \'");
-                                       xstrlcpy(cmd + strlen(cmd), newpath, sizeof(cmd) - strlen(cmd));
+                                       if (player) {
+                                               cmd[0] = '\'';
+                                               xstrlcpy(cmd + 1, player, MAX_CMD_LEN);
+                                               strcat(cmd, "\' \'");
+                                       } else
+                                               strcpy(cmd, "nlay \'");
+                                       xstrlcpy(cmd + strlen(cmd), newpath, MAX_CMD_LEN - strlen(cmd));
                                        sprintf(cmd + strlen(cmd), "\' %s", mime);
                                        exitcurses();
                                        r = system(cmd);
@@ -1591,7 +1597,7 @@ nochange:
                                /* If nlay doesn't handle it, open plain text
                                   files with vi, then try NNN_FALLBACK_OPENER */
                                strcpy(cmd, "file -bi \'");
-                               xstrlcpy(cmd + strlen(cmd), newpath, sizeof(cmd) - strlen(cmd));
+                               xstrlcpy(cmd + strlen(cmd), newpath, MAX_CMD_LEN - strlen(cmd));
                                strcat(cmd, "\'");
                                if (get_output(cmd, MAX_CMD_LEN) == NULL)
                                        continue;
@@ -1604,7 +1610,7 @@ nochange:
                                        continue;
                                } else if (fb_opener) {
                                        sprintf(cmd, "%s \'", fb_opener);
-                                       xstrlcpy(cmd + strlen(cmd), newpath, sizeof(cmd) - strlen(cmd));
+                                       xstrlcpy(cmd + strlen(cmd), newpath, MAX_CMD_LEN - strlen(cmd));
                                        strcat(cmd, "\' > /dev/null 2>&1");
                                        r = system(cmd);
                                        continue;
@@ -2001,6 +2007,7 @@ positional arguments:\n\
   PATH           directory to open [default: current dir]\n\n\
 optional arguments:\n\
   -d             start in detail view mode\n\
+  -p             path to custom nlay\n\
   -S             start in disk usage analyzer mode\n\
   -v             show program version and exit\n\
   -h             show this help and exit\n\n\
@@ -2027,7 +2034,7 @@ main(int argc, char *argv[])
        if (argc > 3)
                usage();
 
-       while ((opt = getopt(argc, argv, "dSvh")) != -1) {
+       while ((opt = getopt(argc, argv, "dSp:vh")) != -1) {
                switch (opt) {
                case 'S':
                        bsizeorder = 1;
@@ -2036,6 +2043,13 @@ main(int argc, char *argv[])
                        showdetail = 1;
                        printptr = &printent_long;
                        break;
+               case 'p':
+                       player = optarg;
+                       if (strlen(player) > 512) {
+                               fprintf(stderr, "path to player must be <= 512 characters\n");
+                               exit(1);
+                       }
+                       break;
                case 'v':
                        fprintf(stdout, "%s\n", VERSION);
                        return 0;