From a971938946dd61a3468263908988363dbdd87a3d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Thu, 27 Nov 2014 20:06:16 -0500 Subject: initial commit of my emacs scripts, after some cleanup --- ediff.sh.in | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 ediff.sh.in (limited to 'ediff.sh.in') 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 "$@" -- cgit v1.2.3