Last active
December 14, 2019 16:57
-
-
Save unhammer/9497641f44634ae96c6509a2cfaae574 to your computer and use it in GitHub Desktop.
little wrapper around `vd --diff` to get diff's -U option, since vd doesn't have a "go to next difference" feature ( https://github.com/saulpw/visidata/issues/303 )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Usage: | |
# $ vddiff -U4 before after -ftsv | |
# You can toggle between the before/after sheets with Ctrl-^ | |
# If you keyboard layout makes that impossible to type, add an | |
# alternative binding to your ~/.visidatarc, e.g. | |
# bindkey("ø", "prev-sheet") | |
set -e -u | |
d=$(mktemp -td vddiff.XXXXXXXXXXX) | |
trap 'rm -rf "${d}"' EXIT | |
declare -i U=3 | |
OPTIND=1; while getopts "U:" opt; do | |
case "$opt" in | |
U) U=$OPTARG;; | |
*) | |
echo "Unknown option" >&2 | |
exit 1 | |
;; | |
esac | |
done | |
shift $((OPTIND-1)) | |
before="$1" | |
after="$2" | |
shift 2 # send anything after the files to vd | |
test -e "${before}" | |
test -e "${after}" | |
skipheader () { | |
tail -n+2 "$@" | |
} | |
{ | |
printf " " | |
head -1 "${before}" | |
diff -U"$U" \ | |
<(skipheader "${before}") \ | |
<(skipheader "${after}") \ | |
| grep -ve ^@@ -e ^--- -e ^+++ | |
} > "$d/diffout" | |
undiff () { | |
local discard="$1" | |
grep -v ^"${discard}" "$d/diffout" \ | |
| sed 's/^.//' | |
} | |
undiff + >"$d/before" | |
undiff - >"$d/after" | |
vd "$@" --diff "$d/before" "$d/after" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment