summaryrefslogtreecommitdiff
path: root/init/km-evil.el
blob: 0569852752c9c1b236bca42a6036c1d973c0703d (plain)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
;; evil mode uses undo-tree
(require 'undo-tree)

(require 'evil)
(evil-mode 1)
;; much of this it taken from http://permalink.gmane.org/gmane.emacs.vim-emulation/1135

;; red box in emacs mode
(setq evil-emacs-state-cursor '("red" box))

(loop for (mode . state) in '((dired-mode  . emacs)
                              (org-agenda-mode . emacs)
                              (ibuffer-mode . emacs))
      do (evil-set-initial-state mode state))

(define-key evil-motion-state-map "H" 'evil-scroll-up)
(define-key evil-motion-state-map "L" 'evil-scroll-down)

(defun km/save-and-kill-buffer ()
  "Save current buffer and then kill it"
  (interactive)
  (save-buffer)
  (kill-this-buffer)
  )

(define-key evil-normal-state-map ",w" 'save-buffer)
(define-key evil-normal-state-map ",q" 'kill-this-buffer)
(define-key evil-normal-state-map ",d" 'km/save-and-kill-buffer)
(define-key evil-normal-state-map "Q" 'fill-paragraph)

(evil-define-key 'visual emacs-lisp-mode-map
  ",e" 'eval-region)
(evil-define-key 'visual lisp-interaction-mode-map
  ",e" 'eval-region)

(evil-define-key 'normal mail-mode-map ",q" 'server-edit)
(evil-define-key 'normal mail-mode-map ",d" 'server-edit)
(define-key evil-normal-state-map ",e" 'server-edit)

(define-key evil-visual-state-map ",c" 'comment-or-uncomment-region)
(fset 'comment-this-line ;; this depends on evil bindings
      "0v$,c")
(define-key evil-normal-state-map ",c" 'comment-this-line)

(require 'key-chord)
(key-chord-mode 1)

(key-chord-define-global ",r" 'km/recentf-ido-find-file)
(key-chord-define-global ",t" 'org-capture)
;; instead of alt-x
(key-chord-define-global ",x" 'smex)
(key-chord-define-global ",f" 'find-file)
(key-chord-define-global ",g" 'magit-status)
(key-chord-define-global ",b" 'ido-switch-buffer)
(key-chord-define-global ";a" 'evil-normal-state)

;; org bindings
(defun km/always-insert-item ()
  (interactive)
  (if (not (org-in-item-p))
      (insert "\n- ")
    (org-insert-item)))

;; most from cofi config
(evil-define-key 'normal org-mode-map
  (kbd "RET") 'org-open-at-point
  "za"        'org-cycle
  "zA"        'org-shifttab
  "zm"        'hide-body
  "zr"        'show-all
  "zo"        'show-subtree
  "zO"        'show-all
  "zc"        'hide-subtree
  "zC"        'hide-all
  ",e"        'org-export-as-pdf
  ",a"        'org-archive-subtree
  ",s"        'org-todo
  "O"          (lambda ()
                 (interactive)
                 (end-of-line)
                 (org-insert-heading t)
                 (evil-append nil))
  "o"           (lambda ()
                 (interactive)
                 (end-of-line)
                 (km/always-insert-item)
                 (evil-append nil))
(kbd "M-j") 'org-shiftleft
  (kbd "M-k") 'org-shiftright
  (kbd "M-H") 'org-metaleft
  (kbd "M-J") 'org-metadown
  (kbd "M-K") 'org-metaup
  (kbd "M-L") 'org-metaright)

(evil-define-key 'normal orgstruct-mode-map
  (kbd "RET") 'org-open-at-point
  "za"        'org-cycle
  "zA"        'org-shifttab
  "zm"        'hide-body
  "zr"        'show-all
  "zo"        'show-subtree
  "zO"        'show-all
  "zc"        'hide-subtree
  "zC"        'hide-all
  (kbd "M-j") 'org-shiftleft
  (kbd "M-k") 'org-shiftright
  (kbd "M-H") 'org-metaleft
  (kbd "M-J") 'org-metadown
  (kbd "M-K") 'org-metaup
  (kbd "M-L") 'org-metaright)

(evil-define-key 'insert org-mode-map
  (kbd "M-j") 'org-shiftleft
  (kbd "M-k") 'org-shiftright
  (kbd "M-H") 'org-metaleft
  (kbd "M-J") 'org-metadown
  (kbd "M-K") 'org-metaup
  (kbd "M-L") 'org-metaright)

(evil-define-key 'insert orgstruct-mode-map
  (kbd "M-j") 'org-shiftleft
  (kbd "M-k") 'org-shiftright
  (kbd "M-H") 'org-metaleft
  (kbd "M-J") 'org-metadown
  (kbd "M-K") 'org-metaup
  (kbd "M-L") 'org-metaright)