:PROPERTIES: :ID: fd5aaf93-1573-491a-baad-4ea3b08ae2ef :END: #+title: GENERAL [[https://github.com/noctuid/general.el][General]] is an [[id:0a87430b-6616-4f92-8ecc-22ceeebf43c6][Emacs]] package to conveniently set keybindings. #+begin_src elisp (use-package general :config (general-evil-setup) ;; set up 'SPC' as the global leader key (general-create-definer leader-keys :states '(normal insert visual emacs) :keymaps 'override :prefix "SPC" ;; set leader :global-prefix "s-SPC") ;; access leader in insert mode (leader-keys "SPC" '(counsel-M-x :wk "Counsel M-x") "." '(find-file :wk "Find file") "=" '(perspective-map :wk "Perspective") ;; Lists all the perspective keybindings "TAB TAB" '(comment-line :wk "Comment lines") "u" '(universal-argument :wk "Universal argument") "M-$" '(jinx-correct :wk "correct word") ) (leader-keys "b" '(:ignore t :wk "Bookmarks/Buffers") "b b" '(switch-to-buffer :wk "Switch to buffer") "b c" '(clone-indirect-buffer :wk "Create indirect buffer copy in a split") "b C" '(clone-indirect-buffer-other-window :wk "Clone indirect buffer in new window") "b d" '(bookmark-delete :wk "Delete bookmark") "b i" '(ibuffer :wk "Ibuffer") "b k" '(kill-current-buffer :wk "Kill current buffer") "b K" '(kill-some-buffers :wk "Kill multiple buffers") "b l" '(list-bookmarks :wk "List bookmarks") "b m" '(bookmark-set :wk "Set bookmark") "b n" '(next-buffer :wk "Next buffer") "b p" '(previous-buffer :wk "Previous buffer") "b r" '(revert-buffer :wk "Reload buffer") "b R" '(rename-buffer :wk "Rename buffer") "b s" '(basic-save-buffer :wk "Save buffer") "b S" '(save-some-buffers :wk "Save multiple buffers") "b x" '(scratch-buffer :wk "scratch buffer") "b w" '(bookmark-save :wk "Save current bookmarks to bookmark file")) (leader-keys "e" '(:ignore t :wk "Eshell/Evaluate") "e b" '(eval-buffer :wk "Evaluate elisp in buffer") "e d" '(eval-defun :wk "Evaluate defun containing or after point") "e e" '(eval-expression :wk "Evaluate and elisp expression") "e h" '(counsel-esh-history :which-key "Eshell history") "e l" '(eval-last-sexp :wk "Evaluate elisp expression before point") "e r" '(eval-region :wk "Evaluate elisp in region") "e R" '(eww-reload :which-key "Reload current page in EWW") "e s" '(eshell :which-key "Eshell") "e w" '(eww :which-key "EWW emacs web wowser")) (leader-keys "f" '(:ignore t :wk "Files") "f c" '((lambda () (interactive) (find-file "~/exocortex/20240715135903-emacs_config_from_scratch.org")) :wk "Open emacs config.org") "f e" '((lambda () (interactive) (dired "~/emacs/")) :wk "Open user-emacs-directory in dired") "f d" '(find-grep-dired :wk "Search for string in files in DIR") "f g" '(counsel-grep-or-swiper :wk "Search for string current file") "f i" '((lambda () (interactive) (find-file "~/emacs/init.el")) :wk "Open emacs init.el") "f j" '(counsel-file-jump :wk "Jump to a file below current directory") "f l" '(counsel-locate :wk "Locate a file") "f r" '(counsel-recentf :wk "Find recent files") "f u" '(sudo-edit-find-file :wk "Sudo find file") "f U" '(sudo-edit :wk "Sudo edit file")) (leader-keys "h" '(:ignore t :wk "Help") "h a" '(counsel-apropos :wk "Apropos") "h b" '(describe-bindings :wk "Describe bindings") "h c" '(describe-char :wk "Describe character under cursor") "h d" '(:ignore t :wk "Emacs documentation") "h d a" '(about-emacs :wk "About Emacs") "h d d" '(view-emacs-debugging :wk "View Emacs debugging") "h d f" '(view-emacs-FAQ :wk "View Emacs FAQ") "h d m" '(info-emacs-manual :wk "The Emacs manual") "h d n" '(view-emacs-news :wk "View Emacs news") "h d o" '(describe-distribution :wk "How to obtain Emacs") "h d p" '(view-emacs-problems :wk "View Emacs problems") "h d t" '(view-emacs-todo :wk "View Emacs todo") "h d w" '(describe-no-warranty :wk "Describe no warranty") "h e" '(view-echo-area-messages :wk "View echo area messages") "h f" '(describe-function :wk "Describe function") "h F" '(describe-face :wk "Describe face") "h g" '(describe-gnu-project :wk "Describe GNU Project") "h i" '(info :wk "Info") "h I" '(describe-input-method :wk "Describe input method") "h k" '(describe-key :wk "Describe key") "h l" '(view-lossage :wk "Display recent keystrokes and the commands run") "h L" '(describe-language-environment :wk "Describe language environment") "h m" '(describe-mode :wk "Describe mode") "h r" '(:ignore t :wk "Reload") "h r r" '((lambda () (interactive) (load-file "~/emacs/init.el") (ignore (elpaca-process-queues))) :wk "Reload emacs config") "h t" '(load-theme :wk "Load theme") "h v" '(describe-variable :wk "Describe variable") "h w" '(where-is :wk "Prints keybinding for command if set") "h x" '(describe-command :wk "Display full documentation for command")) (leader-keys "m l" '(:ignore t :wk "Insert") "m l l" '(org-insert-link-global :wk "Insert link") "m @" '(org-cite-insert :wk "Insert bibliography references")) (leader-keys "o" '(:ignore t :wk "Open") "o d" '(dashboard-open :wk "Dashboard") "o e" '(elfeed :wk "Elfeed RSS") "o f" '(make-frame :wk "Open buffer in new frame") "o F" '(select-frame-by-name :wk "Select frame by name")) ;; projectile-command-map already has a ton of bindings ;; set for us, so no need to specify each individually. (leader-keys "p" '(projectile-command-map :wk "Projectile")) (leader-keys "s" '(:ignore t :wk "Search") "s m" '(man :wk "Man pages") "s t" '(tldr :wk "Lookup TLDR docs for a command") "s w" '(woman :wk "Similar to man but doesn't require man")) (leader-keys "t" '(:ignore t :wk "Toggle") "t e" '(eshell-toggle :wk "Toggle eshell") "t f" '(flycheck-mode :wk "Toggle flycheck") "t l" '(display-line-numbers-mode :wk "Toggle line numbers") "t n" '(neotree-toggle :wk "Toggle neotree file viewer") "t o" '(org-mode :wk "Toggle org mode") "t r" '(rainbow-mode :wk "Toggle rainbow mode") "t t" '(visual-line-mode :wk "Toggle truncated lines") "t v" '(vterm-toggle :wk "Toggle vterm") "t i" '(imenu-list-smart-toggle :wk "Toggle imenu shown in a sidebar")) (leader-keys "w" '(:ignore t :wk "Windows") ;; Window splits "w c" '(evil-window-delete :wk "Close window") "w n" '(evil-window-new :wk "New window") "w s" '(evil-window-split :wk "Horizontal split window") "w v" '(evil-window-vsplit :wk "Vertical split window") ;; Window motions "w h" '(evil-window-left :wk "Window left") "w j" '(evil-window-down :wk "Window down") "w k" '(evil-window-up :wk "Window up") "w l" '(evil-window-right :wk "Window right") "w w" '(evil-window-next :wk "Goto next window") ;; Move Windows "w H" '(buf-move-left :wk "Buffer move left") "w J" '(buf-move-down :wk "Buffer move down") "w K" '(buf-move-up :wk "Buffer move up") "w L" '(buf-move-right :wk "Buffer move right") ;; Maximize buffer "w m m" '(doom/window-maximize-buffer :wk "Maximize buffer") ) (leader-keys "s" '(:ignore t :wk "search") "s b" '(+default/search-buffer :wk "search current buffer")) (leader-keys "i" '(:ignore t :wk "insert") "i a" '(my/insert-auto-tangle-tag :wk "insert autotangle") "i l" '(orb-insert-link :wk "insert reference")) (leader-keys "t" '(:ignore t :wk "toggle") "t l" '(doom/toggle-line-numbers :wk "toggle line number style") "t d" '(org-decrypt-entry :wk "decrypt current heading") "t e" '(org-encrypt-entry :wk "encrypt current heading")) (leader-keys "n r" '(:ignore t :wk "org roam") "n r s" '(org-roam-db-sync :wk "Sync roam database") "n r f" '(org-roam-node-find :wk "Find node") "n r i" '(org-roam-node-insert :wk "insert node link") "n r a" '(org-roam-node-random :wk "random node") "n r r" '(org-roam-buffer-toggle :wk "roam buffer toggle") "n r d" '(:ignore t :wk "org roam dailes") "n r d d" '(org-roam-dailies-goto-date :wk "goto date") "n r d t" '(org-roam-dailies-goto-today :wk "goto date") "n r d n" '(org-roam-dailies-goto-next-note :wk "goto date") "n r d p" '(org-roam-dailies-goto-previous-note :wk "goto date") "n r d T" '(org-roam-dailies-goto-tomorrow :wk "goto date")) (leader-keys "i" '(:ignore t :wk "insert") "i a" '(my/insert-auto-tangle-tag :wk "insert autotangle") "i l" '(orb-insert-link :wk "insert reference")) ) #+end_src ** References + https://gitlab.com/dwt1/dotfiles/-/blob/master/.config/emacs/config.el