|
@@ -0,0 +1,52 @@
|
|
|
+#!/bin/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
|
|
|
+}
|
|
|
+
|
|
|
+# with macport of emacs, this has issues.
|
|
|
+# https://github.com/railwaycat/emacs-mac-port/issues/49
|
|
|
+#Let's just open one and then start the server
|
|
|
+#open -a Emacs.app
|
|
|
+
|
|
|
+# 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
|