From 4867fa2bc78839868936f7515dd2cf21dcdfbdd8 Mon Sep 17 00:00:00 2001
From: NRK <nrk@disroot.org>
Date: Fri, 17 Feb 2023 19:51:57 +0600
Subject: [PATCH] plugin-helper: add nnn_use_selection()

---
 plugins/.nmv               | 20 ++++----------------
 plugins/.nnn-plugin-helper | 23 +++++++++++++++++++++++
 plugins/gpge               | 18 +++++++++---------
 3 files changed, 36 insertions(+), 25 deletions(-)

diff --git a/plugins/.nmv b/plugins/.nmv
index 63b56fa9..9ab1cdb1 100755
--- a/plugins/.nmv
+++ b/plugins/.nmv
@@ -17,10 +17,12 @@
 # Shell: bash
 # Author: KlzXS
 
+# shellcheck disable=SC1090,SC1091
+. "$(dirname "$0")"/.nnn-plugin-helper
+
 EDITOR="${EDITOR:-vi}"
 TMPDIR="${TMPDIR:-/tmp}"
 NNN_INCLUDE_HIDDEN="${NNN_INCLUDE_HIDDEN:-0}"
-NNN_PREFER_SELECTION="${NNN_PREFER_SELECTION:-0}"
 VERBOSE="${VERBOSE:-0}"
 RECURSIVE="${RECURSIVE:-0}"
 
@@ -33,25 +35,11 @@ case "$NNN_TRASH" in
 		RM_UTIL="rm -ri" ;;
 esac
 
-selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
 exit_status=0
 
 dst_file=$(mktemp "$TMPDIR/.nnnXXXXXX")
 
-if [ -s "$selection" ]; then
-	if [ "$NNN_PREFER_SELECTION" -eq 1 ]; then
-		resp="s"
-	else
-		printf "Rename 'c'urrent / 's'election? "
-		read -r resp
-
-		if ! [ "$resp" = "c" ] && ! [ "$resp" = "s" ]; then
-			exit 1
-		fi
-	fi
-fi
-
-if [ "$resp" = "s" ]; then
+if nnn_use_selection "Rename"; then
 	arr=$(tr '\0' '\n' < "$selection")
 else
 	findcmd="find . ! -name ."
diff --git a/plugins/.nnn-plugin-helper b/plugins/.nnn-plugin-helper
index a0377ac1..c8ef87ea 100644
--- a/plugins/.nnn-plugin-helper
+++ b/plugins/.nnn-plugin-helper
@@ -12,6 +12,9 @@ export selection
 CUR_CTX=0
 export CUR_CTX
 
+NNN_PREFER_SELECTION="${NNN_PREFER_SELECTION:-0}"
+export NNN_PREFER_SELECTION
+
 ## Ask nnn to switch to directory $1 in context $2.
 ## If $2 is not provided, the function asks explicitly.
 nnn_cd () {
@@ -36,3 +39,23 @@ cmd_exists () {
     type "$1" > /dev/null 2>&1
     echo $?
 }
+
+nnn_use_selection() {
+    if ! [ -s "$selection" ]; then
+        return 1
+    fi
+
+    if [ "$NNN_PREFER_SELECTION" -eq 1 ]; then
+        return 0
+    else
+        [ -n "$1" ] && printf "$1 "
+        printf "(s)election/(c)urrent? [default=c] "
+        read -r resp__
+
+        if [ "$resp__" = "s" ]; then
+            return 0
+        else
+            return 1
+        fi
+    fi
+}
diff --git a/plugins/gpge b/plugins/gpge
index 69016a9d..429fd7de 100755
--- a/plugins/gpge
+++ b/plugins/gpge
@@ -10,7 +10,8 @@
 # Shell: POSIX compliant
 # Author: KlzXS
 
-selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
+# shellcheck disable=SC1090,SC1091
+. "$(dirname "$0")"/.nnn-plugin-helper
 
 printf "(s)ymmetric, (a)symmetric? [default=a] "
 read -r symmetry
@@ -18,12 +19,11 @@ read -r symmetry
 if [ "$symmetry" = "s" ]; then
 	gpg --symmetric "$1"
 else
-	printf "(s)election/(c)urrent? [default=c] "
-	read -r resp
-
-	if [ "$resp" = "s" ]; then
+	if nnn_use_selection; then
+		clear_sel=1
 		files=$(tr '\0' '\n' < "$selection")
 	else
+		clear_sel=0
 		files=$1
 	fi
 
@@ -37,8 +37,8 @@ else
 
 	printf "%s" "$files" | xargs -n1 gpg --encrypt --recipient "$recipient"
 
-    # Clear selection
-    if [ "$resp" = "s" ] && [ -p "$NNN_PIPE" ]; then
-        printf "-" > "$NNN_PIPE"
-    fi
+	# Clear selection
+	if [ "$clear_sel" -eq 1 ] && [ -p "$NNN_PIPE" ]; then
+		printf "-" > "$NNN_PIPE"
+	fi
 fi
-- 
2.51.0