kkk-evil.el 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. ;; kkk-evil.el --- Evil config -*- lexical-binding: t; -*-
  2. ;; Copyright (C) 2023 Vinicius Teshima <vini.tes@pm.me>
  3. ;; Author: Vinicius Teshima <vini.tes@pm.me>
  4. ;; This program is free software; you can redistribute it and/or modify
  5. ;; it under the terms of the GNU General Public License as published by
  6. ;; the Free Software Foundation, either version 3 of the License, or
  7. ;; (at your option) any later version.
  8. ;; This program is distributed in the hope that it will be useful,
  9. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. ;; GNU General Public License for more details.
  12. ;; You should have received a copy of the GNU General Public License
  13. ;; along with this program. If not, see <https://www.gnu.org/licenses/>.
  14. ;;; Commentary:
  15. ;; Evil Config
  16. ;;; Code:
  17. (defun kkk-evil--yank-pop ()
  18. "A wrapper on `yank-pop' because evil fucks with it."
  19. (interactive)
  20. (yank-pop))
  21. (use-package evil
  22. :demand t
  23. :functions (evil-mode evil-set-initial-state evil-define-key
  24. evil-beginning-of-line evil-end-of-line evil-normal-state)
  25. :defines (evil-want-integration evil-want-keybinding evil-want-Y-yank-to-eol
  26. evil-want-C-d-scroll evil-move-beyond-eol evil-split-window-below
  27. evil-vsplit-window-below evil-want-fine-undo evil-want-C-i-jump
  28. evil-emacs-state-modes)
  29. :init
  30. (setq evil-want-integration t
  31. evil-want-Y-yank-to-eol t
  32. evil-want-keybinding nil)
  33. (evil-mode t)
  34. :config
  35. (dolist (mode '(custom-mode eshell-mode vterm-mode dired-mode
  36. notmuch-search-mode notmuch-hello-mode xref--xref-buffer-mode
  37. notmuch-show-mode term-mode Info-mode))
  38. (add-to-list 'evil-emacs-state-modes mode))
  39. (setq evil-move-beyond-eol t
  40. evil-want-fine-undo t)
  41. (evil-set-initial-state 'messages-buffer-mode 'normal)
  42. (evil-set-initial-state 'dashboard-mode 'normal)
  43. (evil-define-key '(normal insert visual)
  44. 'global (kbd "C-a") #'evil-beginning-of-line)
  45. (evil-define-key '(normal insert visual)
  46. 'global (kbd "C-e") #'evil-end-of-line)
  47. (evil-define-key 'insert 'global (kbd "C-g") #'evil-normal-state)
  48. (evil-define-key '(emacs normal insert visual)
  49. 'global (kbd "C-w") #'kill-region)
  50. (evil-define-key '(emacs normal insert visual)
  51. 'global (kbd "C-y") #'yank)
  52. (evil-define-key '(emacs normal insert visual)
  53. 'global (kbd "M-y") #'kkk-evil--yank-pop)
  54. )
  55. (use-package evil-surround
  56. :defer 5
  57. :after (evil)
  58. :functions (global-evil-surround-mode)
  59. :init (global-evil-surround-mode t))
  60. (use-package evil-numbers
  61. :defer 6
  62. :after evil
  63. :functions (evil-numbers/inc-at-pt evil-numbers/dec-at-pt
  64. evil-numbers/inc-at-pt-incremental
  65. evil-numbers/dec-at-pt-incremental)
  66. :config
  67. (let ((modes '(normal visual)))
  68. (evil-define-key modes 'global (kbd "C-c +") #'evil-numbers/inc-at-pt)
  69. (evil-define-key modes 'global (kbd "C-c -") #'evil-numbers/dec-at-pt))
  70. (evil-define-key
  71. 'visual 'global (kbd "g C-a") #'evil-numbers/inc-at-pt-incremental)
  72. (evil-define-key
  73. 'visual 'global (kbd "g C-x") #'evil-numbers/dec-at-pt-incremental))
  74. (use-package evil-exchange
  75. :defer 7
  76. :after (evil)
  77. :functions (evil-exchange-cx-install)
  78. :init (evil-exchange-cx-install))
  79. (provide 'kkk-evil)
  80. ;;; kkk-evil.el ends here