From 88e9122c799d53279550b2018d67b3f93608bb42 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Fri, 1 Apr 2022 07:16:16 +0530 Subject: [PATCH] opener improvements - show file name - open hovered if none selected - open and exit if only one file selected - code improvements --- plugins/openall | 51 ++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/plugins/openall b/plugins/openall index fe382a4e..5a7941fb 100755 --- a/plugins/openall +++ b/plugins/openall @@ -1,42 +1,49 @@ #!/usr/bin/env bash # Description: Open selected files in nuke one by one or in oneshot -# Tip: keep pressing "Enter" to open files one by one # -# Note: Uses nuke by default, easy to replace with preferred opener -# nuke is invoked once for each file in a loop +# Notes: 1. Opens the hovered file if the selection is empty +# 2. nuke is the default, set OPENER below for custom +# 3. Opener is invoked once for each file in a loop +# 4. Keep pressing "Enter" to open files one by one # # Shell: bash # Author: Arun Prakash Jana sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} -nuke="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke" - -printf "open [A]ll? " -read -r all +OPENER="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke" if [ -s "$sel" ]; then targets=() while IFS= read -r -d '' entry || [ -n "$entry" ]; do targets+=( "$entry" ) done < "$sel" -fi -last=${targets[${#targets[@]}-1]} + elements=${#targets[@]} -for entry in "${targets[@]}"; do - # replace nuke with your preferred opened below - "$nuke" "$entry" - if [ "$all" != "A" ] && [ "$entry" != "$last" ]; then - printf "press Enter to open next\n" - read -r -s -n 1 key - if [[ $key != "" ]]; then - break - fi + if (( elements == 1 )); then + # If there's only one file selected, open without prompts + "$OPENER" "${targets[0]}" + else + printf "open [A]ll? " + read -r all + + for ((index=0; index <= ${#targets[@]}; index++)); do + "$OPENER" "${targets[index]}" + if [ "$all" != "A" ] && (( index+1 < elements )); then + printf "press Enter to open '%s'\n" "${targets[index+1]}" + read -r -s -n 1 key + if [[ $key != "" ]]; then + break + fi + fi + done fi -done -# Clear selection -if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then - printf "-" > "$NNN_PIPE" + # Clear selection + if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then + printf "-" > "$NNN_PIPE" + fi +elif [ -n "$1" ]; then + "$OPENER" "$1" fi