git.fiddlerwoaroof.com
Raw Blame History
(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)