mirror of
https://github.com/jarun/nnn.git
synced 2024-11-24 11:51:27 +00:00
7f5dbd11e3
With this enhancement, plugins which operate on selection can explicitly request the program to clear the selection.
65 lines
1.3 KiB
Bash
Executable file
65 lines
1.3 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# Description: Clean filename or dirname (either hovered or selections)
|
|
# to be more shell-friendly.
|
|
# This script replaces any non A-Za-z0-9._- char
|
|
# with underscore (_).
|
|
#
|
|
# LIMITATION: Won't work with filename that contains newline
|
|
#
|
|
# Dependencies: sed
|
|
#
|
|
# Shell: POSIX compliant
|
|
# Author: Benawi Adha
|
|
|
|
prompt=true
|
|
sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
|
IFS='
|
|
'
|
|
|
|
cleanup() {
|
|
printf "%s" "$1" | sed -e 's/[^A-Za-z0-9._-]/_/g'
|
|
}
|
|
|
|
if [ -s "$sel" ]; then
|
|
targets=$(sed -e "s/\\x0/\\n/g;\$a\\" "$sel" | \
|
|
while read -r i; do
|
|
basename "$i";
|
|
done)
|
|
else
|
|
targets=$1
|
|
fi
|
|
|
|
for i in $targets; do
|
|
printf "%s --> %s\n" "$i" "$(cleanup "$i")";
|
|
done
|
|
|
|
if $prompt; then
|
|
echo
|
|
printf "Proceed [Yn]? "
|
|
read -r input
|
|
case "$input" in
|
|
y|Y|'')
|
|
;;
|
|
*)
|
|
echo "Canceled"
|
|
exit
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
for i in $targets; do
|
|
if [ "$i" != "$(cleanup "$i")" ]; then
|
|
tmp=''
|
|
if [ -e "$(cleanup "$i")" ]; then
|
|
tmp='_'
|
|
fi
|
|
mv "$i" "$tmp$(cleanup "$i")";
|
|
fi
|
|
done
|
|
|
|
# Clear selection
|
|
if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then
|
|
printf "-" > "$NNN_PIPE"
|
|
fi
|