(defun fwoar:wrap-with-doublequote (&optional arg) (interactive "P") (sp-wrap-with-pair "\"")) (defun fwoar:wrap-in-dollar-brace (&optional arg) (interactive "P") (sp-wrap-with-pair "${")) (defun fwoar-delete-mru-window () (interactive) (delete-window (get-mru-window nil nil t))) (use-package undo-fu :ensure t) (use-package evil :ensure t :after undo-fu :init (setf evil-want-keybinding nil evil-want-integration t) ;; This is optional since it's already set to t by default. :custom (evil-undo-system 'undo-fu) :config (evil-define-key 'motion 'global (kbd "TAB") nil) (evil-define-key 'motion 'global (kbd "C-w C-o") 'fwoar-delete-mru-window) (evil-define-key 'motion 'global (kbd "C-w C-w") 'evil-window-mru) (evil-define-key 'normal 'global (kbd "ZZ") 'save-buffer) (advice-add 'evil-delete-marks :after (lambda (&rest args) (evil-visual-mark-render))) (evil-define-key 'insert 'global (kbd "TAB") 'company-indent-or-complete-common) (evil-mode) (evil-set-leader '(normal visual) (kbd "<SPC>")) (progn ;; navigation (evil-define-key 'normal 'global (kbd "<leader>f") 'fwoar::browse-project) (evil-define-key 'normal 'global (kbd "<leader>;") 'helm-semantic-or-imenu) (evil-define-key 'normal 'global (kbd "<leader>j") 'helm-buffers-list)) (progn ;; completion (evil-define-key 'normal company-mode-map (kbd "TAB") 'company-indent-or-complete-common) (evil-define-key 'insert company-mode-map (kbd "TAB") 'company-indent-or-complete-common)) (evil-define-key 'normal 'global (kbd "<leader>a") 'magit) (progn ;; error jumping (evil-define-key 'motion 'global (kbd "]e") 'flycheck-next-error) (evil-define-key 'motion 'global (kbd "[e") 'flycheck-previous-error)) ;; make evil keybindings apply right away when I open a new buffer (add-hook 'window-configuration-change-hook 'evil-normalize-keymaps)) (use-package evil-surround :ensure t :after evil :config (global-evil-surround-mode)) (define-keymap :prefix 'fwoar:smartparens-map ;; wrapping "W" #'sp-wrap-round "C-W" #'sp-wrap-round "w" (define-keymap :prefix 'fwoar:smartparens-wrap-map "(" #'sp-wrap-round ")" #'sp-wrap-round "{" #'sp-wrap-curly "}" #'sp-wrap-curly "[" #'sp-wrap-square "]" #'sp-wrap-square "\"" #'fwoar:wrap-with-doublequote "$" #'fwoar:wrap-in-dollar-brace) ;; narrowing "n" (define-keymap :prefix 'fwoar:smartparens-narrow-map "(" #'sp-narrow-to-sexp ")" #'sp-narrow-to-sexp "d" #'narrow-to-defun "n" #'narrow-to-defun "r" #'narrow-to-region "w" #'widen) ;; splicing "S" #'sp-splice-sexp "A" #'sp-splice-sexp-killing-backward "D" #'sp-splice-sexp-killing-forward "F" #'sp-splice-sexp-killing-around ;; paren manipulation "," #'sp-backward-barf-sexp "." #'sp-forward-barf-sexp "<" #'sp-backward-slurp-sexp ">" #'sp-forward-slurp-sexp ;; misc "~" 'sp-convolute-sexp "a" 'sp-absorb-sexp "e" 'sp-emit-sexp "`" 'sp-clone-sexp "J" 'sp-join-sexp "|" 'sp-split-sexp) (use-package evil-smartparens :ensure t :delight :after evil smartparens :config (evil-smartparens-mode 1) (define-key global-map (kbd "C-,") 'fwoar:smartparens-map) (evil-define-key 'normal 'global (kbd ",") 'fwoar:smartparens-map)) (defun fwoar/setup-evil-collection-for-mode (mode) (evil-collection-require mode) (lexical-let ((mode mode)) (with-eval-after-load mode (funcall (intern (format "evil-collection-%s-setup" mode)))))) (use-package evil-collection :ensure t :after evil :config (fwoar/setup-evil-collection-for-mode 'eshell) (fwoar/setup-evil-collection-for-mode 'deadgrep) (fwoar/setup-evil-collection-for-mode 'company) ;;;; Bad idea, messes with bindings too much :) ;; (fwoar/setup-evil-collection-for-mode 'magit) (fwoar/setup-evil-collection-for-mode 'org) (fwoar/setup-evil-collection-for-mode 'xref) ) (defun setup-special-mode () (comment (company-mode -1))) (add-hook 'special-mode-hook 'setup-special-mode)