emacs.plugin.zsh 2.15 KB
Newer Older
Tristan Carel's avatar
Tristan Carel committed
1
2
# Emacs 23 daemon capability is a killing feature.
# One emacs process handles all your frames whether
Tristan Carel's avatar
Tristan Carel committed
3
# you use a frame opened in a terminal via a ssh connection or X frames
Tristan Carel's avatar
Tristan Carel committed
4
5
6
7
8
9
10
11
12
# 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.


13
if "$ZSH/tools/require_tool.sh" emacsclient 24 2>/dev/null ; then
14
15
16
17
18
    export EMACS_PLUGIN_LAUNCHER="$ZSH/plugins/emacs/emacsclient.sh"

    # set EDITOR if not already defined.
    export EDITOR="${EDITOR:-${EMACS_PLUGIN_LAUNCHER}}"

19
    alias emacs="$EMACS_PLUGIN_LAUNCHER --no-wait"
20
    alias e=emacs
soredake's avatar
soredake committed
21
22
    # open terminal emacsclient
    alias te="$EMACS_PLUGIN_LAUNCHER -nw"
23

Tristan Carel's avatar
Tristan Carel committed
24
    # same than M-x eval but from outside Emacs.
25
    alias eeval="$EMACS_PLUGIN_LAUNCHER --eval"
Tristan Carel's avatar
Tristan Carel committed
26
27
28
    # create a new X frame
    alias eframe='emacsclient --alternate-editor "" --create-frame'

29
30
31
32
33
34
35
36
37
38
    # Emacs ANSI Term tracking
    if [[ -n "$INSIDE_EMACS" ]]; then
        chpwd_emacs() { print -P "\033AnSiTc %d"; }
        print -P "\033AnSiTc %d"    # Track current working directory
        print -P "\033AnSiTu %n"    # Track username        

        # add chpwd hook
        autoload -Uz add-zsh-hook
        add-zsh-hook chpwd chpwd_emacs
    fi    
Tristan Carel's avatar
Tristan Carel committed
39

Tristan Carel's avatar
Tristan Carel committed
40
41
42
43
    # Write to standard output the path to the file
    # opened in the current buffer.
    function efile {
        local cmd="(buffer-file-name (window-buffer))"
44
        "$EMACS_PLUGIN_LAUNCHER" --eval "$cmd" | tr -d \"
Tristan Carel's avatar
Tristan Carel committed
45
46
    }

47
    # Write to standard output the directory of the file
Tristan Carel's avatar
Tristan Carel committed
48
    # opened in the the current buffer
Tristan Carel's avatar
Tristan Carel committed
49
50
    function ecd {
        local cmd="(let ((buf-name (buffer-file-name (window-buffer))))
Tristan Carel's avatar
Tristan Carel committed
51
                     (if buf-name (file-name-directory buf-name)))"
Tristan Carel's avatar
Tristan Carel committed
52

53
        local dir="$($EMACS_PLUGIN_LAUNCHER --eval $cmd | tr -d \")"
Tristan Carel's avatar
Tristan Carel committed
54
        if [ -n "$dir" ] ;then
Tristan Carel's avatar
Tristan Carel committed
55
            echo "$dir"
Tristan Carel's avatar
Tristan Carel committed
56
57
58
59
60
        else
            echo "can not deduce current buffer filename." >/dev/stderr
            return 1
        fi
    }
61
fi
Tristan Carel's avatar
Tristan Carel committed
62
63
64
65

## Local Variables:
## mode: sh
## End: