#!/bin/bash force_tty=false force_wait=false stdin_mode="" args=() while :; do case "$1" in -t | -nw | --tty) force_tty=true shift ;; -w | --wait) force_wait=true shift ;; -m | --mode) stdin_mode=" ($2-mode)" shift 2 ;; -h | --help) echo -e "\033[1mUsage: e [-t] [-m MODE] [OPTIONS] FILE [-]\033[0m Emacs client convenience wrapper. \033[1mOptions:\033[0m \033[0;34m-h, --help\033[0m Show this message \033[0;34m-t, -nw, --tty\033[0m Force terminal mode \033[0;34m-w, --wait\033[0m Don't supply \033[0;34m--no-wait\033[0m to graphical emacsclient \033[0;34m-\033[0m Take \033[0;33mstdin\033[0m (when last argument) \033[0;34m-m MODE, --mode MODE\033[0m Mode to open \033[0;33mstdin\033[0m with Run \033[0;32memacsclient --help\033[0m to see help for the emacsclient." exit 0 ;; --*=*) set -- "$@" "${1%%=*}" "${1#*=}" shift ;; *) if [ "$#" = 0 ]; then break; fi args+=("$1") shift ;; esac done if [ ! "${#args[*]}" = 0 ] && [ "${args[-1]}" = "-" ]; then unset 'args[-1]' TMP="$(mktemp /tmp/emacsstdin-XXX)" cat > "$TMP" args+=(--eval "(let ((b (generate-new-buffer \"*stdin*\"))) (switch-to-buffer b) (insert-file-contents \"$TMP\") (delete-file \"$TMP\")${stdin_mode})") fi if [ -z "$DISPLAY" ] || $force_tty; then if [ "$TERM" = "st-256color" ]; then TERM=xterm-256color emacsclient --tty -create-frame --alternate-editor="nvim" "${args[@]}" else emacsclient --tty -create-frame --alternate-editor="nvim" "${args[@]}" fi else if ! $force_wait; then args+=(--no-wait); fi emacsclient -create-frame --alternate-editor="nvim" "${args[@]}" fi