#!/usr/bin/env bash export LC_CTYPE=zh_CN.UTF-8 # 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 } if [[ $(uname) == Darwin ]]; then # 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 "2" ]; 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 "$#" -ne "0" && emacsclient -n "$@" fi else emacsclient -a "" -n -c "$@" fi