Merge pull request #1588 from N-R-K/prefer_sel

nmv: prefer selection if -u is active
This commit is contained in:
Arun 2023-02-17 19:30:59 +05:30 committed by GitHub
commit f1c85b977a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 20 deletions

View File

@ -17,6 +17,9 @@
# Shell: bash # Shell: bash
# Author: KlzXS # Author: KlzXS
# shellcheck disable=SC1090,SC1091
. "$(dirname "$0")"/.nnn-plugin-helper
EDITOR="${EDITOR:-vi}" EDITOR="${EDITOR:-vi}"
TMPDIR="${TMPDIR:-/tmp}" TMPDIR="${TMPDIR:-/tmp}"
NNN_INCLUDE_HIDDEN="${NNN_INCLUDE_HIDDEN:-0}" NNN_INCLUDE_HIDDEN="${NNN_INCLUDE_HIDDEN:-0}"
@ -32,21 +35,11 @@ case "$NNN_TRASH" in
RM_UTIL="rm -ri" ;; RM_UTIL="rm -ri" ;;
esac esac
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
exit_status=0 exit_status=0
dst_file=$(mktemp "$TMPDIR/.nnnXXXXXX") dst_file=$(mktemp "$TMPDIR/.nnnXXXXXX")
if [ -s "$selection" ]; then if nnn_use_selection "Rename"; then
printf "Rename 'c'urrent / 's'election? "
read -r resp
if ! [ "$resp" = "c" ] && ! [ "$resp" = "s" ]; then
exit 1
fi
fi
if [ "$resp" = "s" ]; then
arr=$(tr '\0' '\n' < "$selection") arr=$(tr '\0' '\n' < "$selection")
else else
findcmd="find . ! -name ." findcmd="find . ! -name ."

View File

@ -12,6 +12,9 @@ export selection
CUR_CTX=0 CUR_CTX=0
export CUR_CTX export CUR_CTX
NNN_PREFER_SELECTION="${NNN_PREFER_SELECTION:-0}"
export NNN_PREFER_SELECTION
## Ask nnn to switch to directory $1 in context $2. ## Ask nnn to switch to directory $1 in context $2.
## If $2 is not provided, the function asks explicitly. ## If $2 is not provided, the function asks explicitly.
nnn_cd () { nnn_cd () {
@ -36,3 +39,23 @@ cmd_exists () {
type "$1" > /dev/null 2>&1 type "$1" > /dev/null 2>&1
echo $? 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
}

View File

@ -212,6 +212,7 @@ When `nnn` executes a plugin, it does the following:
3. `$3`: The picker mode output file (`-` for stdout) if `nnn` is executed as a file picker. 3. `$3`: The picker mode output file (`-` for stdout) if `nnn` is executed as a file picker.
- Sets the environment variable `NNN_PIPE` used to control `nnn` active directory. - Sets the environment variable `NNN_PIPE` used to control `nnn` active directory.
- Sets the environment variable `NNN_INCLUDE_HIDDEN` to `1` if hidden files are active, `0` otherwise. - Sets the environment variable `NNN_INCLUDE_HIDDEN` to `1` if hidden files are active, `0` otherwise.
- Sets the environment variable `NNN_PREFER_SELECTION` to `1` if user prefers to use selection (see nnn's `-u` flag), `0` otherwise.
- Exports the [special variables](https://github.com/jarun/nnn/wiki/Concepts#special-variables). - Exports the [special variables](https://github.com/jarun/nnn/wiki/Concepts#special-variables).
Plugins can also read the `.selection` file in the config directory. Plugins can also read the `.selection` file in the config directory.

View File

@ -10,7 +10,8 @@
# Shell: POSIX compliant # Shell: POSIX compliant
# Author: KlzXS # 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] " printf "(s)ymmetric, (a)symmetric? [default=a] "
read -r symmetry read -r symmetry
@ -18,12 +19,11 @@ read -r symmetry
if [ "$symmetry" = "s" ]; then if [ "$symmetry" = "s" ]; then
gpg --symmetric "$1" gpg --symmetric "$1"
else else
printf "(s)election/(c)urrent? [default=c] " if nnn_use_selection; then
read -r resp clear_sel=1
if [ "$resp" = "s" ]; then
files=$(tr '\0' '\n' < "$selection") files=$(tr '\0' '\n' < "$selection")
else else
clear_sel=0
files=$1 files=$1
fi fi
@ -37,8 +37,8 @@ else
printf "%s" "$files" | xargs -n1 gpg --encrypt --recipient "$recipient" printf "%s" "$files" | xargs -n1 gpg --encrypt --recipient "$recipient"
# Clear selection # Clear selection
if [ "$resp" = "s" ] && [ -p "$NNN_PIPE" ]; then if [ "$clear_sel" -eq 1 ] && [ -p "$NNN_PIPE" ]; then
printf "-" > "$NNN_PIPE" printf "-" > "$NNN_PIPE"
fi fi
fi fi

View File

@ -5174,6 +5174,7 @@ static void setexports(void)
} }
} }
setenv("NNN_INCLUDE_HIDDEN", xitoa(cfg.showhidden), 1); setenv("NNN_INCLUDE_HIDDEN", xitoa(cfg.showhidden), 1);
setenv("NNN_PREFER_SELECTION", xitoa(cfg.prefersel), 1);
} }
static void run_cmd_as_plugin(const char *file, uchar_t flags) static void run_cmd_as_plugin(const char *file, uchar_t flags)
@ -7368,6 +7369,7 @@ nochange:
case SEL_RENAMEMUL: case SEL_RENAMEMUL:
endselection(TRUE); endselection(TRUE);
setenv("NNN_INCLUDE_HIDDEN", xitoa(cfg.showhidden), 1); setenv("NNN_INCLUDE_HIDDEN", xitoa(cfg.showhidden), 1);
setenv("NNN_PREFER_SELECTION", xitoa(cfg.prefersel), 1);
setenv("NNN_LIST", listpath ? listroot : "", 1); setenv("NNN_LIST", listpath ? listroot : "", 1);
if (!(getutil(utils[UTIL_BASH]) if (!(getutil(utils[UTIL_BASH])