summaryrefslogtreecommitdiff
path: root/ediff.sh.in
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2014-11-27 20:06:16 -0500
committerLuke Shumaker <lukeshu@sbcglobal.net>2014-11-27 20:06:16 -0500
commita971938946dd61a3468263908988363dbdd87a3d (patch)
treec3cc9ef949523199b81f8f7799c3c1863b59554c /ediff.sh.in
initial commit of my emacs scripts, after some cleanup
Diffstat (limited to 'ediff.sh.in')
-rw-r--r--ediff.sh.in62
1 files changed, 62 insertions, 0 deletions
diff --git a/ediff.sh.in b/ediff.sh.in
new file mode 100644
index 0000000..5ecba70
--- /dev/null
+++ b/ediff.sh.in
@@ -0,0 +1,62 @@
+#!@bash@
+
+m4_include(common.sh)
+
+usage() {
+ print 'Usage: %q [OPTIONS] FILE_A FILE_B' "$0"
+ print 'Usage: %q -3 [OPTIONS] FILE_A FILE_B FILE_C' "$0"
+ print "Use Emacs' ediff-mode to compare two files"
+ echo
+ print 'The following OPTIONS are accepted:'
+ emacs_usage
+ flag '-3' 'Do a 3-way diff instead of 2-way'
+ flag '-r, --recursive' 'Diff directories recursively'
+}
+
+main() {
+ declare -a flags=()
+ declare -a files=()
+ declare -i cnt=2
+ declare error=false
+ declare mode=normal
+ declare cmd=ediff
+
+ declare args=
+ emacs_getopt 3r recursive "$@" || error=true
+ eval set -- "$args"
+ while true; do
+ case "$1" in
+ -V|--version) shift; mode=version;;
+ -H|--help) shift; mode=usage
+ -r|--recursive) shift; cmd=edirs;;
+ -3) shift; cnt=3;;
+ --) shift; break;;
+ *)
+ if [[ $1 =~ $emacs_getopt_2 ]]; then
+ flags+=("$1" "$2"); shift 2
+ else
+ flags+=("$1"); shift 1
+ fi
+ ;;
+ esac
+ done
+ files=("$@")
+ if [[ $mode == normal ]]; then
+ [[ ${#files[@]} = ${cnt} ]] || error=true
+ fi
+
+ if $error; then
+ usage >&2
+ return 1
+ fi
+ case "$mode" in
+ usage) usage; return 0;;
+ version) version; return 0;;
+ esac
+
+ emacsclient "${flags[@]}" --eval \
+ '(select-frame (make-frame))' \
+ "(${cmd}${cnt#2} $(emacs_quote "${files[@]}"))"
+}
+
+main "$@"