summaryrefslogtreecommitdiff
path: root/ediff.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'ediff.sh.in')
-rw-r--r--ediff.sh.in73
1 files changed, 73 insertions, 0 deletions
diff --git a/ediff.sh.in b/ediff.sh.in
new file mode 100644
index 0000000..569721e
--- /dev/null
+++ b/ediff.sh.in
@@ -0,0 +1,73 @@
+#!@bash@
+
+# Copyright (C) 2014, 2016 Luke Shumaker <lukeshu@sbcglobal.net>
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+m4_include(common.sh.in)
+
+usage() {
+ print 'Usage: %q [OPTIONS] FILE_A FILE_B' "$0"
+ print ' or: %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 cmd=ediff
+ declare mode=normal
+
+ emacs_getopt_init
+ declare args
+ if ! args="$(emacs_getopt 3r recursive "$@")"; then
+ mode=error
+ else
+ 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} ]] || mode=error
+ fi
+ fi
+
+ next "$mode" \
+ emacsclient "${flags[@]}" --eval \
+ "(${cmd}${cnt#2} $(emacs_quote "${files[@]}"))"
+}
+
+main "$@"