diff options
Diffstat (limited to 'files/.config/nnn/plugins/openall')
| -rwxr-xr-x | files/.config/nnn/plugins/openall | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/files/.config/nnn/plugins/openall b/files/.config/nnn/plugins/openall new file mode 100755 index 0000000..5a7941f --- /dev/null +++ b/files/.config/nnn/plugins/openall @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# Description: Open selected files in nuke one by one or in oneshot +# +# 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} +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" + + elements=${#targets[@]} + + 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 + + # Clear selection + if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then + printf "-" > "$NNN_PIPE" + fi +elif [ -n "$1" ]; then + "$OPENER" "$1" +fi |
