55 lines
1.8 KiB
Bash
55 lines
1.8 KiB
Bash
#! /usr/bin/env bash
|
|
|
|
# For some details on how this code got to be:
|
|
# https://emacs.stackexchange.com/a/72377/38372
|
|
|
|
###
|
|
### edit-with-spacemacs, ensures a daemon named spacemacs is working
|
|
### if it's not running, it will launch the daemon
|
|
### Then it will check if a frame already exists, if it does, it will
|
|
### open the file in that frame.
|
|
### If a frame doesn't exist, a new frame will open.
|
|
### Note that if that frame is in another virtual desktop, you will
|
|
### need to manually switch there.
|
|
###
|
|
|
|
MY_EMACS_PROFILE=${CHEMACS_PROFILE:-spacemacs}
|
|
MY_SILENT=${MY_SILENT:-"/dev/null"}
|
|
MY_EMACS_CREATEFRAME="--create-frame"
|
|
MY_EMACS_NO_WAIT="--no-wait"
|
|
DEBUG_MY_EMACS=${DEBUG_MY_EMACS}
|
|
_cli="/usr/bin/emacsclient --socket-name=$MY_EMACS_PROFILE "
|
|
|
|
# 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 prep_path() {
|
|
local _cli_path="$(q_ "${@}")"
|
|
_cli_path="${_cli_path// /\\ }"
|
|
_cli_path=$(printf "$_cli_path")
|
|
|
|
printf $_cli_path
|
|
}
|
|
|
|
2>$MY_SILENT $_cli --eval '(+ 1 0)' > /dev/null || {
|
|
echo "Starting server..."
|
|
2>$MY_SILENT /usr/bin/emacs --bg-daemon=$MY_EMACS_PROFILE -- --with-profile=spacemacs
|
|
}
|
|
# At this point the server should be up and running, and so now we just
|
|
# need to see if we have any frames open
|
|
# If there are frames, we are NOT going to create a new frame, and so
|
|
# MY_EMACS_CREATEFRAME will be set to blank.
|
|
[ "$($_cli --eval '(> (length (frame-list)) 1)')" == "t" ] && MY_EMACS_CREATEFRAME=''
|
|
|
|
client_args=$(prep_path "${@}")
|
|
[ "$client_args" == "''" ] && client_args='--eval "(select-frame-set-input-focus (selected-frame)) (make-frame-visible (selected-frame)) (raise-frame)"'
|
|
eval "$_cli $MY_EMACS_CREATEFRAME $MY_EMACS_NO_WAIT $client_args"
|