forked from purcell/emacs.d
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinit-lisp.el
107 lines (77 loc) · 3.74 KB
/
init-lisp.el
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
(autoload 'turn-on-pretty-mode "pretty-mode")
;; ----------------------------------------------------------------------------
;; Paredit
;; ----------------------------------------------------------------------------
(autoload 'enable-paredit-mode "paredit")
(defun maybe-map-paredit-newline ()
(unless (or (eq major-mode 'inferior-emacs-lisp-mode) (minibufferp))
(local-set-key (kbd "RET") 'paredit-newline)))
(add-hook 'paredit-mode-hook 'maybe-map-paredit-newline)
(eval-after-load "paredit"
'(progn
;; These are handy everywhere, not just in lisp modes
(global-set-key (kbd "M-(") 'paredit-wrap-round)
(global-set-key (kbd "M-[") 'paredit-wrap-square)
(global-set-key (kbd "M-{") 'paredit-wrap-curly)
(global-set-key (kbd "M-)") 'paredit-close-round-and-newline)
(global-set-key (kbd "M-]") 'paredit-close-square-and-newline)
(global-set-key (kbd "M-}") 'paredit-close-curly-and-newline)
(dolist (binding (list (kbd "C-<left>") (kbd "C-<right>")
(kbd "C-M-<left>") (kbd "C-M-<right>")))
(define-key paredit-mode-map binding nil))
;; Disable kill-sentence, which is easily confused with the kill-sexp
;; binding, but doesn't preserve sexp structure
(define-key paredit-mode-map [remap kill-sentence] nil)
(define-key paredit-mode-map [remap backward-kill-sentence] nil)))
;; Compatibility with other modes
(defadvice enable-paredit-mode (before disable-autopair activate)
(setq autopair-dont-activate t)
(autopair-mode -1))
(suspend-mode-during-cua-rect-selection 'paredit-mode)
;; Use paredit in the minibuffer
(add-hook 'minibuffer-setup-hook 'conditionally-enable-paredit-mode)
(defvar paredit-minibuffer-commands '(eval-expression
pp-eval-expression
eval-expression-with-eldoc)
"Interactive commands for which paredit should be enabled in the minibuffer.")
(defun conditionally-enable-paredit-mode ()
"Enable paredit during lisp-related minibuffer commands."
(if (memq this-command paredit-minibuffer-commands)
(enable-paredit-mode)))
;; ----------------------------------------------------------------------------
;; Highlight current sexp
;; ----------------------------------------------------------------------------
;; Prevent flickery behaviour due to hl-sexp-mode unhighlighting before each command
(eval-after-load "hl-sexp"
'(defadvice hl-sexp-mode (after unflicker (turn-on) activate)
(when turn-on
(remove-hook 'pre-command-hook #'hl-sexp-unhighlight))))
;; ----------------------------------------------------------------------------
;; Enable desired features for all lisp modes
;; ----------------------------------------------------------------------------
(defun smp-lisp-setup ()
"Enable features useful in any lisp mode."
;; (enable-paredit-mode)
;; (hl-sexp-mode t)
(turn-on-eldoc-mode)
(turn-on-pretty-mode))
(defun smp-emacs-lisp-setup ()
"Enable features useful when working with elisp."
(require 'elisp-slime-nav)
;; (elisp-slime-nav-mode t)
;; (set-up-hippie-expand-for-elisp)
(ac-emacs-lisp-mode-setup)
(checkdoc-minor-mode))
(let* ((elispy-hooks '(emacs-lisp-mode-hook
ielm-mode-hook))
(lispy-hooks (append elispy-hooks '(lisp-mode-hook
inferior-lisp-mode-hook
lisp-interaction-mode-hook))))
(dolist (hook lispy-hooks)
(add-hook hook 'smp-lisp-setup))
(dolist (hook elispy-hooks)
(add-hook hook 'smp-emacs-lisp-setup)))
(require 'eldoc-eval)
(add-to-list 'auto-mode-alist '("\\.emacs-project$" . emacs-lisp-mode))
(define-key emacs-lisp-mode-map (kbd "C-x C-a") 'pp-macroexpand-last-sexp)
(provide 'init-lisp)