#!@bash@ # Copyright (C) 2011, 2013-2014, 2016 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.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 "$@"