#!/usr/bin/env sh # Description: Show diff of 2 directories or multiple files in vimdiff # # Note: vim may show the warning: 'Vim: Warning: Input is not from a terminal' # press 'Enter' to ignore and proceed. # # Shell: POSIX compliant # Authors: Arun Prakash Jana, ath3 selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection 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 dir1=$(mktemp "${TMPDIR:-/tmp}"/nnn-"$(basename "$f1")".XXXXXXXX) dir2=$(mktemp "${TMPDIR:-/tmp}"/nnn-"$(basename "$f2")".XXXXXXXX) ls -A1 "$f1" > "$dir1" ls -A1 "$f2" > "$dir2" vimdiff "$dir1" "$dir2" rm "$dir1" "$dir2" 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 xargs -0 vimdiff +0 < "$selection" fi else echo "needs at least 2 files or directories selected for comparison" fi fi