commit 3a98dfb0b0008e45ff4d51cc30c1b749bb162a41
parent 0150c6984411ca7a14c4f90205a4d6f4411de49c
Author: N-R-K <79544946+N-R-K@users.noreply.github.com>
Date: Fri, 23 Jul 2021 17:36:19 +0600
xdgdefault plugin: add dmenu support (#1112)
* xdgdefault plugin: add dmenu support
use fzf if available. otherwise, if available, use dmenu.
should be possible to use rofi as well, but i don't use rofi nor do i
have it installed for testing.
* xdgdefault plugin: add GUI flag
* update xdgdefault requirement
Diffstat:
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/plugins/README.md b/plugins/README.md
@@ -62,7 +62,7 @@ Plugins extend the capabilities of `nnn`. They are _executable_ scripts (or bina
| [upload](upload) | Upload to Firefox Send or ix.io (text) or file.io (bin) | sh | [ffsend](https://github.com/timvisee/ffsend), curl, jq, tr |
| [wallpaper](wall) | Set wallpaper or change colorscheme | sh | nitrogen/pywal |
| [x2sel](x2sel) | Copy file list from system clipboard to selection | sh | _see in-file docs_ |
-| [xdgdefault](xdgdefault) | Set the default app for the hovered file type | sh | xdg-utils, fzf |
+| [xdgdefault](xdgdefault) | Set the default app for the hovered file type | sh | xdg-utils, fzf/dmenu |
Note:
diff --git a/plugins/xdgdefault b/plugins/xdgdefault
@@ -5,12 +5,21 @@
# defaults if unset, as specified in XDG Base Directory Specification
# - http://specifications.freedesktop.org/basedir-spec/.
#
-# Dependencies: xdg-utils, fzf
+# Dependencies: xdg-utils, fzf or dmenu (GUI)
#
# Shell: POSIX compliant
# Author: lwnctd
-if [ -z "$1" ] || ! command -v fzf > /dev/null 2>& 1; then
+# set to 1 to enable GUI apps
+GUI="${GUI:-0}"
+
+if [ "$GUI" -ne 0 ] && command -v dmenu >/dev/null 2>& 1; then
+ menu="dmenu -l 7"
+elif command -v fzf > /dev/null 2>& 1; then
+ menu="fzf -e --tiebreak=begin"
+fi
+
+if [ -z "$1" ] || [ -z "$menu" ] > /dev/null 2>& 1; then
exit 1
fi
@@ -36,7 +45,7 @@ app=$(find "$@" -iname '*.desktop' -exec grep '^Name=' {} + \
| sed -E 's;.+/(.+desktop):Name=(.+);\2:\1;' \
| sort -t ':' -k 1,1 \
| column -t -s ':' -o "$(printf '\t')" \
- | fzf -e --tiebreak=begin \
+ | $menu \
| cut -f 2)
if [ -n "$app" ]; then