From 07301d29bf0c4332b5c5c9a6c91ffe8b6195468c Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 23 Dec 2015 02:40:41 -0500 Subject: [PATCH] General cleanup + evil fixes --- core/core-editor.el | 100 ++++++++++++++++++++++++-------------------- core/core-evil.el | 40 +++++++++++------- 2 files changed, 79 insertions(+), 61 deletions(-) diff --git a/core/core-editor.el b/core/core-editor.el index 98960bec1..7744891c3 100644 --- a/core/core-editor.el +++ b/core/core-editor.el @@ -25,7 +25,7 @@ shift-select-mode t tabify-regexp "^\t* [ \t]+" - whitespace-style '(face tabs tab-mark) + whitespace-style '(face tabs tab-mark trailing newline indentation newline-mark) whitespace-display-mappings '((tab-mark ?\t [?> ?\t]) (newline-mark 10 [36 10]))) @@ -65,8 +65,6 @@ enable multiple minor modes for the same regexp.") ;; Modes 'n hooks ;;;;;;;;;;;;;;;;;;; - -(associate! sh-mode :match "/\\.?z\\(sh/?\\|profile\\|login\\|logout\\|shrc\\|shenv\\)$") (associate! applescript-mode :match "\\.applescript$") (associate! emacs-lisp-mode :match "\\(/Cask\\|\\.\\(el\\|gz\\)\\)$") (associate! makefile-gmake-mode :match "/Makefile$") @@ -104,8 +102,8 @@ enable multiple minor modes for the same regexp.") ;; (global-whitespace-mode 1) ; Show whitespace ;; (global-font-lock-mode t) ; Enable syntax highlighting for older emacs -(global-auto-revert-mode 1) ; revert buffers for changed files (electric-indent-mode -1) ; on by default +(global-auto-revert-mode 1) ; revert buffers for changed files ;; window config undo/redo (setq winner-dont-bind-my-keys t) @@ -118,8 +116,6 @@ enable multiple minor modes for the same regexp.") (use-package undo-tree :config - (defalias 'redo #'undo-tree-redo) - (defalias 'undo #'undo-tree-undo) ;; http://youtu.be/Z6woIRLnbmE (defadvice undo-tree-load-history-hook (around undo-tree-load-history-shut-up activate) @@ -158,64 +154,78 @@ enable multiple minor modes for the same regexp.") :config (setq sp-autowrap-region nil ; let evil-surround handle this sp-highlight-pair-overlay nil - sp-cancel-autoskip-on-backward-movement t + sp-cancel-autoskip-on-backward-movement nil sp-show-pair-delay 0) (smartparens-global-mode 1) (require 'smartparens-config) - ;; Handle newlines + spaces + ;; Smartparens interferes with Replace mode + (add-hook 'evil-replace-state-entry-hook 'turn-off-smartparens-mode) + (add-hook 'evil-replace-state-exit-hook 'turn-on-smartparens-mode) + + ;; Auto-close more conservatively (sp-pair "{" "}" :post-handlers '(("||\n[i]" "RET") ("| " " ")) :unless '(sp-point-before-word-p sp-point-before-same-p)) (sp-pair "(" ")" :post-handlers '(("||\n[i]" "RET") ("| " " ")) :unless '(sp-point-before-word-p sp-point-before-same-p)) + (sp-pair "[" "]" :post-handlers '(("| " " ")) + :unless '(sp-point-before-word-p sp-point-before-same-p)) - ;; Auto-close more conservatively - (sp-pair "[" nil :unless '(sp-point-before-word-p sp-point-before-same-p)) - (sp-pair "'" nil :unless '(sp-point-after-word-p sp-point-before-word-p sp-point-before-same-p)) - (sp-pair "\"" nil :unless '(sp-point-after-word-p sp-point-before-word-p sp-point-before-same-p)) - (sp-local-pair 'markdown-mode "```" "```" :post-handlers '(("||\n[i]" "RET"))) - (sp-with-modes '(enh-ruby-mode python-mode shell-script-mode markdown-mode org-mode) - (sp-local-pair "`" nil :unless '(sp-point-after-word-p sp-point-before-word-p sp-point-before-same-p))) - (sp-with-modes '(json-mode js2-mode ruby-mode enh-ruby-mode python-mode) - (sp-local-pair "[" nil :post-handlers '(("||\n[i]" "RET")))) - (sp-with-modes '(c-mode c++-mode objc-mode java-mode scss-mode css-mode php-mode) - (sp-local-pair "/* " " */" :post-handlers '(("||\n[i]" "RET"))) - (sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET")))) - (sp-with-modes '(c-mode c++-mode objc-mode java-mode) ; Support for generics + ;; Support for generics/templates + (sp-with-modes '(c-mode c++-mode objc-mode java-mode) (sp-local-pair "<" ">" :when '(sp-point-after-word-p) :unless '(sp-point-before-same-p))) - (sp-with-modes '(objc-mode scss-mode css-mode) - (sp-local-pair "/*\n" "\n */" :post-handlers '(("||[i]" "RET")))) - (sp-with-modes '(c-mode c++-mode php-mode java-mode) - (sp-local-pair "/*" "" :post-handlers '((" ||\n[i]*/" "RET")))) + + (sp-local-pair '(sh-mode markdown-mode) "`" "`" :unless '(sp-point-before-word-p sp-point-before-same-p)) + (sp-local-pair 'markdown-mode "```" "```" :post-handlers '(("||\n[i]" "RET")) :unless '(sp-point-before-word-p sp-point-before-same-p)) + + (sp-local-pair '(scss-mode css-mode) "/*" "*/" :post-handlers '(("[d-3]||\n[i]" "RET") ("| " "SPC"))) + + (defun sp-insert-yasnippet (id action context) + (forward-char -1) + (if (sp-point-after-bol-p id action context) + (yas-expand-from-trigger-key) + (forward-char))) + + (sp-with-modes '(sh-mode) + (sp-local-pair "case" "" :when '(("SPC")) :post-handlers '((:add sp-insert-yasnippet)) :actions '(insert)) + (sp-local-pair "if" "" :when '(("SPC")) :post-handlers '((:add sp-insert-yasnippet)) :actions '(insert)) + (sp-local-pair "for" "" :when '(("SPC")) :post-handlers '((:add sp-insert-yasnippet)) :actions '(insert)) + (sp-local-pair "elif" "" :when '(("SPC")) :post-handlers '((:add sp-insert-yasnippet)) :actions '(insert)) + (sp-local-pair "while" "" :when '(("SPC")) :post-handlers '((:add sp-insert-yasnippet)) :actions '(insert))) + + (sp-with-modes '(c-mode c++-mode objc-mode php-mode java-mode) + (sp-local-pair "/*" "" :post-handlers '(("||\n[i]*/" "RET") ("| */" "SPC"))) + + ;; Doxygen blocks + (sp-local-pair "/**" "*/" :post-handlers '(("||\n[i]" "RET") ("||\n[i]" "SPC"))) + (sp-local-pair "/*!" "*/" :post-handlers '(("||\n[i]" "RET") ("[d-1]< | " "SPC")))) + (sp-with-modes '(org-mode) - (sp-local-pair "\\[" "\\]") - (sp-local-pair "\\(" "\\)") - (sp-local-pair "$$" "$$") + (sp-local-pair "\\[" "\\]" :post-handlers '(("| " "SPC"))) + (sp-local-pair "\\(" "\\)" :post-handlers '(("| " "SPC"))) + (sp-local-pair "$$" "$$" :post-handlers '((:add " | "))) (sp-local-pair "{" nil)) - (after! yasnippet - (advice-add 'yas-expand :before 'sp-remove-active-pair-overlay)) + ;; Markup languages + (sp-with-modes '(xml-mode nxml-mode php-mode) + (sp-local-pair "" :post-handlers '(("| " "SPC")))) + (sp-with-modes '(web-mode php-mode) + (sp-local-pair "" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))) + (sp-local-pair "" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))) + (sp-with-modes '(web-mode) + (sp-local-pair "{{!--" "--}}" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))) + (sp-local-pair "<%" "%>" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))) + (sp-local-pair "{!!" "!!}" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))) + (sp-local-pair "{#" "#}" :post-handlers '(("||\n[i]" "RET") ("| " "SPC")))) - (after! web-mode - (add-hook! web-mode (setq web-mode-enable-auto-pairing nil)) - (defun sp-web-mode-is-code-context (id action context) - (when (and (eq action 'insert) - (not (or (get-text-property (point) 'part-side) - (get-text-property (point) 'block-side)))) - t)) - (sp-local-pair 'web-mode "<" nil :when '(sp-web-mode-is-code-context)))) + ;; (after! yasnippet + ;; (advice-add 'yas-expand :before 'sp-remove-active-pair-overlay)) + ) (use-package help-fns+ ; Improved help commands :commands (describe-buffer describe-command describe-file describe-keymap describe-option describe-option-of-type)) -(use-package guide-key - :config - (setq guide-key/guide-key-sequence '("," "\\") - guide-key/recursive-key-sequence-flag t - guide-key/popup-window-position 'bottom) - (guide-key-mode 1)) ; Enable guide-key-mode - (provide 'core-editor) ;;; core-editor.el ends here diff --git a/core/core-evil.el b/core/core-evil.el index 2ad761907..30c518234 100644 --- a/core/core-evil.el +++ b/core/core-evil.el @@ -28,6 +28,11 @@ evil-ex-interactive-search-highlight 'selected-window evil-echo-state nil evil-ex-substitute-global t + evil-insert-skip-empty-lines t + + ;; NOTE: a bug in emacs is causing problems for undoing in evil when + ;; `evil-want-fine-undo' is nil or t, so for now it's set to 'fine + evil-want-fine-undo 'fine evil-normal-state-tag "N" evil-insert-state-tag "I" @@ -52,18 +57,21 @@ (evil-define-key 'normal evil-command-window-mode-map [escape] 'kill-buffer-and-window) ;; modes to map to different default states - (dolist (mode-map '((cider-repl-mode . emacs) - (comint-mode . emacs) - (term-mode . emacs) - (Info-mode . emacs) - (view-mode . emacs) - (help-mode . normal) - (message-mode . normal) - (compilation-mode . normal) - (calendar-mode . emacs) - (Man-mode . emacs) - (grep-mode . emacs) - (image-mode . normal) + (dolist (mode-map '((compilation-mode . normal) + (help-mode . normal) + (message-mode . normal) + (debugger-mode . normal) + (profile-report-mode . emacs) + + (Info-mode . emacs) + (view-mode . emacs) + (comint-mode . emacs) + (cider-repl-mode . emacs) + (term-mode . emacs) + (calendar-mode . emacs) + (Man-mode . emacs) + (grep-mode . emacs) + (image-mode . normal) )) (evil-set-initial-state `,(car mode-map) `,(cdr mode-map))) @@ -89,12 +97,12 @@ (progn ; evil hacks (defadvice evil-force-normal-state (after evil-esc-quit activate) "Close popups, disable search highlights and quit the minibuffer if open." - (unless (bound-and-true-p org-src-mode) - (narf/popup-close)) + (when (minibuffer-window-active-p (minibuffer-window)) + (narf-minibuffer-quit)) (ignore-errors (evil-ex-nohighlight)) - (when (minibuffer-window-active-p (minibuffer-window)) - (narf-minibuffer-quit))) + (unless (bound-and-true-p org-src-mode) + (narf/popup-close))) ;; Monkey-patch an error triggered randomly during column-selection caused ;; by `evil-move-to-column' receiving a float: