feat: add emacs window management keybinds

This commit is contained in:
Swarsel 2024-08-16 11:37:33 +02:00
parent 4dc2b59670
commit d33c24f710
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
2 changed files with 201 additions and 189 deletions

View file

@ -9305,104 +9305,110 @@ I also define some keybinds to some combinations directly. Those are used mostly
#+begin_src emacs-lisp #+begin_src emacs-lisp
;; Make ESC quit prompts ;; Make ESC quit prompts
(global-set-key (kbd "<escape>") 'keyboard-escape-quit) (global-set-key (kbd "<escape>") 'keyboard-escape-quit)
;; Set up general keybindings ;; Set up general keybindings
(use-package general (use-package general
:config :config
(general-create-definer swarsel/leader-keys (general-create-definer swarsel/leader-keys
:keymaps '(normal insert visual emacs) :keymaps '(normal insert visual emacs)
:prefix "SPC" :prefix "SPC"
:global-prefix "C-SPC") :global-prefix "C-SPC")
(swarsel/leader-keys (swarsel/leader-keys
"e" '(:ignore e :which-key "evil") "e" '(:ignore e :which-key "evil")
"eo" '(evil-jump-backward :which-key "cursor jump backwards") "eo" '(evil-jump-backward :which-key "cursor jump backwards")
"eO" '(evil-jump-forward :which-key "cursor jump forwards") "eO" '(evil-jump-forward :which-key "cursor jump forwards")
"t" '(:ignore t :which-key "toggles") "t" '(:ignore t :which-key "toggles")
"ts" '(hydra-text-scale/body :which-key "scale text") "ts" '(hydra-text-scale/body :which-key "scale text")
"te" '(swarsel/toggle-evil-state :which-key "emacs/evil") "te" '(swarsel/toggle-evil-state :which-key "emacs/evil")
"tl" '(display-line-numbers-mode :which-key "line numbers") "tl" '(display-line-numbers-mode :which-key "line numbers")
"tp" '(evil-cleverparens-mode :wk "cleverparens") "tp" '(evil-cleverparens-mode :wk "cleverparens")
"to" '(olivetti-mode :wk "olivetti") "to" '(olivetti-mode :wk "olivetti")
"td" '(darkroom-tentative-mode :wk "darkroom") "td" '(darkroom-tentative-mode :wk "darkroom")
"tw" '((lambda () (interactive) (toggle-truncate-lines)) :which-key "line wrapping") "tw" '((lambda () (interactive) (toggle-truncate-lines)) :which-key "line wrapping")
"m" '(:ignore m :which-key "modes/programs") "m" '(:ignore m :which-key "modes/programs")
"mm" '((lambda () (interactive) (mu4e)) :which-key "mu4e") "mm" '((lambda () (interactive) (mu4e)) :which-key "mu4e")
"mg" '((lambda () (interactive) (magit-list-repositories)) :which-key "magit-list-repos") "mg" '((lambda () (interactive) (magit-list-repositories)) :which-key "magit-list-repos")
"mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar") "mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar")
"mp" '(popper-toggle :which-key "popper") "mp" '(popper-toggle :which-key "popper")
"md" '(dirvish :which-key "dirvish") "md" '(dirvish :which-key "dirvish")
"o" '(:ignore o :which-key "org") "o" '(:ignore o :which-key "org")
"op" '((lambda () (interactive) (org-present)) :which-key "org-present") "op" '((lambda () (interactive) (org-present)) :which-key "org-present")
"ob" '((lambda () (interactive) (org-babel-mark-block)) :which-key "Mark whole src-block") "ob" '((lambda () (interactive) (org-babel-mark-block)) :which-key "Mark whole src-block")
"ol" '((lambda () (interactive) (org-insert-link)) :which-key "insert link") "ol" '((lambda () (interactive) (org-insert-link)) :which-key "insert link")
"os" '((lambda () (interactive) (org-store-link)) :which-key "store link") "os" '((lambda () (interactive) (org-store-link)) :which-key "store link")
"od" '((lambda () (interactive) (org-babel-demarcate-block)) :which-key "demarcate (split) src-block") "od" '((lambda () (interactive) (org-babel-demarcate-block)) :which-key "demarcate (split) src-block")
;; "c" '(:ignore c :which-key "capture") "on" '((lambda () (interactive) (nixpkgs-fmt)) :which-key "format nix-block")
;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") ;; "c" '(:ignore c :which-key "capture")
;; "cs" '(markdown-download-screenshot :which-key "screenshot") ;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal")
"l" '(:ignore l :which-key "links") ;; "cs" '(markdown-download-screenshot :which-key "screenshot")
"lc" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (org-overview) )) :which-key "SwarselSystems.org") "l" '(:ignore l :which-key "links")
"le" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "Emacs") ) (org-overview) (org-cycle) )) :which-key "Emacs.org") "lc" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (org-overview) )) :which-key "SwarselSystems.org")
"ln" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "System") ) (org-overview) (org-cycle))) :which-key "Nixos.org") "le" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "Emacs") ) (org-overview) (org-cycle) )) :which-key "Emacs.org")
"ls" '((lambda () (interactive) (find-file "/smb:Swarsel@192.168.1.3:")) :which-key "Server") "ln" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "System") ) (org-overview) (org-cycle))) :which-key "Nixos.org")
"lo" '(dired swarsel-obsidian-vault-directory :which-key "obsidian") "ls" '((lambda () (interactive) (find-file "/smb:Swarsel@192.168.1.3:")) :which-key "Server")
;; "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki") "lo" '(dired swarsel-obsidian-vault-directory :which-key "obsidian")
;; "ln" '((lambda () (interactive) (find-file swarsel-nix-org-filepath)) :which-key "Nix.org") ;; "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki")
"lp" '((lambda () (interactive) (projectile-switch-project)) :which-key "switch project") ;; "ln" '((lambda () (interactive) (find-file swarsel-nix-org-filepath)) :which-key "Nix.org")
"lg" '((lambda () (interactive) (magit-list-repositories)) :which-key "list git repos") "lp" '((lambda () (interactive) (projectile-switch-project)) :which-key "switch project")
;; "a" '(:ignore a :which-key "anki") "lg" '((lambda () (interactive) (magit-list-repositories)) :which-key "list git repos")
;; "ap" '(anki-editor-push-tree :which-key "push new cards") ;; "a" '(:ignore a :which-key "anki")
;; "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card") ;; "ap" '(anki-editor-push-tree :which-key "push new cards")
;; "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype") ;; "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card")
"h" '(:ignore h :which-key "help") ;; "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype")
"hy" '(yas-describe-tables :which-key "yas tables") "h" '(:ignore h :which-key "help")
"hb" '(embark-bindings :which-key "current key bindings") "hy" '(yas-describe-tables :which-key "yas tables")
"h" '(:ignore t :which-key "describe") "hb" '(embark-bindings :which-key "current key bindings")
"he" 'view-echo-area-messages "h" '(:ignore t :which-key "describe")
"hf" 'describe-function "he" 'view-echo-area-messages
"hF" 'describe-face "hf" 'describe-function
"hl" '(view-lossage :which-key "show command keypresses") "hF" 'describe-face
"hL" 'find-library "hl" '(view-lossage :which-key "show command keypresses")
"hm" 'describe-mode "hL" 'find-library
"ho" 'describe-symbol "hm" 'describe-mode
"hk" 'describe-key "ho" 'describe-symbol
"hK" 'describe-keymap "hk" 'describe-key
"hp" 'describe-package "hK" 'describe-keymap
"hv" 'describe-variable "hp" 'describe-package
"hd" 'devdocs-lookup "hv" 'describe-variable
"w" '(:ignore t :which-key "window") "hd" 'devdocs-lookup
"wl" 'windmove-right "w" '(:ignore t :which-key "window")
"wh" 'windmove-left "wl" 'windmove-right
"wk" 'windmove-up "w <right>" 'windmove-right
"wj" 'windmove-down "wh" 'windmove-left
"wr" 'winner-redo "w <left>" 'windmove-left
"wd" 'delete-window "wk" 'windmove-up
"w=" 'balance-windows-area "w <up>" 'windmove-up
"wD" 'kill-buffer-and-window "wj" 'windmove-down
"wu" 'winner-undo "w <down>" 'windmove-down
"wr" 'winner-redo "wr" 'winner-redo
"w/" 'evil-window-vsplit "wd" 'delete-window
"w-" 'evil-window-split "w=" 'balance-windows-area
"wm" '(delete-other-windows :wk "maximize") "wD" 'kill-buffer-and-window
"<right>" 'up-list "wu" 'winner-undo
"<left>" 'down-list "wr" 'winner-redo
)) "w/" 'evil-window-vsplit
"w\\" 'evil-window-vsplit
"w-" 'evil-window-split
"wm" '(delete-other-windows :wk "maximize")
"<right>" 'up-list
"<left>" 'down-list
))
;; General often used hotkeys ;; General often used hotkeys
(general-define-key (general-define-key
"C-M-a" (lambda () (interactive) (org-capture nil "a")) ; make new anki card "C-M-a" (lambda () (interactive) (org-capture nil "a")) ; make new anki card
;; "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist ;; "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist
;; "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetype for new anki cards ;; "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetype for new anki cards
;; "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot ;; "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot
"C-c d" 'crux-duplicate-current-line-or-region "C-c d" 'crux-duplicate-current-line-or-region
"C-c D" 'crux-duplicate-and-comment-current-line-or-region "C-c D" 'crux-duplicate-and-comment-current-line-or-region
"<DUMMY-m>" 'swarsel/last-buffer "<DUMMY-m>" 'swarsel/last-buffer
"M-\\" 'indent-region "M-\\" 'indent-region
"C-<f9>" 'my-python-shell-run "C-<f9>" 'my-python-shell-run
) )
#+end_src #+end_src
*** Directory setup / File structure *** Directory setup / File structure

