summaryrefslogtreecommitdiff
path: root/emacsterm.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'emacsterm.sh.in')
-rw-r--r--emacsterm.sh.in93
1 files changed, 93 insertions, 0 deletions
diff --git a/emacsterm.sh.in b/emacsterm.sh.in
new file mode 100644
index 0000000..e850aad
--- /dev/null
+++ b/emacsterm.sh.in
@@ -0,0 +1,93 @@
+#!@bash@
+
+# Copyright (C) 2011, 2013-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] [--] [PROGRAM [ARGS...]]" "$0"
+ print 'Use Emacs as a terminal emulator'
+ echo
+ print \
+'If ARGS contains anything beginning with "-", then you will need to put
+"--" before PROGRAM so that it does not get treated as part of OPTIONS.'
+ echo
+ print 'If PROGRAM is not given, the default is "${SHELL:-/bin/sh}".'
+ echo
+ print 'The following OPTIONS are accepted:'
+ emacs_usage
+ flag "-T $(_ FUNCTION)" 'Use Emacs Lisp FUNCTION instead of "term"'
+}
+
+
+main() {
+ declare -a flags=()
+ declare fn=term
+ declare -a prog=("${SHELL:-/bin/sh}")
+ declare mode=normal
+
+ emacs_getopt_init
+ declare args
+ if ! args="$(emacs_getopt T: '' "$@")"; then
+ mode=error
+ else
+ eval set -- "$args"
+ while true; do
+ case "$1" in
+ -V|--version) shift; mode=version;;
+ -H|--help) shift; mode=usage;;
+ -T) fn="$2"; shift 2;;
+ --) shift; break;;
+ *)
+ if [[ $1 =~ $emacs_getopt_2 ]]; then
+ flags+=("$1" "$2"); shift 2
+ else
+ flags+=("$1"); shift 1
+ fi
+ ;;
+ esac
+ done
+ if [[ $# -gt 0 ]]; then
+ prog=("$@")
+ fi
+ fi
+
+ next "$mode" \
+ emacsclient "${flags[@]}" --eval \
+ "($fn $(emacs_quote "$(args2program "${prog[@]}")"))"
+}
+
+args2program() {
+ local program
+ if [ $# = 1 ]; then
+ program="$1"
+ else
+ program="$(mktemp -t -- "${0##*/}.XXXXXXXXXX")"
+ {
+ echo '#!@bash@'
+ echo '{'
+ echo 'rm -f -- "$0"'
+ printf '%q ' exec -- "$@"
+ echo '}'
+ } > "$program"
+ chmod 755 "$program"
+ fi
+ printf '%s\n' "$program"
+}
+
+main "$@"