]> Sergey Matveev's repositories - nnn.git/commitdiff
xdgdefault plugin: add dmenu support (#1112)
authorN-R-K <79544946+N-R-K@users.noreply.github.com>
Fri, 23 Jul 2021 11:36:19 +0000 (17:36 +0600)
committerGitHub <noreply@github.com>
Fri, 23 Jul 2021 11:36:19 +0000 (17:06 +0530)
* 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

plugins/README.md
plugins/xdgdefault

index 804d110850e8a503b71307deb9c425852adecfc4..fea4a3fd3962fb176caacb147b172a9f6c10b78c 100644 (file)
@@ -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:
 
index a302b22aab5e1218e7018075f46d99cbcc523a5b..159dbc6c3fb57448f4636e3d1ce08f7fe2ddce57 100755 (executable)
@@ -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