mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
7f5dbd11e3
With this enhancement, plugins which operate on selection can explicitly request the program to clear the selection.
53 lines
1.4 KiB
Bash
Executable file
53 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# Description: Splits the file passed as argument or joins selection
|
|
#
|
|
# Note: Adds numeric suffix to split files
|
|
# Adds '.out suffix to the first file to be joined and saves as output file for join
|
|
#
|
|
# Shell: POSIX compliant
|
|
# Authors: Arun Prakash Jana, ath3
|
|
|
|
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
|
resp=s
|
|
|
|
if [ -s "$selection" ]; then
|
|
printf "press 's' (split current file) or 'j' (join selection): "
|
|
read -r resp
|
|
fi
|
|
|
|
if [ "$resp" = "j" ]; then
|
|
if [ -s "$selection" ]; then
|
|
arr=$(tr '\0' '\n' < "$selection")
|
|
if [ "$(echo "$arr" | wc -l)" -lt 2 ]; then
|
|
echo "joining needs at least 2 files"
|
|
exit
|
|
fi
|
|
for entry in $arr
|
|
do
|
|
if [ -d "$entry" ]; then
|
|
echo "cant join directories"
|
|
exit
|
|
fi
|
|
done
|
|
|
|
file="$(basename "$(echo "$arr" | sed -n '1p' | sed -e 's/[0-9][0-9]$//')")"
|
|
sort -z < "$selection" | xargs -0 -I{} cat {} > "${file}.out"
|
|
|
|
# Clear selection
|
|
if [ -p "$NNN_PIPE" ]; then
|
|
printf "-" > "$NNN_PIPE"
|
|
fi
|
|
fi
|
|
elif [ "$resp" = "s" ]; then
|
|
if [ -n "$1" ] && [ -f "$1" ]; then
|
|
# a single file is passed
|
|
printf "split size in MB: "
|
|
read -r size
|
|
|
|
if [ -n "$size" ]; then
|
|
split -d -b "$size"M "$1" "$1"
|
|
fi
|
|
fi
|
|
fi
|