aboutsummaryrefslogtreecommitdiffstats
path: root/community/nnn/nlay
blob: 3d6297f192a7ad8e81bfce2d695ae79fc0281d27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/sh

# #############################################################################
# nlay: a customizable script to play files in different apps by file type
#
# usage: nlay file type
#
# MUST READ:
#
# 1. Feel free to change the default apps to your favourite ones.
#    Simple use 'run_fg' or 'run_bg' to run the specified app with the given
#    options in foreground or background respectively. Variable '$1' contains
#    path of the file to open. If run_bg is used the app is detached and
#    started in the background in silent mode. If the app is not installed
#    (i.e. is not on your PATH), it is silently skipped and the script tries
#    next 'run_bg' or 'run_fg'.
#
#    The 'run_bg' vs. 'run_fg' depends on personal preference and type of app,
#    e.g., I would start vim (CLI) in the foreground but Sublime Text (GUI) in
#    the background.
#
# 2. Detached apps are not killed when nnn exits. Use kill(1) or killall(1) to
#    to stop console based background apps.
#
# 3. 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.
#
# Please note that this is not the original nlay script, but Alpine version
# rewritten to be compatible with any POSIX compliant shell, not just Bash/ZSH.
#
# #############################################################################

# Runs the command in foreground if exists.
run_fg() {
    which "$1" >/dev/null && "$@"
    exit 0
}

# Runs the command in background if exists.
run_bg() {
    which "$1" >/dev/null \
        && "$@" >/dev/null 2>&1 & \
        && exit 0
}

# Enable the lines below to handle file by extension
# This is provided for using a custom player for specific files
# $ext holds the extension
<<ENABLE_FILE_TYPE_HANDLING
fname=$(basename "$1")
case "$fname" in
    *.*) ;;
    *) exit 1;;
esac

ext="${fname##*.}"
[ -n "$ext" ] || exit 1
ext=$(printf %s "$ext" | tr '[A-Z]' '[a-z]')

# handle this extension and exit
ENABLE_FILE_TYPE_HANDLING


#------------ PLAINTEXT (UNUSED) ------------
if [ "$2" = "text" ]; then
    run_fg vim "$1"

#----------------- SEARCH -------------------
elif [ "$2" = "search" ]; then
    run_bg gnome-search-tool --path "$1"
    run_bg catfish --path "$1"

#--------------- SCREENSAVER ----------------
elif [ "$2" = "screensaver" ]; then
    run_fg vlock
fi