Keybindings

Undefining some stuff to make keybind prefixes work correctly.

(general-define-key
 :keymaps 'global-map
 "<mouse-2>" nil
 "<mouse-3>" nil)

(phundrak/evil
  :packages '(counsel)
  "U"   '(evil-redo :package evil)
  "C-a" #'beginning-of-line
  "C-e" #'end-of-line
  "C-y" #'yank
  "M-y" '(counsel-yank-pop :package counsel))
(general-define-key
 "<f5>" #'compile
 "<f6>" #'recompile)

(phundrak/leader-key
  "SPC" '(counsel-M-x :wk "M-x")
  "'"   '(shell-pop :package shell-pop)
  "R"   #'recompile
  "u"   #'universal-argument
  "U"   '(undo-tree-visualize :package undo-tree)

  <<general-keybindings-gen(table=keybindings-tabs, prefix="TAB ")>>
  <<general-keybindings-gen(table=keybindings-apps, prefix="a")>>
  <<general-keybindings-gen(table=keybindings-apps-shell, prefix="as")>>
  <<general-keybindings-gen(table=keybindings-treemacs, prefix="at")>>
  <<general-keybindings-gen(table=keybindings-buffers, prefix="b")>>
  <<general-keybindings-gen(table=keybindings-code, prefix="c")>>
  <<general-keybindings-gen(table=keybindings-errors, prefix="e")>>
  <<keybindings-errors-extra>>
  <<general-keybindings-gen(table=keybindings-files, prefix="f")>>
  <<keybindings-files-extras>>
  <<general-keybindings-gen(table=keybindings-git, prefix="g")>>
  <<general-keybindings-gen(table=keybindings-help, prefix="h")>>
  <<general-keybindings-gen(table=keybindings-insert, prefix="i")>>
  <<general-keybindings-gen(table=keybindings-jump, prefix="j")>>
  <<general-keybindings-gen(table=keybindings-language, prefix="l")>>
  <<general-keybindings-gen(table=keybindings-media, prefix="m")>>
  <<general-keybindings-gen(table=keybindings-org, prefix="o")>>
  <<general-keybindings-gen(table=keybindings-refactor, prefix="r")>>
  <<general-keybindings-gen(table=keybindings-toggle, prefix="t ")>>
  <<general-keybindings-gen(table=keybindings-text, prefix="T")>>
  <<general-keybindings-gen(table=keybindings-windows, prefix="w")>>
  <<general-keybindings-gen(table=keybindings-quit, prefix="q")>>)

Apps

Here are my apps keybindings. Each one of them is prefixed by a.

KeyFunctionDescriptionPackage
apps
ccalc
Ccalendar
CCcalendar
Coorg-agendaorg
Csorg-caldav-syncorg-caldav
ddockerdocker
Eelfeedelfeed
eemail
ecmu4e-compose-newmu4e
emmu4emu4e
kkeycast-modekeycast
Kkeycast-log-modekeycast
mmastodon
mmmastodonmastodon
mnmastodon-notifications-getmastodon
mtmastodon-tootmastodon
Ttetris
Sscreenshotscreenshot
wwttrinwttrin

Shell apps

I also have two main shell-related functions, prefixed with as.

KeyFunctionDescriptionPackage
shells
eeshell-new
vvtermvterm
Vmulti-vtermmulti-vterm

Treemacs

KeyFunctionDescriptionPackage
treemacs
ccreate
cdtreemacs-create-dirtreemacs
cftreemacs-create-filetreemacs
citreemacs-create-icontreemacs
cttreemacs-create-themetreemacs
cwtreemacs-create-workspacetreemacs
dtreemacs-delete-filetreemacs
ffiles
fftreemacs-find-filetreemacs
fttreemacs-find-tagtreemacs
llsp
lstreemacs-expand-lsp-symboltreemacs
ldtreemacs-expand-lsp-treemacs-depstreemacs
lDtreemacs-collapse-lsp-treemacs-depstreemacs
lStreemacs-collapse-lsp-symboltreemacs
pprojects
patreemacs-add-project-to-workspacetreemacs
pftreemacs-project-follow-modetreemacs
pntreemacs-project-of-nodetreemacs
pptreemacs-project-at-pointtreemacs
prtreemacs-remove-project-from-workspacetreemacs
pttreemacs-move-project-downtreemacs
pstreemacs-move-project-uptreemacs
rrename
rftreemacs-rename-filetreemacs
rptreemacs-rename-projecttreemacs
rrtreemacs-renametreemacs
rwtreemacs-rename-workspacetreemacs
ttreemacstreemacs
Ttoggles
Tdtreemacs-toggle-show-dotfilestreemacs
Tntreemacs-toggle-nodetreemacs
vvisit node
vatreemacs-visit-node-acetreemacs
vctreemacs-visit-node-close-treemacstreemacs
vntreemacs-visit-node-defaulttreemacs
yyank
yatreemacs-copy-absolute-path-at-pointtreemacs
yptreemacs-copy-project-path-at-pointtreemacs
yrtreemacs-copy-relative-path-at-pointtreemacs
yftreemacs-copy-filetreemacs

Buffers

My buffer-related keybindings are all prefixed by b.

KeyFunctionDescriptionPackage
buffers
bbufler-switch-bufferbufler
Bbury-buffer
cclone-indirect-buffer
Cclone-indirect-buffer-other-window
lbuflerbufler
dkill-this-buffer
Dkill-buffer
hdashboard-refresh-bufferdashboard
mswitch-to-messages-buffer
nnext-buffer
pprevious-buffer
rcounsel-buffer-or-recentfcounsel
sswitch-to-scratch-buffer

Code

KeyFunctionDescriptionPackage
code
levilnc-comment-or-uncomment-linesevil-nerd-commenter
nhl-todo-nexthl-todo
phl-todo-previoushl-todo

Errors

(defhydra hydra-flycheck
  (:pre (flycheck-list-errors)
   :post (quit-windows-on "*Flycheck errors*")
   :hint nil)
  ("f" flycheck-error-list-set-filter "Filter")
  ("t" flycheck-next-error "Next")
  ("s" flycheck-previous-error "Previous")
  ("gg" flycheck-first-error "First")
  ("G" (progn (goto-char (point-max)) (flycheck-previous-error)) "Last")
  ("q" nil))
KeyFunctionDescriptionPackage
errors
.hydra-flycheck/bodyhydra-flycheck
lcounsel-flycheckcounsel
Fflyspell-hydra/bodyflyspell-hydra
"ee" '(:keymap flycheck-command-map :package 'flycheck :wk "flycheck")
"ef" '(:keymap flyspell-mode-map :package 'flyspell :wk "flyspell")

