mirror of
https://git.sr.ht/~magic_rb/dotfiles
synced 2024-12-11 09:22:02 +01:00
9ec2e601e2
digraph, nix
95 lines
3.3 KiB
Org Mode
95 lines
3.3 KiB
Org Mode
* Evil
|
|
#+NAME: evil
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil
|
|
:straight t
|
|
:init
|
|
(setq evil-want-keybinding nil)
|
|
:bind (:map evil-motion-state-map
|
|
("h" . nil)
|
|
("j" . evil-backward-char)
|
|
("k" . evil-previous-line)
|
|
("l" . evil-next-line)
|
|
(";" . evil-forward-char)
|
|
:map evil-motion-state-map
|
|
("<left>" . (lambda () (interactive) ()))
|
|
("<right>" . (lambda () (interactive) ()))
|
|
("<up>" . (lambda () (interactive) ()))
|
|
("<down>" . (lambda () (interactive) ()))
|
|
:map evil-insert-state-map
|
|
("<left>" . (lambda () (interactive) ()))
|
|
("<right>" . (lambda () (interactive) ()))
|
|
("<up>" . (lambda () (interactive) ()))
|
|
("<down>" . (lambda () (interactive) ())))
|
|
:config
|
|
(evil-mode 1)
|
|
(with-eval-after-load "treemacs"
|
|
(evil-define-key 'treemacs treemacs-mode-map (kbd "h") nil)
|
|
(evil-define-key 'treemacs treemacs-mode-map (kbd "j") 'treemacs-root-up)
|
|
(evil-define-key 'treemacs treemacs-mode-map (kbd "k") 'treemacs-previous-line)
|
|
(evil-define-key 'treemacs treemacs-mode-map (kbd "l") 'treemacs-next-line)
|
|
(evil-define-key 'treemacs treemacs-mode-map (kbd ";") 'treemacs-root-down))
|
|
;; :q should kill the current buffer rather than quitting emacs entirely
|
|
(evil-ex-define-cmd "q" 'kill-this-buffer)
|
|
;; Need to type out :quit to close emacs
|
|
(evil-ex-define-cmd "quit" 'evil-quit)
|
|
;; save and close buffer
|
|
(defun liu233w/ex-save-kill-buffer-and-close ()
|
|
(interactive)
|
|
(save-buffer)
|
|
(kill-this-buffer))
|
|
(evil-ex-define-cmd "wq" 'liu233w/ex-save-kill-buffer-and-close))
|
|
|
|
(use-package evil-collection
|
|
:straight t
|
|
:config
|
|
(evil-collection-init 'vterm)
|
|
(defun evil-collection-vterm-escape-stay ()
|
|
"Go back to normal state but don't move cursor backwards.
|
|
Moving cursor backwards is the default vim behavior but
|
|
it is not appropriate in some cases like terminals."
|
|
(setq-local evil-move-cursor-back nil))
|
|
|
|
(add-hook 'vterm-mode-hook #'evil-collection-vterm-escape-stay))
|
|
|
|
(use-package evil-surround
|
|
:straight t
|
|
:after evil
|
|
:config
|
|
(global-evil-surround-mode 1))
|
|
|
|
(use-package key-chord
|
|
:straight t
|
|
:config
|
|
(defun magic_rb/key-chord-define-nonsymmetric (keymap keys command)
|
|
(if (/= 2 (length keys))
|
|
(error "Key-chord keys must have two elements"))
|
|
(let ((key1 (logand 255 (aref keys 0)))
|
|
(key2 (logand 255 (aref keys 1))))
|
|
(if (eq key1 key2)
|
|
(define-key keymap (vector 'key-chord key1 key2) command)
|
|
(define-key keymap (vector 'key-chord key1 key2) command)
|
|
)))
|
|
(setq key-chord-two-keys-delay 0.15)
|
|
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
|
|
(key-chord-mode 1))
|
|
#+END_SRC
|
|
|
|
** Evil org-mode
|
|
#+NAME: evil-ord-mode
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil-org
|
|
:straight t
|
|
:after org
|
|
:config
|
|
(add-hook 'org-mode-hook 'evil-org-mode)
|
|
(add-hook 'evil-org-mode-hook
|
|
(lambda ()
|
|
(evil-org-set-key-theme)))
|
|
(require 'evil-org-agenda)
|
|
(evil-org-agenda-set-keys)
|
|
(evil-define-key 'motion org-agenda-mode-map (kbd "h") nil)
|
|
(evil-define-key 'motion org-agenda-mode-map (kbd "j") 'evil-backward-char)
|
|
(evil-define-key 'motion org-agenda-mode-map (kbd "k") 'org-agenda-previous-line)
|
|
(evil-define-key 'motion org-agenda-mode-map (kbd "l") 'org-agenda-next-line))
|
|
#+END_SRC
|