#!@bash@ # Copyright (C) 2014 Luke Shumaker # # This file is not considered part of GNU Emacs. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . 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 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 "$@"