From 5745597fd51880801097ec6d0dbde52bd290b212 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Thu, 31 Mar 2022 19:13:54 +0530 Subject: [PATCH] Fix #1333: plugin openall to open selection --- plugins/README.md | 1 + plugins/openall | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100755 plugins/openall diff --git a/plugins/README.md b/plugins/README.md index 05f0351c..c13bf10e 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -48,6 +48,7 @@ Plugins extend the capabilities of `nnn`. They are _executable_ scripts (or bina | [nmount](nmount) | Toggle mount status of a device as normal user | sh | pmount, udisks2 | | [nuke](nuke) | Sample file opener (CLI-only by default) | sh | _see in-file docs_ | | [oldbigfile](oldbigfile) | List large files by access time | sh | find, sort | +| [openall](openall) | Open selected files together or one by one [✓] | bash | - | | [organize](organize) | Auto-organize files in directories by file type [✓] | sh | file | | [pdfread](pdfread) | Read a PDF or text file aloud | sh | pdftotext, mpv,
pico2wave | | [preview-tabbed](preview-tabbed) | Preview files with Tabbed/xembed | bash | _see in-file docs_ | diff --git a/plugins/openall b/plugins/openall new file mode 100755 index 00000000..fe382a4e --- /dev/null +++ b/plugins/openall @@ -0,0 +1,42 @@ +#!/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 +# +# 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 + +if [ -s "$sel" ]; then + targets=() + while IFS= read -r -d '' entry || [ -n "$entry" ]; do + targets+=( "$entry" ) + done < "$sel" +fi + +last=${targets[${#targets[@]}-1]} + +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 + fi +done + +# Clear selection +if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then + printf "-" > "$NNN_PIPE" +fi