mirror of
https://github.com/jarun/nnn.git
synced 2024-12-01 02:49:44 +00:00
7f5dbd11e3
With this enhancement, plugins which operate on selection can explicitly request the program to clear the selection.
62 lines
1.8 KiB
Bash
Executable file
62 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# Description: Show diff of 2 directories or multiple files in vimdiff
|
|
#
|
|
# Note: 1. vim may show the warning: 'Vim: Warning: Input is not from a terminal'
|
|
# press 'Enter' to ignore and proceed.
|
|
# 2. if only one file is in selection, the hovered file is considered as the
|
|
# second file to diff with
|
|
#
|
|
# Shell: POSIX compliant
|
|
# Authors: Arun Prakash Jana, ath3
|
|
|
|
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
|
|
|
if which nvim >/dev/null 2>&1; then
|
|
diffcmd="nvim -d"
|
|
else
|
|
diffcmd="vimdiff +0"
|
|
fi
|
|
|
|
dirdiff() {
|
|
dir1=$(mktemp "${TMPDIR:-/tmp}"/nnn-"$(basename "$1")".XXXXXXXX)
|
|
dir2=$(mktemp "${TMPDIR:-/tmp}"/nnn-"$(basename "$2")".XXXXXXXX)
|
|
ls -A1 "$1" > "$dir1"
|
|
ls -A1 "$2" > "$dir2"
|
|
$diffcmd "$dir1" "$dir2"
|
|
rm "$dir1" "$dir2"
|
|
}
|
|
|
|
if [ -s "$selection" ]; then
|
|
arr=$(tr '\0' '\n' < "$selection")
|
|
if [ "$(echo "$arr" | wc -l)" -gt 1 ]; then
|
|
f1="$(echo "$arr" | sed -n '1p')"
|
|
f2="$(echo "$arr" | sed -n '2p')"
|
|
if [ -d "$f1" ] && [ -d "$f2" ]; then
|
|
dirdiff "$f1" "$f2"
|
|
else
|
|
# If xargs supports the -o option, use it to get rid of:
|
|
# Vim: Warning: Input is not from a terminal
|
|
# xargs -0 -o vimdiff < $selection
|
|
|
|
eval xargs -0 "$diffcmd" < "$selection"
|
|
fi
|
|
elif [ -n "$1" ]; then
|
|
f1="$(echo "$arr" | sed -n '1p')"
|
|
if [ -d "$f1" ] && [ -d "$1" ]; then
|
|
dirdiff "$f1" "$1"
|
|
elif [ -f "$f1" ] && [ -f "$1" ]; then
|
|
$diffcmd "$f1" "$1"
|
|
else
|
|
echo "cannot compare file with directory"
|
|
fi
|
|
else
|
|
echo "needs at least 2 files or directories selected for comparison"
|
|
fi
|
|
fi
|
|
|
|
# Clear selection
|
|
if [ -p "$NNN_PIPE" ]; then
|
|
printf "-" > "$NNN_PIPE"
|
|
fi
|