summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/emacs/emacs.plugin.zsh52
-rwxr-xr-xplugins/emacs/emacsclient.sh11
2 files changed, 63 insertions, 0 deletions
diff --git a/plugins/emacs/emacs.plugin.zsh b/plugins/emacs/emacs.plugin.zsh
new file mode 100644
index 000000000..e22f10740
--- /dev/null
+++ b/plugins/emacs/emacs.plugin.zsh
@@ -0,0 +1,52 @@
+# Emacs 23 daemon capability is a killing feature.
+# One emacs process handles all your frames whether
+# you use a frame opened in a terminal via a ssh connection or X frames
+# opened on the same host.
+
+# Benefits are multiple
+# - You don't have the cost of starting Emacs all the time anymore
+# - Opening a file is as fast as Emacs does not have anything else to do.
+# - You can share opened buffered across opened frames.
+# - Configuration changes made at runtime are applied to all frames.
+
+
+if "$ZSH/tools/require_tool.sh" emacs 23 2>/dev/null ; then
+ export EDITOR="$ZSH/plugins/emacs/emacsclient.sh"
+ alias emacs="$EDITOR --no-wait"
+ alias e=emacs
+
+ # same than M-x eval but from outside Emacs.
+ alias eeval="$EDITOR --eval"
+ # create a new X frame
+ alias eframe='emacsclient --alternate-editor "" --create-frame'
+
+ # to code all night long
+ alias emasc=emacs
+ alias emcas=emacs
+
+ # Write to standard output the path to the file
+ # opened in the current buffer.
+ function efile {
+ local cmd="(buffer-file-name (window-buffer))"
+ $EDITOR --eval "$cmd" | tr -d \"
+ }
+
+ # Write to standard output the directory of the file
+ # opened in the the current buffer
+ function ecd {
+ local cmd="(let ((buf-name (buffer-file-name (window-buffer))))
+ (if buf-name (file-name-directory buf-name)))"
+
+ local dir="$($EDITOR --eval $cmd | tr -d \")"
+ if [ -n "$dir" ] ;then
+ echo "$dir"
+ else
+ echo "can not deduce current buffer filename." >/dev/stderr
+ return 1
+ fi
+ }
+fi
+
+## Local Variables:
+## mode: sh
+## End:
diff --git a/plugins/emacs/emacsclient.sh b/plugins/emacs/emacsclient.sh
new file mode 100755
index 000000000..7fc2ad202
--- /dev/null
+++ b/plugins/emacs/emacsclient.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Starts emacs daemon if not already started.
+
+x=`emacsclient --alternate-editor '' --eval '(x-display-list)' 2>/dev/null`
+if [ -z "$x" ] ;then
+ emacsclient --alternate-editor "" --create-frame "$@"
+else
+ # prevent creating another X frame if there is at least one present.
+ emacsclient --alternate-editor "" "$@"
+fi