dotfiles.2022/_home/private_dot_local/bin/executable_edit-with-spacemacs

59 lines
1.4 KiB
Bash

#!/bin/bash
###
### edit-with-spacemacs, ensures a daemon named spacemacs is working
### if it's already running, the editor will open a new frame attached to it
### if it's not, it will first launch the daemon
###
MY_EMACS_PROFILE=${CHEMACS_PROFILE:-spacemacs}
MY_SILENT="/dev/null"
MY_EMACS_CREATEFRAME="--create-frame"
MY_EMACS_NO_WAIT="--no-wait"
# MY_SILENT="/dev/tty"
# MY_EMACS_NO_WAIT=""
if [ "$DISPLAY" = "" ]; then
MY_EMACS_NO_WAIT=""
fi
# set | grep '^MY_EMACS' 1>&2
function q_() { printf "'%s'\n" "${@}"; }
function myemacs_full() {
_cli="$(q_ "${@}")"
_cli="${_cli// /\\ }"
_cli=$(printf "$_cli")
# echo $_cli
_cli=$(printf "/usr/bin/emacsclient \
--socket-name=$MY_EMACS_PROFILE \
$MY_EMACS_CREATEFRAME \
$MY_EMACS_NO_WAIT \
--alternate-editor='sh -c \"( \
/usr/bin/emacs --with-profile $MY_EMACS_PROFILE --daemon \
); echo ''Daemon started'' > $MY_SILENT; ( \
/usr/bin/emacsclient \
--socket-name=$MY_EMACS_PROFILE \
$MY_EMACS_NO_WAIT \
--create-frame \
${_cli//\'/\'\'} \
)\"' \
$_cli" \
)
# set -x
#echo $_cli
2>$MY_SILENT eval $_cli
}
# FRAMES was supposed to find existing frames, but it doesn't seem to work right now
# Requires more research
#
# FRAMES=$( 2>/dev/null /usr/bin/emacsclient -n -e "(if (> (length (frame-list)) 1) 't)" | grep t )
# echo "FRAMES: {$FRAMES}" 1>&2
myemacs_full "${@}"