This repository has been archived by the owner on Apr 23, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
dmenu-emacs
executable file
·60 lines (49 loc) · 1.64 KB
/
dmenu-emacs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh
# Set emacs title for wmctrl in your emacs config
# (setq-default frame-title-format "EMACS")
EMACS_TITLE="EMACS"
EMACS_DAEMON="MAIN"
get_all(){
emacs --batch --eval "(require 'server)" --eval "(mapc #'princ (read (server-eval-at \""$EMACS_DAEMON"\" '(prin1-to-string (mapcar (lambda (buffer) (format \"%s\\n\" buffer)) (buffer-list))))))" 2>/dev/null
}
get_logs(){
"get_all" | grep "^\*"
}
get_hidden(){
"get_all" | grep "^ "
}
get_magit(){
"get_all" | grep "^magit"
}
get_files(){
"get_all" | grep -v "^magit" | grep -v "^ " | grep -v "^\*"
}
case $1 in
a) MODE="all";;
f) MODE="files";;
g) MODE="magit";;
l) MODE="logs";;
o) MODE="hidden";;
*) MODE="all";;
esac
while true; do
case "$MODE" in
all) MODE_LIST="get_all";;
files) MODE_LIST="get_files";;
hidden) MODE_LIST="get_hidden";;
logs) MODE_LIST="get_logs";;
magit) MODE_LIST="get_magit";;
esac
DMENU_CHOICE=$( "$MODE_LIST" | dmenu-suite -p "$MODE" -i -c -l 30 -ex 'ctrl-a,ctrl-f,ctrl-g,ctrl-l,ctrl-o,ctrl-x')
[ -z "$DMENU_CHOICE" ] && exit 0
case "$DMENU_CHOICE" in
ctrl-a*) MODE="all";;
ctrl-f*) MODE="files";;
ctrl-l*) MODE="logs";;
ctrl-g*) MODE="magit";;
ctrl-o*) MODE="hidden";;
ctrl-x*) echo "$DMENU_CHOICE" | cut -f2 | xargs -I %% emacsclient --socket-name="$EMACS_DAEMON" -e '(kill-buffer "'"%%"'")'>/dev/null; break;;
*) emacsclient --socket-name="$EMACS_DAEMON" -e '(switch-to-buffer "'"$DMENU_CHOICE"'")'>/dev/null
wmctrl -i -a "$(wmctrl -l | grep "$EMACS_TITLE" | cut -d ' ' -f1)"; break;;
esac
done