diff --git a/private/my-bindings.el b/private/my-bindings.el index 415391b64..b2e47b3b1 100644 --- a/private/my-bindings.el +++ b/private/my-bindings.el @@ -4,7 +4,9 @@ ;; ... ;; Uh. Good question. -(@map +(eval-when-compile (require 'core-defuns)) + +(bind! - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Global keymaps ;; @@ -24,15 +26,16 @@ :m "M-j" "6j" :m "M-k" "6k" - :n "M-k" 'narf:eval-buffer + :n "M-r" 'narf:eval-buffer + :v "M-r" 'narf:eval-region :n "M-d" 'dash-at-point - :n "M-o" 'narf:ido-find-file - :n "M-O" 'narf:ido-find-project-file + :n "M-o" 'narf/ido-find-file + :n "M-O" 'narf/ido-find-project-file (:when IS-MAC "" 'backward-word "" 'forward-word - "" 'narf:backward-kill-to-bol-and-indent + "" 'narf/backward-kill-to-bol-and-indent "A-SPC" 'just-one-space "M-a" 'mark-whole-buffer "M-c" 'evil-yank @@ -48,91 +51,100 @@ ;; Local keymaps ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - :nmv ";" evil-ex + :nmv ";" 'evil-ex - (:leader "m" + (:prefix "," ; :n "," (λ (if (narf/project-p) (helm-projectile-switch-to-buffer) (helm-buffers-list))) :n "<" 'helm-buffers-list - :n "." 'narf:ido-find-file - :n ">" 'narf:ido-find-file-other-window + :n "." 'narf/ido-find-file + :n ">" 'narf/ido-find-file-other-window :n "/" 'helm-projectile-find-file :n ";" 'helm-semantic-or-imenu :n "]" 'helm-etags-select :n "a" 'helm-projectile-find-other-file - :n "E" 'narf::initfiles + :n "E" 'narf:ido-find-file-in-emacsd :n "h" 'helm-apropos - :n "n" 'narf::notes - :n "m" 'helm-recentf + :n "n" 'narf/ido-find-org-file + :n "N" 'narf:org-search-files-or-headers + :n "m" 'narf/ido-recentf :n "M" 'helm-projectile-recentf ; recent PROJECT files :n "p" 'helm-projectile-switch-project :n "r" 'emr-show-refactor-menu + :v "=" 'align-regexp :n "qq" 'evil-save-and-quit - :n "QQ" (λ (let ((confirm-kill-emacs nil)) (narf::kill-buffers t) (evil-quit-all))) + :n "QQ" (λ (let ((confirm-kill-emacs nil)) + (narf:kill-all-buffers t) + (save-buffers-kill-terminal))) ;; insert lines in-place) :n "jj" (λ (save-excursion (evil-insert-newline-below))) :n "kk" (λ (save-excursion (evil-insert-newline-above))) - :n "oo" 'narf:open-with - :n "ob" (λ (narf:open-with "Google Chrome")) - :n "of" (λ (narf:open-with "Finder.app" default-directory)) - :n "oF" (λ (narf:open-with "Finder.app" (narf/project-root))) - :n "ou" (λ (narf:open-with "Transmit")) - :n "oU" (λ (narf:open-with "Transmit" default-directory)) - :n "ol" (λ (narf:open-with "LaunchBar")) - :n "oL" (λ (narf:open-with "LaunchBar" default-directory)) - :n "ot" (λ (narf::tmux-chdir nil t)) - :n "oT" 'narf::tmux-chdir) + :n "oo" 'narf-open-with + :n "ob" (λ (narf-open-with "Google Chrome")) + :n "of" (λ (narf-open-with "Finder.app" default-directory)) + :n "oF" (λ (narf-open-with "Finder.app" (narf/project-root))) + :n "ou" (λ (narf-open-with "Transmit")) + :n "oU" (λ (narf-open-with "Transmit" default-directory)) + :n "ol" (λ (narf-open-with "LaunchBar")) + :n "oL" (λ (narf-open-with "LaunchBar" default-directory)) + :n "ot" (λ (narf:tmux-chdir nil t)) + :n "oT" 'narf:tmux-chdir) - (:localleader "\\" - :n "\\" 'narf:neotree-toggle - :n "." 'narf:neotree-find - :n ";" 'narf:nlinum-toggle + (:prefix "\\" ; + :n "\\" 'narf/neotree-toggle + :n "." 'narf/neotree-find + :n ";" 'narf/nlinum-toggle :n "=" 'toggle-transparency :n "E" 'evil-emacs-state :n "]" 'next-buffer :n "[" 'previous-buffer - :n "s" (λ (narf::snippets t)) ; ido snippets dir + :n "s" (λ (narf:yas-snippets t)) ; ido snippets dir :n "g" 'diff-hl-diff-goto-hunk :n "e" (λ (call-interactively 'flycheck-buffer) (flycheck-list-errors)) :n "p" 'helm-show-kill-ring :n "b" 'helm-bookmarks :n "w" 'helm-wg) - :m :remap "j" "gj" - :m :remap "k" "gk" - :n "Y" "y$" - :n "zr" 'narf:open-folds - :n "zm" 'narf:close-folds - + :n "zr" 'narf/evil-open-folds + :n "zm" 'narf/evil-close-folds :n "zx" 'narf:kill-real-buffer :n "zX" 'bury-buffer - :n "]b" 'narf:next-real-buffer - :n "[b" 'narf:previous-real-buffer + :n "]b" 'narf/next-real-buffer + :n "[b" 'narf/previous-real-buffer :n "]w" 'wg-switch-to-workgroup-right :n "[w" 'wg-switch-to-workgroup-left + :m "]g" 'diff-hl-next-hunk + :m "[g" 'diff-hl-previous-hunk + :m "]e" 'narf/flycheck-next-error + :m "[e" 'narf/flycheck-previous-error - ;; don't move cursor on indent + ;; Don't move cursor on indent :n "=" (λ (save-excursion (call-interactively 'evil-indent))) + :v "=" 'evil-indent ;; Increment/decrement number under cursor :n "g=" 'evil-numbers/inc-at-pt :n "g-" 'evil-numbers/dec-at-pt - :n "gR" 'narf::eval-buffer + :n "gR" 'narf:eval-buffer :n "gc" 'evil-commentary :n "gy" 'evil-commentary-yank + :n "gx" 'evil-exchange + :n "gr" 'narf:eval-region + :v "gR" 'narf:eval-region-and-replace + :m "gl" 'narf:goto-line + :m "gs" 'evil-ace-jump-two-chars-mode + :m "g]" 'smart-down + :m "g[" 'smart-up - ;; VISUAL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; :v "." 'evil-repeat - :v "gR" 'narf::eval-region-and-replace - :v ",=" 'align-regexp ;; vnoremap < " 'evil-delete-backward-word :i "" (λ (evil-forward-word) (evil-delete-backward-word)) - :i ;; Newline magic + ;; Newline magic :i "" 'backward-delete-char-untabify - :i "" 'narf:backward-kill-to-bol-and-indent + :i "" 'narf/backward-kill-to-bol-and-indent :i "" 'evil-ret-and-indent - :i ;; Textmate-esque indent shift left/right + ;; Textmate-esque indent shift left/right :i "M-[" "C-o m l C-o I DEL C-o ` l" :i "M-]" (λ (evil-shift-right (point-at-bol) (point-at-eol))) :i "" "M-[" ;; escape from insert mode (more responsive than using key-chord-define) :ir "j" 'narf:exit-mode-maybe + :ir "J" 'narf:exit-mode-maybe :irv "C-g" 'evil-normal-state :o "s" 'evil-surround-edit @@ -202,8 +203,18 @@ :v "!" 'rotate-region :e [escape] 'evil-normal-state + (:map evil-window-map ; prefix "C-w" + "u" 'winner-undo + "C-u" 'winner-undo + "C-r" 'winner-redo + + "C-w" 'ace-window + "C-S-w" (λ (ace-window 4)) ; swap windows + "C-C" (λ (ace-window 16))) ; delete windows + + ;; Vim omni-complete emulation :i "C-SPC" 'company-complete-common - :i "C-x C-k" 'company-dictionary + :i "C-x C-k" 'company-dict :i "C-x C-f" 'company-files :i "C-x C-]" 'company-tags :i "C-x s" 'company-ispell @@ -214,34 +225,26 @@ (call-interactively 'company-dabbrev-code) (company-select-previous-or-abort))) - (:map company-active-map - "C-o" 'company-search-kill-others - "C-n" 'company-select-next-or-abort - "C-p" 'company-select-previous-or-abort - "C-h" 'company-show-doc-buffer - "C-S-h" 'company-show-location - "C-S-s" 'company-search-candidates - "C-s" 'company-filter-candidates - "C-SPC" 'company-complete-common - [tab] 'company-complete - "" 'company-select-previous - [escape] 'company-abort - "" 'helm-company - :unset "C-w") - (:map company-search-map - "C-n" 'company-search-repeat-forward - "C-p" 'company-search-repeat-backward - [escape] 'company-abort - :unset "C-w") - - (keymap evil-window-map - "u" 'winner-undo - "C-u" 'winner-undo - "C-r" 'winner-redo - - "C-w" 'ace-window - "C-S-w" (λ (ace-window 4)) ; swap windows - "C-C" (λ (ace-window 16))) ; delete windows + (:after company + (:map company-active-map + "C-o" 'company-search-kill-others + "C-n" 'company-select-next-or-abort + "C-p" 'company-select-previous-or-abort + "C-h" 'company-show-doc-buffer + "C-S-h" 'company-show-location + "C-S-s" 'company-search-candidates + "C-s" 'company-filter-candidates + "C-SPC" 'company-complete-common + [tab] 'company-complete + "" 'company-select-previous + [escape] 'company-abort + "" 'helm-company + :unset "C-w") + (:map company-search-map + "C-n" 'company-search-repeat-forward + "C-p" 'company-search-repeat-backward + [escape] 'company-abort + :unset "C-w")) (:after help-mode (:map help-mode-map @@ -257,11 +260,7 @@ "C-a" 'move-beginning-of-line "" 'move-beginning-of-line "" 'move-beginning-of-line - "" 'evil-delete-whole-line) - - (:map evil-snipe-override-mode-map - "C-;" 'evil-snipe-repeat - "C-," 'evil-snipe-repeat-reverse)) + "" 'evil-delete-whole-line)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -273,64 +272,68 @@ ;; Restores "dumb" indentation to the tab key. This rustles a lot of ;; peoples' jimmies, apparently, but it's how I like it. -(@map :i "" 'narf:dumb-indent - :i "" 'indent-for-tab-command +(bind! :i "" 'narf/dumb-indent + :i "" 'indent-for-tab-command - ;; No dumb-tab for lisp - :i :map lisp-mode-map [remap narf:dumb-indent] 'indent-for-tab-command - :i :map emacs-lisp-mode-map [remap narf:dumb-indent] 'indent-for-tab-command + ;; No dumb-tab for lisp + :i :map lisp-mode-map [remap narf/dumb-indent] 'indent-for-tab-command + :i :map emacs-lisp-mode-map [remap narf/dumb-indent] 'indent-for-tab-command -;; Highjacks space/backspace to: -;; a) delete spaces on either side of the cursor, if present ( | ) -> (|) -;; b) allow backspace to delete space-indented blocks intelligently -;; c) and not do any of this magic when inside a string - :i "SPC" 'narf:inflate-space-maybe - :i [remap backward-delete-char-untabify] 'narf:deflate-space-maybe - :i [remap newline] 'narf:newline-and-indent + ;; Highjacks space/backspace to: + ;; a) delete spaces on either side of the cursor, if present ( | ) -> (|) + ;; b) allow backspace to delete space-indented blocks intelligently + ;; c) and not do any of this magic when inside a string + :i "SPC" 'narf/inflate-space-maybe + :i [remap backward-delete-char-untabify] 'narf/deflate-space-maybe + :i [remap newline] 'narf/newline-and-indent - ;; Smarter move-to-beginning-of-line - :i [remap move-beginning-of-line] 'narf:move-to-bol + ;; Smarter move-to-beginning-of-line + :i [remap move-beginning-of-line] 'narf/move-to-bol - ;; Restore bash-esque keymaps in insert mode; C-w and C-a already exist - :i "C-e" 'narf:move-to-eol - :i "C-u" 'narf:backward-kill-to-bol-and-indent + ;; Restore bash-esque keymaps in insert mode; C-w and C-a already exist + :i "C-e" 'narf/move-to-eol + :i "C-u" 'narf/backward-kill-to-bol-and-indent - ;; Fixes delete - :i "" 'delete-char + ;; Fixes delete + :i "" 'delete-char - ;; Fix osx keymappings and then some - :i "" 'narf:move-to-bol - :i "" 'narf:move-to-eol - :i "" 'beginning-of-buffer - :i "" 'end-of-buffer - :i "" 'smart-up - :i "" 'smart-down + ;; Fix osx keymappings and then some + :i "" 'narf/move-to-bol + :i "" 'narf/move-to-eol + :i "" 'beginning-of-buffer + :i "" 'end-of-buffer + :i "" 'smart-up + :i "" 'smart-down - ;; Fix emacs motion keys - :i "A-b" 'evil-backward-word-begin - :i "A-w" 'evil-forward-word-begin - :i "A-e" 'evil-forward-word-end + ;; Fix emacs motion keys + :i "A-b" 'evil-backward-word-begin + :i "A-w" 'evil-forward-word-begin + :i "A-e" 'evil-forward-word-end - ;; Textmate-esque insert-line before/after - :ni "" 'evil-open-below - :ni "" 'evil-open-above + ;; Textmate-esque insert-line before/after + :ni "" 'evil-open-below + :ni "" 'evil-open-above - ;; Make ESC quit all the things - :e [escape] narf/minibuffer-quit - (:map (minibuffer-local-map - minibuffer-local-ns-map - minibuffer-local-completion-map - minibuffer-local-must-match-map - minibuffer-local-isearch-map) - [escape] 'narf/minibuffer-quit) + ;; Make ESC quit all the things + :e [escape] 'narf-minibuffer-quit + (:map (minibuffer-local-map + minibuffer-local-ns-map + minibuffer-local-completion-map + minibuffer-local-must-match-map + minibuffer-local-isearch-map) + [escape] 'narf-minibuffer-quit) - :map read-expression-map "C-w" 'evil-delete-backward-word + :map read-expression-map "C-w" 'evil-delete-backward-word - ;; Line selection via linum - " " 'narf/mouse-select-line - " " 'narf/mouse-select-line - " " 'narf/mouse-select-line - " " 'narf/mouse-select-block) + ;; Line selection via linum + " " 'narf/mouse-select-line + " " 'narf/mouse-select-line + " " 'narf/mouse-select-line + " " 'narf/mouse-select-block) + +;; Disable the global drag-mouse map; clicking in new buffers often sends evil +;; into visual mode, which is UN...ACCEPTAABBLLLEEEE! +(global-unset-key (kbd "")) (provide 'my-bindings) ;;; my-bindings.el ends here