# 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
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;
/* 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;
/* 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);
/* 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;
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;
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\
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;
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;