#!@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 "$@"