]> Sergey Matveev's repositories - nnn.git/commitdiff
fzdirs: support default list, default to $PWD
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 28 May 2021 17:54:06 +0000 (23:24 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 28 May 2021 18:00:29 +0000 (23:30 +0530)
plugins/fzdirs

index 57748a6a49522b0ff1507306c9584c7d3ef2c806..1ae57b2b87684cf21c298cc4237c61ec8b8a7f40 100755 (executable)
@@ -7,6 +7,11 @@
 # Details: Paths in list file should be newline-separated absolute paths.
 #          Paths can be file paths; the script will scan the parent dirs.
 #
+#          The path-list file precedence is:
+#          - "$1" (the hovered file) if it exists and is plaintext
+#          - "$LIST" if set below
+#          - "$2" (the current directory) [mimics plugin fzcd behaviour]
+#
 #          The path-list file can be generated easily:
 #          - pick the (file)paths in picker mode to path-list file
 #          - OR, edit selection in nnn and save as path-list file
@@ -22,19 +27,24 @@ IFS="$(printf '\n\r')"
 . "$(dirname "$0")"/.nnn-plugin-helper
 
 CTX=+
+LIST="$LIST"
 
-if [ "$(cmd_exists fzf)" -eq "0" ] && [ -s "$1" ]; then
+if [ -n "$1" ] && [ $(file -b --mime-type "$1") = 'text/plain' ]; then
+    LIST="$1"
+elif ! [ -s "$LIST" ]; then
+    LIST="$2"
+fi
 
+if [ "$(cmd_exists fzf)" -eq "0" ]; then
     tmpfile=$(mktemp /tmp/abc-script.XXXXXX)
 
-    for entry in $(tr '\0' '\n' < "$1")
-    do
-        if [ -d "$entry" ]; then
-            printf "%s\n" "$entry" >> "$tmpfile"
-        elif [ -f "$entry" ]; then
-            printf "%s\n" "$(dirname "$entry")" >> "$tmpfile"
+    while IFS= read -r path; do
+        if [ -d "$path" ]; then
+            printf "%s\n" "$path" >> "$tmpfile"
+        elif [ -f "$path" ]; then
+            printf "%s\n" "$(dirname "$path")" >> "$tmpfile"
         fi
-    done
+    done < "$LIST"
 
     # Clear selection
     if [ -p "$NNN_PIPE" ]; then
@@ -53,8 +63,7 @@ if [ -n "$sel" ]; then
         exit 0
     fi
 
-    # Check if selected path returned
-    # by fzf command is absolute
+    # Check if the selected path returned by fzf command is absolute
     case $sel in
     /*) nnn_cd "$sel" "$CTX" ;;
     *)