(Emacs)~major refactor to bindings

Instead of using leader for everything, with infixes, I create custom
definers for each prefix root.  This is along with better which key
strings and makes the code easier to read: instead of setting up
several bindings across all namespaces I must define each binding in
its respective leader.
This commit is contained in:
2023-03-26 20:04:24 +01:00
parent ec7f1fd586
commit 166d158143

View File

@@ -248,14 +248,27 @@ new definer for the "LEADER" keys. Leader is bound to ~SPC~ and it's
functionally equivalent to the doom/spacemacs leader. Local leader is functionally equivalent to the doom/spacemacs leader. Local leader is
bound to ~SPC ,~ and it's similar to doom/spacemacs leader but doesn't bound to ~SPC ,~ and it's similar to doom/spacemacs leader but doesn't
try to fully assimilate the local-leader map, instead just picking try to fully assimilate the local-leader map, instead just picking
stuff I think is useful. stuff I think is useful. I also create defines for general root
bindings.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package general (use-package general
:demand t :demand t
:config :config
;; General which key definitions for leaders
(general-def (general-def
:states '(normal motion) :states '(normal motion)
"SPC" nil) "SPC" nil
"SPC ," '(nil :which-key "Local leader")
"SPC c" '(nil :which-key "Code")
"SPC f" '(nil :which-key "File")
"SPC t" '(nil :which-key "Shell")
"SPC m" '(nil :which-key "Toggle modes")
"SPC a" '(nil :which-key "Applications")
"SPC s" '(nil :which-key "Search")
"SPC b" '(nil :which-key "Buffers")
"SPC q" '(nil :which-key "Quit/Literate")
"SPC i" '(nil :which-key "Insert")
"SPC d" '(nil :which-key "Directories"))
(general-create-definer leader (general-create-definer leader
:states '(normal motion) :states '(normal motion)
@@ -266,6 +279,56 @@ stuff I think is useful.
:states '(normal motion) :states '(normal motion)
:prefix "SPC ,") :prefix "SPC ,")
(general-create-definer code-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC c")
(general-create-definer file-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC f")
(general-create-definer shell-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC t")
(general-create-definer mode-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC m")
(general-create-definer app-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC a")
(general-create-definer search-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC s")
(general-create-definer buffer-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC b")
(general-create-definer quit-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC q")
(general-create-definer insert-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC i")
(general-create-definer dir-leader
:states '(normal motion)
:keymaps 'override
:prefix "SPC d")
(general-create-definer general-nmmap (general-create-definer general-nmmap
:states '(normal motion)) :states '(normal motion))
@@ -277,53 +340,47 @@ stuff I think is useful.
*** Some default binds in Emacs *** Some default binds in Emacs
Bindings for core functionality Bindings for core functionality
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package emacs (use-package emacs
:straight nil :straight nil
:general :general
(general-def (general-def
"C-x d" #'delete-frame) "C-x d" #'delete-frame)
(nmmap (nmmap
"C--" #'text-scale-decrease "C--" #'text-scale-decrease
"C-=" #'text-scale-increase) "C-=" #'text-scale-increase)
(local-leader (leader
:keymaps 'override "SPC" '(execute-extended-command :which-key "M-x")
";" #'browse-url-emacs) "'" '(browse-url-emacs :which-key "Open url in Emacs")
"u" 'universal-argument
";" 'eval-expression
":" `(,(proc (interactive) (switch-to-buffer "*scratch*"))
:which-key "Switch to *scratch*")
"!" '(async-shell-command :which-key "Async shell command")
"h" '(help-command :which-key "Help"))
(leader (code-leader
"SPC" #'execute-extended-command "j" #'next-error
"u" #'universal-argument "k" #'previous-error
";" #'eval-expression "c" #'compile
":" (proc (interactive) (switch-to-buffer "*scratch*")) "C" #'recompile
"!" #'async-shell-command "F" (list (proc (interactive) (find-file "~/Code/")) ':which-key "Open ~/Code/"))
"cF" (proc (interactive) (find-file "~/Code/")))
(leader (file-leader
:infix "f" "f" #'find-file
"f" #'find-file "F" #'find-file-other-frame
"F" #'find-file-other-frame "s" #'save-buffer
"s" #'save-buffer "p" (list (proc (interactive) (find-file (concat user-emacs-directory "config.org")))
"p" (proc (interactive) (find-file (concat user-emacs-directory "config.org")))) ':which-key "Open config.org"))
(leader (quit-leader
:infix "c" "q" #'save-buffers-kill-terminal
"j" #'next-error "c" #'+literate/compile-config
"k" #'previous-error "l" #'+literate/load-config
"c" #'compile "d" #'delete-frame)
"C" #'recompile)
(leader (search-leader "i" #'imenu))
:infix "q"
"q" #'save-buffers-kill-terminal
"c" #'+literate/compile-config
"l" #'+literate/load-config
"d" #'delete-frame)
(leader
"si" #'imenu)
(leader
"h" #'help-command))
#+end_src #+end_src
** Evil ** Evil
Evil (Emacs VI Layer) is a package that brings the Vi experience to Evil (Emacs VI Layer) is a package that brings the Vi experience to
@@ -350,6 +407,10 @@ Setup the evil package, with some opinionated keybindings:
:demand t :demand t
:hook (after-init-hook . evil-mode) :hook (after-init-hook . evil-mode)
:general :general
(leader
"w" '(evil-window-map :which-key "Window")
"wd" #'delete-frame)
(nmmap (nmmap
"TAB" #'evil-jump-item "TAB" #'evil-jump-item
"r" #'evil-replace-state "r" #'evil-replace-state
@@ -360,6 +421,7 @@ Setup the evil package, with some opinionated keybindings:
"gu" #'evil-upcase "gu" #'evil-upcase
"gU" #'evil-downcase "gU" #'evil-downcase
"T" nil) "T" nil)
(nmmap (nmmap
:infix "T" :infix "T"
"w" #'transpose-words "w" #'transpose-words
@@ -368,12 +430,6 @@ Setup the evil package, with some opinionated keybindings:
"p" #'transpose-paragraphs "p" #'transpose-paragraphs
"e" #'transpose-sexps "e" #'transpose-sexps
"l" #'transpose-lines) "l" #'transpose-lines)
(vmap
:keymaps '(emacs-lisp-mode-map lisp-interaction-mode-map)
"gr" #'eval-region)
(leader
"w" #'evil-window-map
"wd" #'delete-frame)
:init :init
(setq evil-want-keybinding nil (setq evil-want-keybinding nil
evil-split-window-below t evil-split-window-below t
@@ -603,11 +659,13 @@ helpful counterparts.
(use-package counsel (use-package counsel
:after ivy :after ivy
:general :general
(leader (search-leader
"ss" #'counsel-grep-or-swiper "s" #'counsel-grep-or-swiper
"sr" #'counsel-rg "r" #'counsel-rg)
"fr" #'counsel-recentf (file-leader
"ic" #'counsel-unicode-char) "r" #'counsel-recentf)
(insert-leader
"c" #'counsel-unicode-char)
(general-def (general-def
[remap describe-bindings] #'counsel-descbinds [remap describe-bindings] #'counsel-descbinds
[remap load-theme] #'counsel-load-theme) [remap load-theme] #'counsel-load-theme)
@@ -652,7 +710,8 @@ package comes in.
(use-package counsel-etags (use-package counsel-etags
:after counsel :after counsel
:general :general
(leader "st" #'counsel-etags-find-tag)) (search-leader
"t" #'counsel-etags-find-tag))
#+end_src #+end_src
*** Company *** Company
Company is the auto complete system I use. I don't like having heavy Company is the auto complete system I use. I don't like having heavy
@@ -754,14 +813,13 @@ I also provide bindings for buffer management.
(use-package window (use-package window
:straight nil :straight nil
:general :general
(leader (buffer-leader
:infix "b"
"b" #'switch-to-buffer "b" #'switch-to-buffer
"d" #'kill-current-buffer "d" #'kill-current-buffer
"K" #'kill-buffer "K" #'kill-buffer
"j" #'next-buffer "j" #'next-buffer
"k" #'previous-buffer "k" #'previous-buffer
"D" #'+oreo/clean-buffer-list) "D" '(+oreo/clean-buffer-list :which-key "Kill most buffers"))
:init :init
(with-eval-after-load "use-package-core" (with-eval-after-load "use-package-core"
(add-to-list 'use-package-keywords ':display) (add-to-list 'use-package-keywords ':display)
@@ -966,8 +1024,8 @@ Setup global mode after evil mode has been loaded
(prog-mode-hook . yas-minor-mode) (prog-mode-hook . yas-minor-mode)
(text-mode-hook . yas-minor-mode) (text-mode-hook . yas-minor-mode)
:general :general
(leader (insert-leader
"ii" #'yas-insert-snippet) "i" #'yas-insert-snippet)
:config :config
(yas-load-directory (no-littering-expand-etc-file-name "yasnippet/snippets"))) (yas-load-directory (no-littering-expand-etc-file-name "yasnippet/snippets")))
#+end_src #+end_src
@@ -1104,8 +1162,8 @@ focus on a buffer.
(use-package olivetti (use-package olivetti
:commands (+olivetti-mode) :commands (+olivetti-mode)
:general :general
(leader (mode-leader
"to" #'+olivetti-mode) "o" #'+olivetti-mode)
:init :init
(setq-default olivetti-body-width 0.6) (setq-default olivetti-body-width 0.6)
(setq olivetti-style nil) (setq olivetti-style nil)
@@ -1156,8 +1214,8 @@ it's useful for presentations.
:straight nil :straight nil
:commands display-line-numbers-mode :commands display-line-numbers-mode
:general :general
(leader (mode-leader
"tl" #'display-line-numbers-mode) "l" #'display-line-numbers-mode)
:init :init
(setq-default display-line-numbers-type 'relative)) (setq-default display-line-numbers-type 'relative))
#+end_src #+end_src
@@ -1186,8 +1244,10 @@ generating tags, probably a make recipe.
(inhibit-duplicate-buffer . t) (inhibit-duplicate-buffer . t)
(window-height . 0.25)) (window-height . 0.25))
:general :general
(leader (code-leader
:infix "ct" "t" '(nil :which-key "Tags"))
(code-leader
:infix "t"
"t" #'xref-find-apropos "t" #'xref-find-apropos
"d" #'xref-find-definitions "d" #'xref-find-definitions
"r" #'xref-find-references) "r" #'xref-find-references)
@@ -1220,7 +1280,7 @@ Setup projectile, along with the tags command.
:after evil :after evil
:hook (emacs-startup-hook . projectile-mode) :hook (emacs-startup-hook . projectile-mode)
:general :general
(leader "p" #'projectile-command-map) (leader "p" '(projectile-command-map :which-key "Projectile"))
:init :init
(setq projectile-tags-command "ctags -Re -f \"%s\" %s \"%s\"")) (setq projectile-tags-command "ctags -Re -f \"%s\" %s \"%s\""))
#+end_src #+end_src
@@ -1241,8 +1301,7 @@ need to use it.
(use-package avy (use-package avy
:after evil :after evil
:general :general
(leader (search-leader
:infix "s"
"l" #'avy-goto-line) "l" #'avy-goto-line)
(nmmap (nmmap
(kbd "C-s") #'avy-goto-char-timer (kbd "C-s") #'avy-goto-char-timer
@@ -1339,16 +1398,16 @@ most repositories nowadays.
(window-height . 0.25)) (window-height . 0.25))
:straight nil :straight nil
:general :general
(leader (search-leader
"sd" #'rgrep)) "d" #'rgrep))
#+end_src #+end_src
*** rg *** rg
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package rg (use-package rg
:after grep :after grep
:general :general
(leader (search-leader
"sR" #'rg) "R" #'rg)
(:keymaps 'rg-mode-map (:keymaps 'rg-mode-map
"]]" #'rg-next-file "]]" #'rg-next-file
"[[" #'rg-prev-file "[[" #'rg-prev-file
@@ -1370,8 +1429,8 @@ Nice set of icons with a great user interface to manage them.
:defer t :defer t
:commands (all-the-icons-insert) :commands (all-the-icons-insert)
:general :general
(leader (insert-leader
"ie" #'all-the-icons-insert)) "e" #'all-the-icons-insert))
#+end_src #+end_src
** Save place ** Save place
Saves current place in a buffer permanently, so on revisiting the file Saves current place in a buffer permanently, so on revisiting the file
@@ -1392,8 +1451,8 @@ initial startup screen in default Emacs.
:straight t :straight t
:demand t :demand t
:general :general
(leader (app-leader
"ab" #'dashboard-refresh-buffer) "b" #'dashboard-refresh-buffer)
(:states '(normal motion emacs) (:states '(normal motion emacs)
:keymaps 'dashboard-mode-map :keymaps 'dashboard-mode-map
"q" (proc (interactive) (kill-this-buffer))) "q" (proc (interactive) (kill-this-buffer)))
@@ -1452,8 +1511,8 @@ calendar to the kill ring and bind it to "Y".
(nmmap (nmmap
:keymaps 'calendar-mode-map :keymaps 'calendar-mode-map
"Y" #'+calendar/copy-date) "Y" #'+calendar/copy-date)
(leader (app-leader
"ad" #'+calendar/toggle-calendar) "d" #'+calendar/toggle-calendar)
:config :config
(defun +calendar/copy-date () (defun +calendar/copy-date ()
"Copy date under cursor into kill ring." "Copy date under cursor into kill ring."
@@ -1485,7 +1544,7 @@ integrate it into my workflow just a bit better.
:defer t :defer t
:commands (notmuch +mail/flag-thread) :commands (notmuch +mail/flag-thread)
:general :general
(leader "am" #'notmuch) (app-leader "m" #'notmuch)
(nmap (nmap
:keymaps 'notmuch-search-mode-map :keymaps 'notmuch-search-mode-map
"f" #'+mail/flag-thread) "f" #'+mail/flag-thread)
@@ -1562,13 +1621,14 @@ are some corners I'd like to adjust).
(nmmap (nmmap
:keymaps 'dired-mode-map :keymaps 'dired-mode-map
"T" #'dired-create-empty-file) "T" #'dired-create-empty-file)
(leader (dir-leader
:infix "d" "w" '(wdired-change-to-wdired-mode :which-key "Write dired")
"w" #'wdired-change-to-wdired-mode
"f" #'find-dired "f" #'find-dired
"d" #'dired "d" #'dired
"D" #'dired-other-frame "D" #'dired-other-frame
"l" (proc (interactive) (find-dired "~/Text/PDFs/" "-iname 'cs[0-9][0-9][0-9].pdf' -or -iname 'ma[0-9][0-9][0-9]*.pdf'"))) "p" `((proc (interactive)
(dired "~/Text/PDFs/"))
:which-key "Open PDFs"))
:config :config
(defun +dired/insert-all-subdirectories () (defun +dired/insert-all-subdirectories ()
"Insert all subdirectories currently viewable." "Insert all subdirectories currently viewable."
@@ -1598,8 +1658,8 @@ Uses fd for finding file results in a directory: ~find-dired~ ->
:after dired :after dired
:straight t :straight t
:general :general
(leader (dir-leader
"dF" #'fd-dired)) "g" #'fd-dired))
#+end_src #+end_src
** Xwidget ** Xwidget
Xwidget is a package which allows for the insertion of arbitrary Xwidget is a package which allows for the insertion of arbitrary
@@ -1622,7 +1682,8 @@ without switching windows all within Emacs.
("\\*xwidget.*" ("\\*xwidget.*"
(display-buffer-pop-up-frame)) (display-buffer-pop-up-frame))
:general :general
(leader "au" #'xwidget-webkit-browse-url) (app-leader
"u" #'xwidget-webkit-browse-url)
(nmmap (nmmap
:keymaps 'xwidget-webkit-mode-map :keymaps 'xwidget-webkit-mode-map
"q" #'quit-window "q" #'quit-window
@@ -1655,9 +1716,9 @@ xwidget window. Bind to ~as~ in the leader.
:straight nil :straight nil
:commands (+xwidget/render-file +xwidget/search) :commands (+xwidget/render-file +xwidget/search)
:general :general
(leader (app-leader
"aU" #'+xwidget/render-file "U" #'+xwidget/render-file
"as" #'+xwidget/search) "s" #'+xwidget/search)
:config :config
(setenv "WEBKIT_FORCE_SANDBOX" "0") (setenv "WEBKIT_FORCE_SANDBOX" "0")
(defun +xwidget/render-file (&optional FORCE) (defun +xwidget/render-file (&optional FORCE)
@@ -1737,8 +1798,8 @@ function to pull up the eshell quickly.
(use-package eshell (use-package eshell
:commands +shell/toggle-eshell :commands +shell/toggle-eshell
:general :general
(leader (shell-leader
"tt" #'+shell/toggle-eshell) "t" #'+shell/toggle-eshell)
:init :init
(add-hook (add-hook
'eshell-mode-hook 'eshell-mode-hook
@@ -1831,7 +1892,7 @@ using.
(use-package eshell (use-package eshell
:straight nil :straight nil
:general :general
(leader (shell-leader
"T" #'+eshell/current-buffer) "T" #'+eshell/current-buffer)
:config :config
(defun +eshell/current-buffer () (defun +eshell/current-buffer ()
@@ -1856,7 +1917,7 @@ to elfeed for loading the system.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package elfeed (use-package elfeed
:general :general
(leader "ar" #'elfeed) (app-leader "r" #'elfeed)
(nmmap (nmmap
:keymaps 'elfeed-search-mode-map :keymaps 'elfeed-search-mode-map
"gr" #'elfeed-update "gr" #'elfeed-update
@@ -1940,7 +2001,7 @@ don't need to write everything myself.
("magit-log:.*" ("magit-log:.*"
(display-buffer-same-window)) (display-buffer-same-window))
:general :general
(leader "g" #'magit-status) (leader "g" '(magit-status :which-key "Magit"))
:init :init
(setq vc-follow-symlinks t) (setq vc-follow-symlinks t)
(with-eval-after-load "autoinsert" (with-eval-after-load "autoinsert"
@@ -1957,8 +2018,8 @@ don't need to write everything myself.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package ibuffer (use-package ibuffer
:general :general
(leader (buffer-leader
"bi" #'ibuffer) "i" #'ibuffer)
:config :config
(with-eval-after-load "evil-collection" (with-eval-after-load "evil-collection"
(evil-collection-ibuffer-setup))) (evil-collection-ibuffer-setup)))
@@ -1976,8 +2037,8 @@ Core proced config, just a few bindings and evil collection setup.
(use-package proced (use-package proced
:straight nil :straight nil
:general :general
(leader (app-leader
"ap" #'proced) "p" #'proced)
(nmap (nmap
:keymaps 'proced-mode-map :keymaps 'proced-mode-map
"za" #'proced-toggle-auto-update) "za" #'proced-toggle-auto-update)
@@ -2030,9 +2091,10 @@ without invoking calc directly: $1 + 2\rightarrow_{\text{calc-embed}} 3$.
(display-buffer-at-bottom) (display-buffer-at-bottom)
(window-height . 0.18)) (window-height . 0.18))
:general :general
(leader (app-leader
"ac" #'calc-dispatch "c" #'calc-dispatch)
"tc" #'calc-embedded) (mode-leader
"c" #'calc-embedded)
:init :init
(setq calc-algebraic-mode t) (setq calc-algebraic-mode t)
:config :config
@@ -2131,9 +2193,11 @@ would be describing changes...
(use-package undo-tree (use-package undo-tree
:straight t :straight t
:hook (after-init-hook . global-undo-tree-mode) :hook (after-init-hook . global-undo-tree-mode)
:init
(setq undo-tree-auto-save-history t)
:general :general
(leader (leader
"tu" #'undo-tree-visualize)) "U" #'undo-tree-visualize))
#+end_src #+end_src
*** Whitespace *** Whitespace
Deleting whitespace, highlighting when going beyond the 80th character Deleting whitespace, highlighting when going beyond the 80th character
@@ -2146,8 +2210,8 @@ limit), so set it for specific modes need the help.
:general :general
(nmmap (nmmap
"M--" #'whitespace-cleanup) "M--" #'whitespace-cleanup)
(leader (mode-leader
"ts" #'whitespace-mode) "w" #'whitespace-mode)
:hook :hook
(before-save-hook . whitespace-cleanup) (before-save-hook . whitespace-cleanup)
(c-mode-hook . whitespace-mode) (c-mode-hook . whitespace-mode)
@@ -2221,9 +2285,8 @@ results to the client, done through JSON.
:after project :after project
:defer t :defer t
:general :general
(leader (code-leader
:keymaps 'eglot-mode-map :keymaps 'eglot-mode-map
:infix "c"
"f" #'eglot-format "f" #'eglot-format
"a" #'eglot-code-actions "a" #'eglot-code-actions
"r" #'eglot-rename "r" #'eglot-rename
@@ -2243,14 +2306,13 @@ and when I don't.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package flycheck (use-package flycheck
:commands (flycheck-mode flycheck-list-errors) :commands (flycheck-mode flycheck-list-errors)
:hook
(prog-mode-hook . flycheck-mode)
:general :general
(leader (mode-leader
"tf" #'flycheck-mode "f" #'flycheck-mode)
"cx" #'flycheck-list-errors (code-leader
"cJ" #'flycheck-next-error "x" #'flycheck-list-errors
"cK" #'flycheck-previous-error) "J" #'flycheck-next-error
"K" #'flycheck-previous-error)
:display :display
("\\*Flycheck.*" ("\\*Flycheck.*"
(display-buffer-at-bottom) (display-buffer-at-bottom)
@@ -2365,9 +2427,13 @@ This mode just colourises stuff, and uses eglot to do the important
stuff. stuff.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(load-file (concat user-emacs-directory "elisp/ada-mode.el")) (use-package ada-mode
(with-eval-after-load "eglot" :straight nil
(add-hook 'ada-mode-hook #'eglot)) :load-path "elisp/"
:defer t
:config
(with-eval-after-load "eglot"
(add-hook 'ada-mode-hook #'eglot)))
#+end_src #+end_src
** NHexl ** NHexl
Hexl-mode is the inbuilt package within Emacs to edit hex and binary Hexl-mode is the inbuilt package within Emacs to edit hex and binary
@@ -2483,11 +2549,12 @@ Some bindings for org mode.
(interactive) (interactive)
(swiper "^\\* ")) (swiper "^\\* "))
:general :general
(leader (file-leader
"fw" #'org-capture "w" #'org-capture
"fl" #'org-store-link "l" #'org-store-link
"fi" #'org-insert-last-stored-link "i" #'org-insert-last-stored-link)
"cD" #'org-babel-detangle) (code-leader
"D" #'org-babel-detangle)
(nmmap (nmmap
:keymaps 'org-mode-map :keymaps 'org-mode-map
[remap imenu] #'+org/swiper-goto) [remap imenu] #'+org/swiper-goto)
@@ -2533,9 +2600,14 @@ a very tidy way to manage your time.
:config :config
(evil-set-initial-state 'org-agenda-mode 'normal) (evil-set-initial-state 'org-agenda-mode 'normal)
:general :general
(leader (file-leader
"fa" (proc (interactive) (find-file (completing-read "Enter directory: " org-agenda-files nil t))) "a" `(,(proc (interactive)
(find-file (completing-read "Enter directory: " org-agenda-files nil t)))
:which-key "Open agenda directory"))
(app-leader
"aa" #'org-agenda) "aa" #'org-agenda)
(nmmap (nmmap
:keymaps 'org-agenda-mode-map :keymaps 'org-agenda-mode-map
"zd" #'org-agenda-day-view "zd" #'org-agenda-day-view
@@ -2774,9 +2846,9 @@ format [[file:~/Dotfiles/ClangFormat/.clang-format][config file]] in my dotfiles
:after cc-mode :after cc-mode
:commands (+code/clang-format-region-or-buffer) :commands (+code/clang-format-region-or-buffer)
:general :general
(leader (code-leader
:keymaps '(c-mode-map c++-mode-map) :keymaps '(c-mode-map c++-mode-map)
"cf" #'+code/clang-format-region-or-buffer) "f" #'+code/clang-format-region-or-buffer)
:config :config
(defvar +code/clang-format-automatically t (defvar +code/clang-format-automatically t
"Automatically call clang-format every time save occurs in C/C++ "Automatically call clang-format every time save occurs in C/C++
@@ -2907,8 +2979,8 @@ Here I configure the REPL for Haskell via the
(haskell-stylish-on-save nil) (haskell-stylish-on-save nil)
(haskell-process-type 'stack-ghci) (haskell-process-type 'stack-ghci)
:general :general
(leader (shell-leader
"th" #'+shell/toggle-haskell-repl) "h" #'+shell/toggle-haskell-repl)
:display :display
("\\*haskell.**\\*" ("\\*haskell.**\\*"
(display-buffer-at-bottom) (display-buffer-at-bottom)
@@ -2955,8 +3027,8 @@ Setup for python shell, including a toggle option
:straight nil :straight nil
:commands +python/toggle-repl :commands +python/toggle-repl
:general :general
(leader (shell-leader
"tp" #'+shell/python-toggle-repl) "p" #'+shell/python-toggle-repl)
:display :display
("\\*Python\\*" ("\\*Python\\*"
(display-buffer-at-bottom) (display-buffer-at-bottom)
@@ -3033,15 +3105,11 @@ development on Emacs.
sly-mrepl sly-mrepl
nil) nil)
:general :general
; general binds
(nmap (nmap
:keymaps '(lisp-mode-map sly-mrepl-mode-map) :keymaps '(lisp-mode-map sly-mrepl-mode-map)
"gr" #'sly-eval-buffer "gr" #'sly-eval-buffer
"gd" #'sly-edit-definition "gd" #'sly-edit-definition
"gR" #'sly-who-calls) "gR" #'sly-who-calls)
(leader
"tS" #'+shell/toggle-sly)
(local-leader (local-leader
:keymaps '(lisp-mode-map sly-mrepl-mode-map) :keymaps '(lisp-mode-map sly-mrepl-mode-map)
"s" #'+shell/toggle-sly "s" #'+shell/toggle-sly
@@ -3133,3 +3201,12 @@ appropriately.
(funcall method indent-point state)))))))) (funcall method indent-point state))))))))
(setq-default lisp-indent-function #'+oreo/lisp-indent-function)) (setq-default lisp-indent-function #'+oreo/lisp-indent-function))
#+end_src #+end_src
*** Emacs lisp
#+begin_src emacs-lisp
(use-package elisp-mode
:straight nil
:general
(vmap
:keymaps '(emacs-lisp-mode-map lisp-interaction-mode-map)
"gr" #'eval-region))
#+end_src