Files

My keybindings for file manipulation are prefixed by f.

KeyFunctionDescriptionPackage
files
fcounsel-find-filecounsel
Fquick-find-filesquick-find-files
hhexl-find-file
rcounsel-recentfcounsel
ssave-buffer

I also have some keybindings dedicated to opening specific files.

"fc"  '((lambda ()
          (interactive)
          (quick-find-files nil "~/org/config/docs/emacs" "org"))
        :wk "emacs config"
        :package quick-find-files)
"fC"  '((lambda ()
          (interactive)
          (quick-find-files nil "~/org/config/docs" "org"))
        :wk "general config"
        :package quick-find-files)
"fi"  '((lambda ()
          (interactive)
          (find-file (concat user-emacs-directory "init.el")))
        :which-key "init.el")
"fI"  '((lambda ()
          (interactive)
          (quick-find-files nil
                            (expand-file-name "lisp" user-emacs-directory)
                            "el"))
        :which-key "elisp config"
        :package quick-find-files)
"fR"  '((lambda ()
          (interactive)
          (counsel-find-file ""
                             (concat user-emacs-directory
                                    (file-name-as-directory "straight")
                                    (file-name-as-directory "repos"))))
        :which-key "straight package"
        :package counsel)
"fS"  '((lambda ()
          (interactive)
          (find-file "~/org/config/stumpwm.org"))
        :which-key "stumpwm.org")

Git

KeyFunctionDescriptionPackage
git
bmagit-blamemagit
cmagit-clonemagit
dmagit-dispatchmagit
imagit-initmagit
smagit-statusmagit
lmagit-logmagit
ymy/yadmmagit
Smagit-stage-filemagit
Umagit-unstage-filemagit
ffile
fdmagit-diffmagit
fcmagit-file-checkoutmagit
flmagit-file-dispatchmagit
fFmagit-find-filemagit

Help

My keybindings for help are prefixed by h.

KeyFunctionDescription
help
kwhich-key-show-top-levelwhich-key
iinfo
Iinfo-display-manual
ddescribe
dcdescribe-char
dChelpful-command
dfhelpful-callable
didescribe-input-method
dkhelpful-key
dmhelpful-macro
dMhelpful-mode
dpdescribe-package
dshelpful-symbol
dvhelpful-variable

Insert

KeyFunctionDescriptionPackage
insert
ucounsel-unicode-charcounsel
yivy-yasnippetyasnippet

Jump

My keybindings for jumping around are prefixed by j.

KeyFunctionDescriptionPackage
jump
Cavy copy
Clavy-copy-lineavy
Cravy-copy-regionavy
Ddired-jump-other-window
Umy/avy-open-urlopen-urlavy
bavy-pop-markavy
cevil-avy-goto-char-timeravy
ddirvish-dwimdirvish
fcounsel-file-jumpcounsel
kavy kill
kLavy-kill-ring-save-whole-lineavy
kRavy-kill-ring-save-regionavy
klavy-kill-whole-lineavy
kravy-kill-regionavy
lavy-goto-lineavy
mmove
mlavy-move-lineavy
mravy-move-regionavy
mtavy-transpose-lines-in-regionavy
navy-nextavy
pavy-prevavy
umy/avy-goto-urlgoto-urlavy

Language

KeyFunctionDescriptionPackage
language
Blangtool-correct-bufferlangtool
blangtool-check-bufferlangtool
clangtool-checklangtool
Clangtool-correct-at-pointlangtool
dlangtool-check-donelangtool
llangtool-switch-default-languagelangtool
plangtool-show-message-at-pointlangtool
rlangtool-correct-regionlangtool

Media

KeyFunctionDescriptionPackage
media
.hydra-media/bodyhydra-mediaemms
«emms-player-mpd-previousemms
»emms-player-mpd-nextemms
cemms-player-mpd-clearemms
eemms
ebemms-browseremms
epemms-playlist-mode-goemms
esemms-player-mpd-showemms
pmy/mpc-togglempd-play-pause
semms-stopemms
uupdate
umemms-player-mpd-update-allemms
ucemms-cache-set-from-mpd-allemm s

Project

My keybindings for my projects are prefixed by p.

KeyFunctionDescriptionPackage
project
!projectile-run-shell-command-in-rootprojectile
&projectile-run-async-shell-command-in-rootprojectile
bcounsel-projectile-switch-to-buffercounsel
ccounsel-projectilecounsel
dcounsel-projectile-find-dircounsel
eprojectile-edit-dir-localsprojectile
fcounsel-projectile-find-filecounsel
gprojectile-find-tagprojectile
kproject-kill-buffers
pcounsel-projectile-switch-projectcousel
vprojectile-vcprojectile

Refactor

KeyFunctionDescriptionPackage
refactor
ievil-iedit-state/iedit-modeiedit-modeevil-iedit-state
qevil-iedit-state/quit-iedit-modequit-iedit-modeevil-iedit-state

Org

KeyFunctionDescriptionPackage
org
corg-captureorg
rroam
rborg-mark-ring-gotobackorg-roam
rBorg-roam-buffer-toggleorg-roam
rnnodes
rnforg-roam-node-findorg-roam
rniorg-roam-node-insertorg-roam
rnoorg-roam-node-openorg-roam
rnrorg-roam-node-randomorg-roam
rnvorg-roam-node-visitorg-roam
rssync
rsaorg-roam-db-autosync-modeorg-roam
rscorg-roam-db-clear-allorg-roam
rsdorg-roam-db-diagnose-nodeorg-roam
rssorg-roam-db-syncorg-roam
ruui
ruaorg-roam-ui-add-to-local-graphorg-roam
ruoorg-roam-ui-openorg-roam

Tabs

Emacs has native tabs available, which can be interesting when working on multiple projects at once between which we may want to switch. Tabs allow the user not to have multiple frames while keeping the advantages of having multiple frames.

My keybindings are prefixed by SPC TAB.

KeyFunctionDescription
tabs
TABtab-switch
»tab-next
«tab-previous
ctab-new
Ctab-new-to
dtab-close
ntab-next
ptab-previous
rtab-rename

Text

The prefix here is T.

KeyFunctionDescriptionPackage
text
estring-edit-at-pointstring-edit-at-point
udowncase-region
Uupcase-region
zhydra-zoom/body

Toggles

My toggle keybindings are prefixed by t.

KeyFunctionDescription
toggles
TABtab-bar-mode
tmy/modify-frame-alpha-background/body
Tcounsel-load-theme
ddebug
detoggle-debug-on-error
dqtoggle-debug-on-quit
iinput method
ittoggle-input-method
isset-input-method

Windows

A couple of keybindings are hidden from which-key, otherwise there’s not much to say. The prefix here is w.

KeyFunctionDescriptionPackage
windows
cevil-window-leftevil
tevil-window-downevil
sevil-window-upevil
revil-window-rightevil
.windows-adjust-size/body
-split-window-below-and-focus
$winum-select-window-by-numberwinum
0winum-select-window-0-or-10nonewinum
1winum-select-window-1nonewinum
2winum-select-window-2nonewinum
3winum-select-window-3nonewinum
4winum-select-window-4nonewinum
5winum-select-window-5nonewinum
6winum-select-window-6nonewinum
7winum-select-window-7nonewinum
8winum-select-window-8nonewinum
9winum-select-window-9nonewinum
bkill-buffer-and-delete-window
ddelete-window
oother-window
Ddelete-other-windows
wwriteroom
w.writeroom-buffer-width/bodywriteroom-mode
wwwriteroom-modewriteroom-mode

Quit

Why would I ever use any of these keybindings? They are prefixed with q.

KeyFunctionDescription
quit
fdelete-frame
qsave-buffers-kill-terminal
Qkill-emacs