View file

@ -291,103 +291,109 @@ create a new one."
(call-interactively 'nixpkgs-fmt-region))))) (call-interactively 'nixpkgs-fmt-region)))))
;; Make ESC quit prompts ;; Make ESC quit prompts
(global-set-key (kbd "<escape>") 'keyboard-escape-quit) (global-set-key (kbd "<escape>") 'keyboard-escape-quit)
;; Set up general keybindings ;; Set up general keybindings
(use-package general (use-package general
:config :config
(general-create-definer swarsel/leader-keys (general-create-definer swarsel/leader-keys
:keymaps '(normal insert visual emacs) :keymaps '(normal insert visual emacs)
:prefix "SPC" :prefix "SPC"
:global-prefix "C-SPC") :global-prefix "C-SPC")
(swarsel/leader-keys (swarsel/leader-keys
"e" '(:ignore e :which-key "evil") "e" '(:ignore e :which-key "evil")
"eo" '(evil-jump-backward :which-key "cursor jump backwards") "eo" '(evil-jump-backward :which-key "cursor jump backwards")
"eO" '(evil-jump-forward :which-key "cursor jump forwards") "eO" '(evil-jump-forward :which-key "cursor jump forwards")
"t" '(:ignore t :which-key "toggles") "t" '(:ignore t :which-key "toggles")
"ts" '(hydra-text-scale/body :which-key "scale text") "ts" '(hydra-text-scale/body :which-key "scale text")
"te" '(swarsel/toggle-evil-state :which-key "emacs/evil") "te" '(swarsel/toggle-evil-state :which-key "emacs/evil")
"tl" '(display-line-numbers-mode :which-key "line numbers") "tl" '(display-line-numbers-mode :which-key "line numbers")
"tp" '(evil-cleverparens-mode :wk "cleverparens") "tp" '(evil-cleverparens-mode :wk "cleverparens")
"to" '(olivetti-mode :wk "olivetti") "to" '(olivetti-mode :wk "olivetti")
"td" '(darkroom-tentative-mode :wk "darkroom") "td" '(darkroom-tentative-mode :wk "darkroom")
"tw" '((lambda () (interactive) (toggle-truncate-lines)) :which-key "line wrapping") "tw" '((lambda () (interactive) (toggle-truncate-lines)) :which-key "line wrapping")
"m" '(:ignore m :which-key "modes/programs") "m" '(:ignore m :which-key "modes/programs")
"mm" '((lambda () (interactive) (mu4e)) :which-key "mu4e") "mm" '((lambda () (interactive) (mu4e)) :which-key "mu4e")
"mg" '((lambda () (interactive) (magit-list-repositories)) :which-key "magit-list-repos") "mg" '((lambda () (interactive) (magit-list-repositories)) :which-key "magit-list-repos")
"mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar") "mc" '((lambda () (interactive) (swarsel/open-calendar)) :which-key "calendar")
"mp" '(popper-toggle :which-key "popper") "mp" '(popper-toggle :which-key "popper")
"md" '(dirvish :which-key "dirvish") "md" '(dirvish :which-key "dirvish")
"o" '(:ignore o :which-key "org") "o" '(:ignore o :which-key "org")
"op" '((lambda () (interactive) (org-present)) :which-key "org-present") "op" '((lambda () (interactive) (org-present)) :which-key "org-present")
"ob" '((lambda () (interactive) (org-babel-mark-block)) :which-key "Mark whole src-block") "ob" '((lambda () (interactive) (org-babel-mark-block)) :which-key "Mark whole src-block")
"ol" '((lambda () (interactive) (org-insert-link)) :which-key "insert link") "ol" '((lambda () (interactive) (org-insert-link)) :which-key "insert link")
"os" '((lambda () (interactive) (org-store-link)) :which-key "store link") "os" '((lambda () (interactive) (org-store-link)) :which-key "store link")
"od" '((lambda () (interactive) (org-babel-demarcate-block)) :which-key "demarcate (split) src-block") "od" '((lambda () (interactive) (org-babel-demarcate-block)) :which-key "demarcate (split) src-block")
;; "c" '(:ignore c :which-key "capture") "on" '((lambda () (interactive) (nixpkgs-fmt)) :which-key "format nix-block")
;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal") ;; "c" '(:ignore c :which-key "capture")
;; "cs" '(markdown-download-screenshot :which-key "screenshot") ;; "cj" '((lambda () (interactive) (org-capture nil "jj")) :which-key "journal")
"l" '(:ignore l :which-key "links") ;; "cs" '(markdown-download-screenshot :which-key "screenshot")
"lc" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (org-overview) )) :which-key "SwarselSystems.org") "l" '(:ignore l :which-key "links")
"le" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "Emacs") ) (org-overview) (org-cycle) )) :which-key "Emacs.org") "lc" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (org-overview) )) :which-key "SwarselSystems.org")
"ln" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "System") ) (org-overview) (org-cycle))) :which-key "Nixos.org") "le" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "Emacs") ) (org-overview) (org-cycle) )) :which-key "Emacs.org")
"ls" '((lambda () (interactive) (find-file "/smb:Swarsel@192.168.1.3:")) :which-key "Server") "ln" '((lambda () (interactive) (progn (find-file swarsel-swarsel-org-filepath) (goto-char (org-find-exact-headline-in-buffer "System") ) (org-overview) (org-cycle))) :which-key "Nixos.org")
"lo" '(dired swarsel-obsidian-vault-directory :which-key "obsidian") "ls" '((lambda () (interactive) (find-file "/smb:Swarsel@192.168.1.3:")) :which-key "Server")
;; "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki") "lo" '(dired swarsel-obsidian-vault-directory :which-key "obsidian")
;; "ln" '((lambda () (interactive) (find-file swarsel-nix-org-filepath)) :which-key "Nix.org") ;; "la" '((lambda () (interactive) (find-file swarsel-org-anki-filepath)) :which-key "anki")
"lp" '((lambda () (interactive) (projectile-switch-project)) :which-key "switch project") ;; "ln" '((lambda () (interactive) (find-file swarsel-nix-org-filepath)) :which-key "Nix.org")
"lg" '((lambda () (interactive) (magit-list-repositories)) :which-key "list git repos") "lp" '((lambda () (interactive) (projectile-switch-project)) :which-key "switch project")
;; "a" '(:ignore a :which-key "anki") "lg" '((lambda () (interactive) (magit-list-repositories)) :which-key "list git repos")
;; "ap" '(anki-editor-push-tree :which-key "push new cards") ;; "a" '(:ignore a :which-key "anki")
;; "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card") ;; "ap" '(anki-editor-push-tree :which-key "push new cards")
;; "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype") ;; "an" '((lambda () (interactive) (org-capture nil "a")) :which-key "new card")
"h" '(:ignore h :which-key "help") ;; "as" '(swarsel-anki-set-deck-and-notetype :which-key "change deck and notetype")
"hy" '(yas-describe-tables :which-key "yas tables") "h" '(:ignore h :which-key "help")
"hb" '(embark-bindings :which-key "current key bindings") "hy" '(yas-describe-tables :which-key "yas tables")
"h" '(:ignore t :which-key "describe") "hb" '(embark-bindings :which-key "current key bindings")
"he" 'view-echo-area-messages "h" '(:ignore t :which-key "describe")
"hf" 'describe-function "he" 'view-echo-area-messages
"hF" 'describe-face "hf" 'describe-function
"hl" '(view-lossage :which-key "show command keypresses") "hF" 'describe-face
"hL" 'find-library "hl" '(view-lossage :which-key "show command keypresses")
"hm" 'describe-mode "hL" 'find-library
"ho" 'describe-symbol "hm" 'describe-mode
"hk" 'describe-key "ho" 'describe-symbol
"hK" 'describe-keymap "hk" 'describe-key
"hp" 'describe-package "hK" 'describe-keymap
"hv" 'describe-variable "hp" 'describe-package
"hd" 'devdocs-lookup "hv" 'describe-variable
"w" '(:ignore t :which-key "window") "hd" 'devdocs-lookup
"wl" 'windmove-right "w" '(:ignore t :which-key "window")
"wh" 'windmove-left "wl" 'windmove-right
"wk" 'windmove-up "w <right>" 'windmove-right
"wj" 'windmove-down "wh" 'windmove-left
"wr" 'winner-redo "w <left>" 'windmove-left
"wd" 'delete-window "wk" 'windmove-up
"w=" 'balance-windows-area "w <up>" 'windmove-up
"wD" 'kill-buffer-and-window "wj" 'windmove-down
"wu" 'winner-undo "w <down>" 'windmove-down
"wr" 'winner-redo "wr" 'winner-redo
"w/" 'evil-window-vsplit "wd" 'delete-window
"w-" 'evil-window-split "w=" 'balance-windows-area
"wm" '(delete-other-windows :wk "maximize") "wD" 'kill-buffer-and-window
"<right>" 'up-list "wu" 'winner-undo
"<left>" 'down-list "wr" 'winner-redo
)) "w/" 'evil-window-vsplit
"w\\" 'evil-window-vsplit
"w-" 'evil-window-split
"wm" '(delete-other-windows :wk "maximize")
"<right>" 'up-list
"<left>" 'down-list
))
;; General often used hotkeys ;; General often used hotkeys
(general-define-key (general-define-key
"C-M-a" (lambda () (interactive) (org-capture nil "a")) ; make new anki card "C-M-a" (lambda () (interactive) (org-capture nil "a")) ; make new anki card
;; "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist ;; "C-M-d" 'swarsel-obsidian-daily ; open daily obsidian file and create if not exist
;; "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetype for new anki cards ;; "C-M-S" 'swarsel-anki-set-deck-and-notetype ; switch deck and notetype for new anki cards
;; "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot ;; "C-M-s" 'markdown-download-screenshot ; wrapper for org-download-screenshot
"C-c d" 'crux-duplicate-current-line-or-region "C-c d" 'crux-duplicate-current-line-or-region
"C-c D" 'crux-duplicate-and-comment-current-line-or-region "C-c D" 'crux-duplicate-and-comment-current-line-or-region
"<DUMMY-m>" 'swarsel/last-buffer "<DUMMY-m>" 'swarsel/last-buffer
"M-\\" 'indent-region "M-\\" 'indent-region
"C-<f9>" 'my-python-shell-run "C-<f9>" 'my-python-shell-run
) )
;; set Nextcloud directory for journals etc. ;; set Nextcloud directory for journals etc.
(setq swarsel-sync-directory "~/Nextcloud" (setq swarsel-sync-directory "~/Nextcloud"