aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagdalena Szweda <hi@roughlynamed.net>2026-10-12 15:02:46 +0200
committerMagdalena Szweda <hi@roughlynamed.net>2026-10-12 19:42:28 +0200
commit9eafc3a522560da565befd7fe820bd141c9bcd56 (patch)
tree281c8efb7487b19f82880759f513580fdf262777
parent79b67f47cf6a72e910de509dad70f6f3db03743c (diff)
Modal(meow): Add the meow modal editing layer as an alternative to evil
-rw-r--r--config.el60
-rw-r--r--config.org76
-rw-r--r--init.el5
3 files changed, 130 insertions, 11 deletions
diff --git a/config.el b/config.el
index 98320b9..af0f91e 100644
--- a/config.el
+++ b/config.el
@@ -149,8 +149,6 @@
(setq gnus-permanently-visible-groups ".")
-(evil-set-initial-state 'gnus-browse-mode 'emacs)
-
(setq user-mail-address "hi@roughlynamed.net" ; my email
user-full-name "Magdalena Szweda") ; my name
@@ -160,6 +158,8 @@
(setq message-signature-file "~/.signature") ; note no trailing slash
+(evil-set-initial-state 'gnus-browse-mode 'emacs)
+
(setq gnus-select-method
'(nnimap "migadu"
(nnimap-address "imap.migadu.com")
@@ -734,7 +734,7 @@ org-html-postamble nil))
(start-process-shell-command c nil c))
(my/run-once "~/.cargo/bin/mprisence")))
- (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systemtray-enable))
+ (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systetray-enable))
(if (fboundp 'exwm-wm-mode) (exwm-wm-mode 1) (exwm-enable))) ; 0.34+ vs 0.33
(use-package! exwm-edit
@@ -843,3 +843,57 @@ org-html-postamble nil))
:n "SPC w e" #'evil-window-down
:n "SPC w i" #'evil-window-up
:n "SPC w o" #'evil-window-right)
+
+(defun my/meow-insert-bol () ; evil I
+ (interactive) (meow-cancel-selection) (back-to-indentation) (meow-insert))
+(defun my/meow-append-eol () ; evil A
+ (interactive) (meow-cancel-selection) (end-of-line) (meow-insert))
+(defun my/meow-change-eol () ; evil C
+ (interactive) (meow-cancel-selection) (kill-line) (meow-insert))
+(defun my/meow-yank-line () ; evil Y (whole line)
+ (interactive)
+ (kill-ring-save (line-beginning-position) (line-beginning-position 2)))
+
+
+(define-key key-translation-map (kbd "q") (kbd "C-"))
+(defun my/meow-till-back () (interactive) (let ((current-prefix-arg -1)) (call-interactively #'meow-till)))
+(defun my/meow-find-back () (interactive) (let ((current-prefix-arg -1)) (call-interactively #'meow-find)))
+(defun my/meow-search-back () (interactive) (let ((current-prefix-arg -1)) (call-interactively #'meow-search)))
+
+(defvar my/meow-scroll-map (make-sparse-keymap))
+(define-key my/meow-scroll-map "j" (lambda () (interactive) (recenter)))
+(define-key my/meow-scroll-map "n" (lambda () (interactive) (recenter 0)))
+(define-key my/meow-scroll-map "e" (lambda () (interactive) (recenter -1)))
+
+(defun my/meow-neio-setup ()
+ (meow-motion-overwrite-define-key
+ '("e" . meow-next) '("i" . meow-prev))
+ (meow-normal-define-key
+ '("n" . meow-left) '("N" . meow-left-expand)
+ '("e" . meow-next) '("E" . meow-next-expand)
+ '("i" . meow-prev) '("I" . meow-prev-expand)
+ '("o" . meow-right) '("O" . meow-right-expand)
+ '("l" . meow-back-word) '("L" . meow-back-symbol)
+ '("y" . meow-next-word) '("Y" . meow-next-symbol)
+ '("u" . meow-next-word) '("U" . meow-next-symbol)
+ '("s" . meow-insert) '("S" . my/meow-insert-bol)
+ '("t" . meow-append) '("T" . my/meow-append-eol)
+ '("h" . meow-open-below) '("H" . meow-open-above)
+ '("w" . meow-change) '("W" . my/meow-change-eol)
+ '("x" . meow-delete) '("X" . kill-line)
+ '("c" . meow-save) '("C" . my/meow-yank-line)
+ '("v" . meow-yank) '("V" . meow-yank-pop)
+ '("z" . meow-undo) '("Z" . undo-redo)
+ '("a" . meow-block) '("A" . meow-line)
+ '("p" . meow-till) '("P" . my/meow-till-back) '("F" . my/meow-find-back)
+ '("k" . meow-search) '("K" . my/meow-search-back)
+ '("J" . meow-join))
+ (define-key meow-normal-state-keymap "j" my/meow-scroll-map))
+
+(after! meow (my/meow-neio-setup))
+(advice-add '+meow--setup-colemak :after #'my/meow-neio-setup)
+
+(map! :leader
+ (:prefix ("w" . "window")
+ "n" #'windmove-left "e" #'windmove-down
+ "i" #'windmove-up "o" #'windmove-right))
diff --git a/config.org b/config.org
index 0ac739a..eaa3bfe 100644
--- a/config.org
+++ b/config.org
@@ -357,11 +357,6 @@ This makes it so that all subscribed groups are visible, no matter if theres no
(setq gnus-permanently-visible-groups ".")
#+end_src
-When browsing gnus, make the mode in evil standard emacs.
-#+begin_src emacs-lisp
-(evil-set-initial-state 'gnus-browse-mode 'emacs)
-#+end_src
-
Now we configure our user of gnus.
#+begin_src emacs-lisp
(setq user-mail-address "hi@roughlynamed.net" ; my email
@@ -380,6 +375,11 @@ We can also set up the signature via the ~.signature~ file instead of encoding i
(setq message-signature-file "~/.signature") ; note no trailing slash
#+end_src
+When browsing gnus, make the mode in evil standard emacs.
+#+begin_src emacs-lisp
+(evil-set-initial-state 'gnus-browse-mode 'emacs)
+#+end_src
+
Now we can set up the actual mail part.
I use migadu for my email hosting, provided to me by ~@bas.sh~
Here we set up IMAP for receiving mail.
@@ -1570,7 +1570,7 @@ EXWM is the Emacs X Window Manager.
(start-process-shell-command c nil c))
(my/run-once "~/.cargo/bin/mprisence")))
- (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systemtray-enable))
+ (if (fboundp 'exwm-systemtray-mode) (exwm-systemtray-mode 1) (exwm-systetray-enable))
(if (fboundp 'exwm-wm-mode) (exwm-wm-mode 1) (exwm-enable))) ; 0.34+ vs 0.33
(use-package! exwm-edit
@@ -1745,6 +1745,70 @@ Doesnt work in org files
#+end_src
+* Meow
+#+begin_quote
+Mrrp Nya Nya Mrrp Mraoow
+#+end_quote
+
+Meow provides an object-then-verb modal editing layer to Emacs, similar to Helix or Kakoune
+
+This requires ~(meow +colemak)~ enabled in DOOM's init.el
+The meow module is not available by default, and must be first git cloned
+#+begin_src emacs-lisp
+(defun my/meow-insert-bol () ; evil I
+ (interactive) (meow-cancel-selection) (back-to-indentation) (meow-insert))
+(defun my/meow-append-eol () ; evil A
+ (interactive) (meow-cancel-selection) (end-of-line) (meow-insert))
+(defun my/meow-change-eol () ; evil C
+ (interactive) (meow-cancel-selection) (kill-line) (meow-insert))
+(defun my/meow-yank-line () ; evil Y (whole line)
+ (interactive)
+ (kill-ring-save (line-beginning-position) (line-beginning-position 2)))
+
+
+(define-key key-translation-map (kbd "q") (kbd "C-"))
+(defun my/meow-till-back () (interactive) (let ((current-prefix-arg -1)) (call-interactively #'meow-till)))
+(defun my/meow-find-back () (interactive) (let ((current-prefix-arg -1)) (call-interactively #'meow-find)))
+(defun my/meow-search-back () (interactive) (let ((current-prefix-arg -1)) (call-interactively #'meow-search)))
+
+(defvar my/meow-scroll-map (make-sparse-keymap))
+(define-key my/meow-scroll-map "j" (lambda () (interactive) (recenter)))
+(define-key my/meow-scroll-map "n" (lambda () (interactive) (recenter 0)))
+(define-key my/meow-scroll-map "e" (lambda () (interactive) (recenter -1)))
+
+(defun my/meow-neio-setup ()
+ (meow-motion-overwrite-define-key
+ '("e" . meow-next) '("i" . meow-prev))
+ (meow-normal-define-key
+ '("n" . meow-left) '("N" . meow-left-expand)
+ '("e" . meow-next) '("E" . meow-next-expand)
+ '("i" . meow-prev) '("I" . meow-prev-expand)
+ '("o" . meow-right) '("O" . meow-right-expand)
+ '("l" . meow-back-word) '("L" . meow-back-symbol)
+ '("y" . meow-next-word) '("Y" . meow-next-symbol)
+ '("u" . meow-next-word) '("U" . meow-next-symbol)
+ '("s" . meow-insert) '("S" . my/meow-insert-bol)
+ '("t" . meow-append) '("T" . my/meow-append-eol)
+ '("h" . meow-open-below) '("H" . meow-open-above)
+ '("w" . meow-change) '("W" . my/meow-change-eol)
+ '("x" . meow-delete) '("X" . kill-line)
+ '("c" . meow-save) '("C" . my/meow-yank-line)
+ '("v" . meow-yank) '("V" . meow-yank-pop)
+ '("z" . meow-undo) '("Z" . undo-redo)
+ '("a" . meow-block) '("A" . meow-line)
+ '("p" . meow-till) '("P" . my/meow-till-back) '("F" . my/meow-find-back)
+ '("k" . meow-search) '("K" . my/meow-search-back)
+ '("J" . meow-join))
+ (define-key meow-normal-state-keymap "j" my/meow-scroll-map))
+
+(after! meow (my/meow-neio-setup))
+(advice-add '+meow--setup-colemak :after #'my/meow-neio-setup)
+
+(map! :leader
+ (:prefix ("w" . "window")
+ "n" #'windmove-left "e" #'windmove-down
+ "i" #'windmove-up "o" #'windmove-right))
+#+end_src
* Footnotes
[fn:1]
diff --git a/init.el b/init.el
index f945b94..6812618 100644
--- a/init.el
+++ b/init.el
@@ -11,7 +11,7 @@
(corfu
+orderless
+icons
- +dabbrev) ; complete with cap(f), cape and a flying feather!
+ +dabbrev) ; complete with cap(f), cape and a flying feather!
;; (helm
;; +fuzzy
;; +icons
@@ -20,7 +20,7 @@
;;ivy ; a search engine for love and life
(vertico
+icons
- +childframe) ; the search engine of the future
+ +childframe) ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
@@ -49,6 +49,7 @@
:editor
(evil +everywhere) ; come to the dark side, we have cookies
+ ;;(meow +colemak)
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness