Created
August 8, 2022 08:16
-
-
Save tshu-w/b7c05626c5849d64a04ac66d623c2559 to your computer and use it in GitHub Desktop.
EmacsClient.app on macOS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# This script starts emacs daemon if it is not running, opens whatever file | |
# you pass in and changes the focus to emacs. Without any arguments, it just | |
# opens the current buffer or *scratch* if nothing else is open. The following | |
# example will open ~/.bashrc | |
# ec ~/.bashrc | |
# You can also pass it multiple files, it will open them all. Unbury-buffer | |
# will cycle through those files in order | |
# The compliment to the script is et, which opens emacs in the terminal | |
# attached to a daemon | |
# If you want to execute elisp, pass in -e whatever. | |
# You may also want to stop the output from returning to the terminal, like | |
# ec -e "(message \"Hello\")" > /dev/null | |
# emacsclient options for reference | |
# -a "" starts emacs daemon and reattaches | |
# -c creates a new frame | |
# -n returns control back to the terminal | |
# -e eval the script | |
# Number of current visible frames, | |
# Emacs daemon always has a visible frame called F1 | |
visible_frames() { | |
emacsclient -a "" -e '(length (visible-frame-list))' | |
} | |
change_focus() { | |
emacsclient -n -e "(select-frame-set-input-focus (selected-frame))" > /dev/null | |
} | |
# Preferred edit file at local emacs via tramp | |
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then | |
[ -z $hostname ] && export hostname=`cat $XDG_CACHE_HOME/hostname` | |
for arg in "$@"; do | |
[[ "$arg" != -* ]] && set -- "$@" /sshx:"$hostname":$(readlink -f -- "$arg") || set -- "$@" "$arg" | |
shift | |
done | |
fi | |
# Don't change focus with --help | |
if [ "$1" = "--help" ]; then | |
emacsclient --help | |
exit 0 | |
fi | |
# try switching to the frame incase it is just minimized | |
# will start a server if not running | |
test "$(visible_frames)" -eq "1" && change_focus | |
if [ "$(visible_frames)" -lt "1" ]; then # need to create a frame | |
# -c $@ with no args just opens the scratch buffer | |
emacsclient -n -c "$@" && change_focus | |
else # there is already a visible frame besides the daemon, so | |
change_focus | |
# -n $@ errors if there are no args | |
test "$#" -eq "0" || emacsclient -n "$@" | |
fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on open location address | |
if {address starts with "org-protocol"} then | |
do shell script "zsh -c 'ec \"" & address & "\"'" | |
else | |
do shell script "zsh -c 'ec --eval '\"'\"'(browse-url \"" & address & "\")'\"'\"''" | |
end if | |
end open location | |
on open filenames | |
set args to "" | |
repeat with f in filenames | |
set args to args & space & (quoted form of POSIX path of f) | |
end repeat | |
do shell script "zsh -c \"ec" & args & "\"" | |
end open | |
do shell script "zsh -c 'ec'" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment