├── images ├── master.png ├── concepts.png ├── packages.png ├── keybindings.png └── master-buffer.png ├── LICENSE ├── README.md └── learning-spiral-hydras.el /images/master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooersLab/emacs-learning-spiral-hydra/main/images/master.png -------------------------------------------------------------------------------- /images/concepts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooersLab/emacs-learning-spiral-hydra/main/images/concepts.png -------------------------------------------------------------------------------- /images/packages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooersLab/emacs-learning-spiral-hydra/main/images/packages.png -------------------------------------------------------------------------------- /images/keybindings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooersLab/emacs-learning-spiral-hydra/main/images/keybindings.png -------------------------------------------------------------------------------- /images/master-buffer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MooersLab/emacs-learning-spiral-hydra/main/images/master-buffer.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Blaine Mooers and the OU Board of Regents 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Version](https://img.shields.io/static/v1?label=emacs-learning-sprial-hydra&message=0.6.1&color=brightcolor) 2 | [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) 3 | 4 | 5 | # Lazy mastery of Emacs with Hydras 6 | 7 | ## Brief introduction for the impatient 8 | The above `learning-spiral-hydras.el` file supports a lazy approach to mastering key bindings (keyboard shortcuts) in the core of GNU Emacs. 9 | The commands you try to master are listed in multi-part pop-up menus. 10 | I could have mapped these commands to the functions that they represent, but I did not do so to force the manual entry of the key bindings. 11 | This is a learning aid, not a crutch. 12 | 13 | The parent pop-up menu is invoked by entering `C-c 1` from any buffer. 14 | Navigate to the child menus by clicking on the blue colored letter. 15 | Each child menu is a separate Hydra. 16 | Feel free to break these Hydras into standalone Hydras. 17 | 18 | Menus (Hydras) specific to particular major modes and packages are under development as separate Hydras to minimize the nesting of Hydras. 19 | One child menu exists for LaTeX-mode. 20 | 21 | The file is easily edited for customization to meet your needs. 22 | I expect it to be used as a template. 23 | If you are a beginning Emacs user, you can use these lists to jump-start your use of Emacs. 24 | 25 | The code blocks and snapshots below show the individual hydras. 26 | The lists of keybindings in these hydras are abbreviated to save space. 27 | The `learning-spiral-hydras.el` contains my current GNU Emacs core hydras, which are more numerous than those in the lists shown below. 28 | 29 | Of course, you can access similar information by using the built-in info system. 30 | However, beginners need help with this extensive system. 31 | The above may Hydras help beginners jump-start using the keybindings, including those that access the info system. 32 | 33 | ## Longer introduction for the curious 34 | [Hydras](https://github.com/abo-abo/hydra) are popup menus in Emacs--the ultimate text editor that is ``hard to learn but easy to use''. 35 | Hydras demonstrate the highly configurable nature of Emacs. 36 | These pop-up menus are called Hydras because one Hydra popup menu can be used to call many other Hydra popup menus. 37 | However, only one Hydra is displayed at a time. 38 | 39 | I use a **Hydras of Hydras** as a port of entry to all my Hydras. 40 | There is no limit to how deeply the Hydras can be nested. 41 | Because of this feature, the analogy with the mythological beast breaks down to the disappointment of those who know their Greek mythology. 42 | 43 | Hydras are often associated with a specific Emacs package to ease the use of the functions in that package. 44 | They provide shortcuts in single or multiple letters that can be entered on the keyboard or clicked on with the cursor to invoke the associated function. 45 | In addition to running elisp functions inside Emacs, Hydras can open external applications from inside Emacs, open specific files for editing or reading, and open specific web pages in your default browser. 46 | The latter two features can be done using the bookmarks package built into Emacs's core. 47 | The blue-colored letters in the snapshot of the Hydra below are mapped to commands invoked by clicking the letter(s) with the cursor. 48 | Hydras are used to evade learning the corresponding key bindings. 49 | 50 |

HTML5 Icon

51 | 52 | Here, we take the opposite approach! 53 | We use Hydras's pop-up menu to quickly access a list of Emacs keybindings for which we are trying to build muscle memory. 54 | We are trying to build up muscle memory of the key bindings so that we do not have to recall them when we need to use them. 55 | We open the pop-up menu by entering `C-c 1`. 56 | We can close the Hydra by clicking on it, the **q** button, or entering **q** on the keyboard. 57 | 58 | The lazy way of using this list is to invoke it at the start of a work session in Emacs. 59 | We can scan the list as a quick reminder of the keybindings we are trying to master. 60 | A more robust approach would be to set aside several minutes to enter each keybinding we are trying to master five or ten times on the keyboard to build muscle memory. 61 | You would unlikely have time to review the complete list, but this approach is practical when working with 5 to 10 new keybindings daily. 62 | The goal is to build the muscle memory of the key bindings on this list. 63 | 64 | After the keybinding is internalized, you can move it to the list of mastered keybindings in another hydra that lists the keybindings you think you have mastered. 65 | The list of mastered key bindings can be reviewed occasionally to ensure you have mastered them. 66 | You invoke this second Hydra by clicking the `km` button: `km` represents `keybindings mastered`. 67 | 68 | You can use the Hydras in the above `learning-spiral-hydra.el` file as templates to make additional Hydras. 69 | For example, you might want a Hydra specific to a particular package or major mode with a long list of key bindings you are trying to master. 70 | These related key bindings could be stored in a separate Hydra to reduce the clutter of the master Hydra. 71 | 72 | There is a limit to how many key bindings you can display in a Hydra. 73 | The font size and the height of your computer screen impose the limit. 74 | You can only zoom out so far before the font grows too tiny to see. 75 | 76 | You can display the keybindings in multiple columns. 77 | I have yet to master setting up multiple columns in an easy way, so I tend to avoid this tactic. 78 | I find it easier to create a second Hydra when there are overflow key bindings. 79 | Just click on `n` to advance to the next section of the list of keybindings. 80 | 81 | ## History 82 | The Hydras in the above file were inspired by a recent Austin Emacs Meetup discussion where Ag mentioned maintaining a list of keybindings that he was trying to master. 83 | I think he was using an org file to store this list. 84 | I am reducing the friction further by negating the need to navigate to such a file. 85 | You do not have to remember the name or location of that org file. 86 | This can be a problem if there has been a long break from viewing this file. 87 | Just enter `C-c 1` from any buffer to display the master learning spiral Hydra. 88 | The use of the master Hydra has a lower energy barrier than navigating to a text file. 89 | 90 | 91 | ## Related repositories 92 | ### Emacs quizzes 93 | A more active means of mastering the keybindings is to take [quizzes](https://github.com/MooersLab/qemacs) about them. 94 | The above PDFs of quiz questions can be printed, and the quiz can be taken when away from the computer. 95 | These quizzes can be taken when you have time to kill, such as standing in the airport boarding line, commuting on public transit, or waiting for a seminar to start. 96 | 97 | 103 | 104 | ### Related Desktop Wallpaper 105 | 106 | I made a desktop [wallpaper of common Emacs keybindings](https://codeberg.org/MooersLab/EmacsWallPaper). 107 | Sometimes this is useful to quickly discover what keybindings you have not mastered in Emacs. 108 | It is a more passive and lazier approach. 109 | It might be helpful for some beginners. 110 | You can use it as a template to create your own. 111 | 112 | 113 | ## Installation 114 | 115 | Install where you see fit. 116 | My emacs directory (i.e., `~/emacs29`) is not a hidden folder, unlike what is recommended. 117 | I store my Hydras in a subfolder called `my-hydras` (i.e., `~/emacs29/my-hydras`). 118 | 119 | 120 | ```elisp 121 | git clone https://github.com/MooersLab/emacs-learning-spiral-hydra.git 122 | ``` 123 | 124 | ### Requirements 125 | 126 | Requires the `hydra` package from MELPA. 127 | I also use the `pretty-hydra` package. 128 | I use version 30.0.5 of GNU Emacs on an Intel Mac. 129 | It should work with version 29 of GNU Emacs and perhaps earlier versions of Emacs. 130 | 131 | 132 | ### Configuration 133 | 134 | The configuration below is for the users of the `use-package` package system for managing Emacs packages. 135 | 136 | - Customize the file path. I store the file `learning-spiral-hydra.el` inside of the folder `~/emacs29/my-hydras/`. I do not use hidden files to store my Emacs configuration. 137 | - Customize the keybinding below if it conflicts. Check by entering `C-h k C-c 1`, where `C` stands for the Control key and the `-` means press the Control key with the second key simultaneously. 138 | - Customize the content of each Hydra to meet your learning objectives. 139 | - Add the following lines to your init.el file. The file my-hydra.el is a master Hydra for calling other Hydras. You do not need it if you only use the emacs-learning-spiral Hydra. 140 | 141 | ```elisp 142 | (use-package learning-spiral-hydras 143 | :load-path "~/emacs29/my-hydras/") 144 | (global-set-key (kbd "C-c 1") 'hydra-of-learning-spiral/body) 145 | 146 | ;;;## reload-init 147 | ;; Inspried https://sachachua.com/dotemacs/index.html#org4dd39d0 148 | (defun reload-init () 149 | "Reload my init.el file. Edit the path to suite your needs." 150 | (interactive) 151 | (load-file "~/emacs29/init.el")) 152 | 153 | ;;;## reload-hydras 154 | (defun reload-hydras () 155 | "Reload my-hydras.el. Edit the path to suite your needs." 156 | (interactive) 157 | (load-file "~/emacs29/my-hydras/my-hydras.el")) 158 | 159 | ;;;## reload-learning-spiral-hydras 160 | (defun reload-learning-spiral-hydras () 161 | "Reload learning-spiral-hydras.el. Edit the path to suite your needs." 162 | (interactive) 163 | (load-file "~/emacs29/my-hydras/learning-spiral-hydras.el")) 164 | ``` 165 | 166 | #### Caveats 167 | You may have to delete the following line from each Hydra if you lack a master **hydra-of-hydras**. 168 | 169 | ```elisp 170 | ("z" hydra-of-hydras/body :color blue) 171 | ``` 172 | 173 | # Learning spiral hydra 174 | Below is a literate programming document. 175 | It was generated using the `elispdoc` package found [here](https://github.com/benleis1/elispdoc). 176 | This document has been extensively edited subsequently. 177 | 178 | This is a nested set of Hydras. 179 | The Hydra at the bottom is the master Hydra: **hydra-of-learning-spiral**. 180 | It has commands for calling the other Hydras above it. 181 | 182 | ## hydra-of-learning-spiral-concepts-mastered 183 | 184 |

HTML5 Icon

185 | 186 | 187 | This hydra is a to-do list of skills that I am trying to master. 188 | ```elisp 189 | (defhydra hydra-of-learning-spiral-concepts-mastered (:hint nil) 190 | " 191 | ^Concepts and skills trying to master 192 | ----------------------------------------------------------------------------- 193 | LaTeX workflow in Emacs 194 | Voice control in Emacs 195 | Snippets of code blocks in org-mode. 196 | 197 | ^---------------------------------------------------------------------------- 198 | _km_ learning spral: keybindings mastered 199 | _p_ learning sprial: packages trying to master 200 | 201 | _ls_ Return to learning spiral 202 | _z_ Return to parent hdyra-of-hydras 203 | _q_ quit 204 | ^---------------------------------------------------------------------------- 205 | " 206 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 207 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 208 | ("ls" hydra-of-learning-spiral/body :color blue) 209 | ("z" hydra-of-hydras/body :color blue) 210 | ("q" nil :color blue)) 211 | ``` 212 | 213 | 214 | ## hydra-of-learning-spiral-keybindings-mastered 215 | 216 |

HTML5 Icon

217 | 218 | This hydra in a list of keybindings that I thought I had mastered. 219 | I list these as a reality check and as a reminder after long gaps in the use of these keybindings. 220 | 221 | ```elisp 222 | (defhydra hydra-of-learning-spiral-keybindings-mastered (:hint nil) 223 | " 224 | ^Keybindings and commands mastered 225 | ------------------------------------------------------------------------------ 226 | C-x C-c Quit Emacs 227 | C-g Abort command entry 228 | C-x C-s Save file 229 | C-x C-w Write file 230 | C-x C-f Open a file 231 | C-x d Open dired 232 | C-x C-e Run elisp sexp 233 | C-c C-e Export org-mode to another format 234 | C-c C-a Compile to PDF when in latex-mode or auctex-mode 235 | C-1 Close buffer 236 | C-x 1 Display only one buffer 237 | C-c 0 Display hydra-of-hydras 238 | C-y Paste 239 | C-w Cut 240 | M-w Copy 241 | C-c 0 Display master hydra 242 | C-c 1 Display learning spiral hdyra 243 | 244 | M-x eval-buffer 245 | M-x reload-hdyra 246 | 247 | ^------------------------------------------------------------------------------ 248 | 249 | _c_ learning spiral: concepts trying to master 250 | _p_ learning sprial: packages trying to master 251 | 252 | _ls_ Return to learning spiral 253 | _z_ Return to parent hdyra-of-hydras 254 | _q_ quit 255 | ^------------------------------------------------------------------------------ 256 | " 257 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 258 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 259 | 260 | ("ls" hydra-of-learning-spiral/body :color blue) 261 | ("z" hydra-of-hydras/body :color blue) 262 | ("q" nil :color blue)) 263 | ``` 264 | 265 | 266 | ## hydra-of-learning-spiral-packages-mastered 267 | 268 |

HTML5 Icon

269 | 270 | ```elisp 271 | (defhydra hydra-of-learning-spiral-packages-mastered (:hint nil) 272 | " 273 | ^Packages trying to master 274 | ^------------------------------------------------------------------------------ 275 | 276 | auctex 277 | latex-mode 278 | lsp-grammarly 279 | copilot 280 | 281 | ^------------------------------------------------------------------------------ 282 | 283 | _km_ learning spiral: keybindings mastered 284 | _c_ learning spiral: concepts trying to master 285 | 286 | _ls_ Return to learning spiral 287 | _z_ Return to parent hdyra-of-hydras 288 | _q_ quit 289 | ^------------------------------------------------------------------------------ 290 | " 291 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 292 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 293 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 294 | 295 | ("ls" hydra-of-learning-spiral/body :color blue) 296 | ("z" hydra-of-hydras/body :color blue) 297 | ("q" nil :color blue)) 298 | ``` 299 | 300 | 301 | ## hydra-of-learning-spiral 302 | This is the master hydra that lists the commands that I am trying to master. 303 | This Hydra also calls several child Hydras that list the following: 304 | 305 | - the keybindings that I think I have mastered 306 | - the concepts that I am trying to master 307 | - the packages that I am trying to master 308 | 309 | The current version of the list of keybindings to master spans multiple Hydras. 310 | There is a blue-colored letter **n** that you click on to advance to the next hydra in the series. 311 | 312 | ```elisp 313 | (defhydra hydra-of-learning-spiral (:hint nil) 314 | " 315 | ^Commands trying to master 316 | -------------------------------------------------------------------------------------------- 317 | C-c = Use in auctex-mode to display the TOC of the document in a separate buffer. 318 | C-c d Display pop-up with info about text file, including the word count. 319 | C-h l Display list of the last commands executed. 320 | s-, Open the customize buffer. 321 | C-[scrollwheel-up] Zoom text in. 322 | C-[scrollwheel-down] Zoom text out. 323 | 324 | M-x delete-trailing-whitespace 325 | M-x lsp 326 | M-x query-replace M-percent sign 327 | M-x elispdoc-process-elisp-to-doc-buffer 328 | 329 | 330 | ^------------------------------------------------------------------------------------------- 331 | 332 | _km_ learning spiral: keybindings mastered 333 | _c_ learning spiral: concepts trying to master 334 | _p_ learning spiral: packages trying to master 335 | _he_ edit /emacs29/my-hydras/my-hydras.el 336 | _i_ edit init.el 337 | _ri_ reload init.el 338 | _rh_ reload hydras 339 | _z_ Return to parent hdyra-of-hydras 340 | _q_ quit 341 | ^------------------------------------------------------------------------------ 342 | " 343 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 344 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 345 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 346 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 347 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 348 | ("ri" (reload-init) :color blue) 349 | ("rh" (reload-hydras) :color blue) 350 | ("z" hydra-of-hydras/body :color blue) 351 | ("q" nil :color blue)) 352 | ``` 353 | 354 | ## Funding sources 355 | - NIH: R01 CA242845, R01 AI088011 356 | - NIH: P30 CA225520 (PI: R. Mannel); 357 | - NIH: P20GM103640 and P30GM145423 (PI: A. West) 358 | 359 | ## Update history 360 | 361 | |Version | Changes | Date | 362 | |:--------------|:----------------------------------------------------------------------------------------------------------------------|:--------------------| 363 | | Version 0.6 | Added the funding sources and this update table to README.md. Fixed typos in README.md | 2024 April 16 | 364 | | Version 0.6.1 | Fixed the alignment of this table. Further edits of the README.md to improve the grammar. | 2024 September 7 | 365 | 366 | 367 | 368 | 369 | 370 | > The first draft of this file was auto-generated by [elispdoc.el](https://github.com/benleis1/elispdoc) 371 | -------------------------------------------------------------------------------- /learning-spiral-hydras.el: -------------------------------------------------------------------------------- 1 | ;;; Learning Spiral Hydras 2 | ;; 3 | ;; These hydras are meant to be an in-line memory aid. 4 | ;; The master learning spiral hydra is invoked with C-c l s 5 | ;; It is meant to support the gradual mastery of Emacs. 6 | ;; 7 | ;; This is a nested set of hydras. 8 | ;; The hydra at the bottom is the master hydra: hydra-of-learning-spiral. 9 | 10 | ;; This hydra in a to-do list of skills that I am trying to master. 11 | 12 | ;;;# hydra-of-learning-spiral-concepts-mastered 13 | 14 | (defhydra hydra-of-learning-spiral-concepts-mastered (:hint nil) 15 | " 16 | ^Concepts and skills trying to master 17 | ^----------------------------------------------------------------------------- 18 | bookmarks 19 | LaTeX workflow in Emacs 20 | lfortran in code-blocks via jupyter org-babel language 21 | macros 22 | reading email in Emacs 23 | regex Emacs style 24 | Voice computing in Emacs 25 | 26 | ^---------------------------------------------------------------------------- 27 | _km_ learning spiral: keybindings mastered 28 | _p_ learning spiral: packages trying to master 29 | _s_ Return to learning spiral 30 | _ri_ reload init.el 31 | _rh_ reload my-hydras 32 | _rl_ reload learning-spiral-hydras 33 | _zz_ Return to parent hdyra-of-hydras 34 | _q_ quit 35 | ^---------------------------------------------------------------------------- 36 | " 37 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 38 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 39 | ("s" hydra-of-learning-spiral/body :color blue) 40 | ("ri" (reload-init) :color blue) 41 | ("rh" (reload-hydras) :color blue) 42 | ("rl" (reload-learning-spiral-hydras) :color blue) 43 | ("zz" hydra-of-hydras/body :color blue) 44 | ("q" nil :color blue)) 45 | 46 | 47 | ;;;# hydra-of-learning-spiral-keybindings-mastered 48 | ;; This hydra in a list of keybindings I thought I had mastered. 49 | ;; I list these as a reality check and as a reminder after long gaps 50 | ;; in use of these keybindings. 51 | 52 | 53 | (defhydra hydra-of-learning-spiral-keybindings-mastered (:hint nil) 54 | " 55 | ^Keybindings and commands mastered 56 | ^------------------------------------------------------------------------------ 57 | C-x C-c Quit Emacs. 58 | C-g Abort command entry. 59 | C-x C-s Save buffer to a file. 60 | C-x C-w Write buffer to the specified file. 61 | C-x C-f Open a file. 62 | C-x d Open dired. 63 | C-x C-e Run elisp sequential expression (sexp). 64 | C-x u Undo. 65 | C-c C-e Export org-mode to another format. 66 | C-c C-a Compile to PDF when in latex-mode or auctex-mode. 67 | C-1 Close buffer. 68 | C-x 1 Display only one buffer. 69 | C-c 0 Display hydra-of-hydras. 70 | C-c 1 Display learning spiral hydra. 71 | C-y Paste. 72 | C-w Cut or kill selection. 73 | M-w Copy selection to kill ring (clipboard) but do not kill. 74 | s-c Copy. 75 | C-o Insert a yasnippet snippet. 76 | C-c 0 Open my-hydras.el 77 | C-space Set mark for a selection. 78 | C-k Kill a line or region. 79 | C-a Move to the beginning of line. 80 | C-e Move to the end of line. 81 | C-s Search forward. 82 | C-r Search backward. 83 | 84 | 85 | M-x eval-buffer 86 | M-x reload-hydra (reload my-hydras) 87 | 88 | ^------------------------------------------------------------------------------ 89 | _c_ learning spiral: concepts trying to master 90 | _p_ learning spiral: packages trying to master 91 | _l_ edit learning-spiral-hydras.el 92 | _s_ Return to learning spiral 93 | _ri_ reload init.el 94 | _rh_ reload my-hydras 95 | _rl_ reload learning-spiral-hydras 96 | _zz_ Return to parent hdyra-of-hydras 97 | _q_ quit 98 | ^------------------------------------------------------------------------------ 99 | " 100 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 101 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 102 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 103 | ("s" hydra-of-learning-spiral/body :color blue) 104 | ("ri" (reload-init) :color blue) 105 | ("rh" (reload-hydras) :color blue) 106 | ("rl" (reload-learning-spiral-hydras) :color blue) 107 | ("zz" hydra-of-hydras/body :color blue) 108 | ("q" nil :color blue)) 109 | 110 | 111 | ;;;# hydra-of-learning-spiral-packages-mastered 112 | (defhydra hydra-of-learning-spiral-packages-mastered (:hint nil) 113 | " 114 | ^Packages trying to master 115 | ^------------------------------------------------------------------------------ 116 | bookmarks+ 117 | cider 118 | copilot 119 | dired 120 | diredx 121 | hyperbole 122 | isceles 123 | lsp-ltex 124 | lsp-grammarly 125 | LaTeX-mode 126 | magit 127 | org-agenda 128 | org-babel code blocks 129 | org-roam 130 | treesitter 131 | advanced features of yasnippets 132 | zetteldesk 133 | ^------------------------------------------------------------------------------ 134 | _a_ learning spiral: auctex and latex 135 | _km_ learning spiral: keybindings mastered 136 | _c_ learning spiral: concepts trying to master 137 | _l_ edit learning-spiral-hydras.el 138 | _s_ Return to learning spiral 139 | _ri_ reload init.el 140 | _rh_ reload my-hydras 141 | _rl_ reload learning-spiral-hydras 142 | _zz_ Return to parent hdyra-of-hydras 143 | _q_ quit 144 | ^------------------------------------------------------------------------------ 145 | " 146 | ("a" hydra-of-learning-spiral-latex/body :color blue) 147 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 148 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 149 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 150 | ("s" hydra-of-learning-spiral/body :color blue) 151 | ("ri" (reload-init) :color blue) 152 | ("rh" (reload-hydras) :color blue) 153 | ("rl" (reload-learning-spiral-hydras) :color blue) 154 | ("zz" hydra-of-hydras/body :color blue) 155 | ("q" nil :color blue)) 156 | 157 | 158 | ;;;# hydra-of-learning-spiral-latex 159 | (defhydra hydra-of-learning-spiral-latex (:hint nil) 160 | " 161 | ^Commands trying to master 162 | ^---------------------------------------------------------------------------------------- 163 | C-h m Show information on the current major mode. 164 | C-c C-h Shows all bindings that start with C-c. 165 | C-h b Shows all bindings currently available. 166 | 167 | C-c C-s Insert sections and subsections. Will be prompted for title and label. 168 | C-c C-e Insert environments. 169 | C-c ] Close environment. 170 | C-u C-c C-e Change the type of the current innermost environment. 171 | 172 | C-c . Mark the current environment. 173 | C-c * Mark the current section/subsection. 174 | C-c ] Close current environment. 175 | C-M-a Find matching begin environment. 176 | C-M-e Find matching end environment. 177 | C-c C-m Insert macro. 178 | 179 | C-c C-f C-e Add a emph and place the cursor between the braces. Wrap a selection. 180 | C-c C-f C-b Ditto with textbf. 181 | C-c C-f C-c Ditto with textsc. 182 | C-c C-f C-i Ditto with textit. 183 | C-c C-f C-t Ditto with texttt. 184 | C-c C-f ? Give you a list of all possibilities. 185 | 186 | C-x n n Recursive narrowing, toggle on and off. 187 | C-c C-a Compile file into a PDF. 188 | C-c C-c Do the most appropriate compilation activity.\ 189 | C-c C-r Do appropriate compilation activity to the region pinned by C-c C-t C-r 190 | C-c C-v View document. 191 | 192 | C-c C-j Add an item to a list. 193 | C-c percent sign Comment or uncomment a paragraph. 194 | C-c ; Comment or uncomment a region. 195 | C-c * Mark a section. 196 | C-c C-o C-b Toggle folding. 197 | 198 | C-c Open list of suffixes for C-c 199 | C-c ? Find documentation. 200 | C-c TAB Open the AucTeX manual. 201 | C-c o Start pomodoro. 202 | C-c y Open yasnippet hydra. 203 | 204 | C-c ( Add a label. Autosuggesions based on section. 205 | C-c ) Add a ref. Select from a list of labels. 206 | C-c [ Insert citation. 207 | C-c = RET Go to section and hide TOC buffer. 208 | C-c = SPC Go to section and do not hide TOC buffer. 209 | < Increase the level. 210 | > Reduce the level. 211 | ^---------------------------------------------------------------------------------------- 212 | _km_ learning spiral: keybindings mastered 213 | _c_ learning spiral: concepts trying to master 214 | _p_ learning spiral: packages trying to master 215 | _he_ edit /emacs29/my-hydras/my-hydras.el 216 | _i_ edit init.el 217 | _ri_ reload init.el 218 | _zl_ Return to main learning spiral hydra. 219 | _zz_ Return to parent hdyra-of-hydras 220 | _q_ quit 221 | ^------------------------------------------------------------------------------ 222 | " 223 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 224 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 225 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 226 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 227 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 228 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 229 | ("ri" (reload-init) :color blue) 230 | ("rl" (reload-learning-spiral-hydras) :color blue) 231 | ("zl" hydra-of-learning-spiral/body :color blue) 232 | ("zz" hydra-of-hydras/body :color blue) 233 | ("q" nil :color blue)) 234 | 235 | 236 | ;;;# hydra-of-learning-spiral-part-four 237 | 238 | (defhydra hydra-of-learning-spiral-part-five (:hint nil) 239 | " 240 | ^Commands trying to master 241 | ^---------------------------------------------------------------------------------------- 242 | M-x delete-trailing-whitespace 243 | M-x ispell-region 244 | M-x ispell-buffer 245 | M-x flyspell-mode 246 | M-x lsp 247 | M-x query-replace 248 | M-x query-replace-regexp 249 | M-x elispdoc-process-elisp-to-doc 250 | M-x shell 251 | M-x eshell 252 | M-x recover-session 253 | M-x revert-buffer 254 | 255 | ^---------------------------------------------------------------------------------------- 256 | _a_ auctex and latex learning spiral 257 | _km_ learning spiral: keybindings mastered 258 | _c_ learning spiral: concepts trying to master 259 | _p_ learning spiral: packages trying to master 260 | _he_ edit /emacs29/my-hydras/my-hydras.el 261 | _i_ edit init.el 262 | _l_ edit learning-spiral-hydras.el 263 | _ri_ reload init.el 264 | _rl_ reload learning-spiral-hydras 265 | _zz_ Return to parent hdyra-of-hydras 266 | _q_ quit 267 | ^------------------------------------------------------------------------------ 268 | " 269 | ("a" hydra-of-learning-spiral-latex/body :color blue) 270 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 271 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 272 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 273 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 274 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 275 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 276 | ("ri" (reload-init) :color blue) 277 | ("rl" (reload-learning-spiral-hydras) :color blue) 278 | ("zz" hydra-of-hydras/body :color blue) 279 | ("q" nil :color blue)) 280 | 281 | 282 | ;;;# hydra-of-learning-spiral-part-four 283 | (defhydra hydra-of-learning-spiral-part-four (:hint nil) 284 | " 285 | ^Commands trying to master 286 | ^---------------------------------------------------------------------------------------- 287 | C-d Delete character. 288 | M-d Delete word. 289 | M-0 C-k Delete to beginning of the line. 290 | M-k Delete sentence forward. 291 | C-x DEL Delete sentence backward. 292 | ^---------------------------------------------------------------------------------------- 293 | _n_ next part of this learning spiral. 294 | _a_ auctex and latex learning spiral. 295 | _km_ learning spiral: keybindings mastered. 296 | _c_ learning spiral: concepts trying to master. 297 | _p_ learning spiral: packages trying to master. 298 | _he_ edit /emacs29/my-hydras/my-hydras.el. 299 | _i_ edit init.el 300 | _l_ edit learning-spiral-hydras.el. 301 | _ri_ reload init.el. 302 | _rl_ reload learning-spiral-hydras. 303 | _zz_ Return to parent hdyra-of-hydras. 304 | _q_ quit 305 | ^-------------------------------------------------------------------------------------- 306 | " 307 | ("n" hydra-of-learning-spiral-part-five/body :color blue) 308 | ("a" hydra-of-learning-spiral-latex/body :color blue) 309 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 310 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 311 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 312 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 313 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 314 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 315 | ("ri" (reload-init) :color blue) 316 | ("rl" (reload-learning-spiral-hydras) :color blue) 317 | ("zz" hydra-of-hydras/body :color blue) 318 | ("q" nil :color blue)) 319 | 320 | 321 | ;;;# hydra-of-learning-spiral-part-three 322 | (defhydra hydra-of-learning-spiral-part-three (:hint nil) 323 | " 324 | ^Commands trying to master 325 | ^---------------------------------------------------------------------------------------- 326 | C-w Kill region. 327 | M-w Copy region to kill ring. 328 | M-z char Kill through character char. 329 | M-y Replace last yank with previous kill. 330 | C-x C-x Exchange point and mark. 331 | 332 | M-h Mark paragraph. 333 | C-x C-p Mark page. 334 | C-M-@ Mark sexp 335 | C-M-h Mark function. 336 | C-x h Mark entire buffer. 337 | 338 | C-x n n Toggle narrowing on the region. Works in the LateX-mode. 339 | Installed recursive-narrowing package first. 340 | 341 | M-percent sign Iteratively replace a string. 342 | 343 | M-u Uppercase a word. 344 | M-l Lowercase a word. 345 | M-c Capitalize a word. 346 | C-x C-u Uppercase a region. 347 | C-x C-l Lowercase a region. 348 | ^---------------------------------------------------------------------------------------- 349 | _n_ next part of this learning spiral. 350 | _a_ auctex and latex learning spiral 351 | _km_ learning spiral: keybindings mastered 352 | _c_ learning spiral: concepts trying to master 353 | _p_ learning spiral: packages trying to master 354 | _he_ edit /emacs29/my-hydras/my-hydras.el 355 | _i_ edit init.el 356 | _l_ edit learning-spiral-hydras.el 357 | _ri_ reload init.el 358 | _rl_ reload learning-spiral-hydras 359 | _zz_ Return to parent hdyra-of-hydras 360 | _q_ quit 361 | ^----------------------------------------------------------------------------------------- 362 | " 363 | ("n" hydra-of-learning-spiral-part-four/body :color blue) 364 | ("a" hydra-of-learning-spiral-latex/body :color blue) 365 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 366 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 367 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 368 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 369 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 370 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 371 | ("ri" (reload-init) :color blue) 372 | ("rl" (reload-learning-spiral-hydras) :color blue) 373 | ("zz" hydra-of-hydras/body :color blue) 374 | ("q" nil :color blue)) 375 | 376 | 377 | 378 | ;;;# hydra-of-learning-spiral-part-two 379 | 380 | (defhydra hydra-of-learning-spiral-part-two (:hint nil) 381 | " 382 | ^Commands trying to master 383 | ^---------------------------------------------------------------------------------------- 384 | C-x k Kill the buffer. 385 | C-x s Save all files. 386 | C-x o Move cursor to another window. 387 | C-M-v Scroll the other window. 388 | C-x C-b Open ibuffer. 389 | C-x b Select buffer. TAB to show possible buffers. 390 | C-x C-j Dired jump. 391 | C-c m Switch to minibuffer. 392 | C-o Insert snippet at the point (cursor) after typing tab trigger. 393 | C-c SPC y SPC i Insert snippet at the point (cursor) via selection from the popup menu. 394 | C-c SPC y SPC n Create a new snippet. 395 | C-c w Run texcount.pl on main.tex. 396 | M-k Kill from the cursor to the end of the sentence. 397 | C-w Kill from mark to cursor. 398 | C-x b Visit specific buffer. 399 | C-z Suspend terminal or iconify graphical Emacs. Return with `fg'. 400 | C-x C-v Replace file with the file that you want. 401 | C-x i Insert document into a buffer. 402 | C-h Show help menu. 403 | C-h t Help tutorial. 404 | C-x 1 Remove help window. 405 | C-M-v Scroll help window. 406 | C-h a Show commands matching a string. 407 | C-h k Return the command activate by an entered keybinding. 408 | C-h f Describe a function. 409 | C-h m Get information about current mode. 410 | C-h i m Emacs Lisp Intro Open a hyperlinked version of this valuable book. 411 | C-_ Undo. 412 | C-/ Undo. 413 | M-p Select previous search string. 414 | M-n Select next search string. 415 | M-{ Move point back one paragraph. 416 | M-} Move point forward one paragraph. 417 | C-x [ Move backward a page. 418 | C-x ] Move forward a page. 419 | C-M-b Move back one sexp. 420 | C-M-f Move forward one sexp. 421 | C-M-a Move back one function. 422 | C-M-e Move forward one function. 423 | C-v Move to next screen. 424 | M-v Move to previous screen. 425 | M-g c Goto char. 426 | M-m Goto the indentation.rl 427 | ^---------------------------------------------------------------------------------------- 428 | _n_ Next part of this learning spiral. 429 | _a_ Auctex and latex learning spiral. 430 | _km_ Learning spiral: keybindings mastered. 431 | _c_ Learning spiral: concepts trying to master. 432 | _p_ Learning spiral: packages trying to master. 433 | _he_ Edit /emacs29/my-hydras/my-hydras.el. 434 | _i_ Edit init.el. 435 | _l_ Edit learning-spiral-hydras.el. 436 | _ri_ Reload init.el. 437 | _rl_ Reload learning-spiral-hydras. 438 | _zz_ Return to parent hdyra-of-hydras. 439 | _q_ quit 440 | ^------------------------------------------------------------------------------ 441 | " 442 | ("n" hydra-of-learning-spiral-part-three/body :color blue) 443 | ("a" hydra-of-learning-spiral-latex/body :color blue) 444 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 445 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 446 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 447 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 448 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 449 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 450 | ("ri" (reload-init) :color blue) 451 | ("rl" (reload-learning-spiral-hydras) :color blue) 452 | ("zz" hydra-of-hydras/body :color blue) 453 | ("q" nil :color blue)) 454 | 455 | 456 | ;;;# hydra-of-learning-spiral 457 | ;; This is the master hydra that lists the commands that I am trying to master. 458 | ;; It is the top of the learning spiral. 459 | ;; It continues on the next hydra, hydra-of-learning-spiral-part-two. 460 | ;; This second part is invoked by clicking on `n` or by entering `n' 461 | ;; 462 | ;; It also calls subsidiary hydras that list the following: 463 | ;; - the keybindings that I think I have mastered, 464 | ;; - the concepts that I am trying to master 465 | ;; - the packages that I am trying to master. 466 | (defhydra hydra-of-learning-spiral (:hint nil) 467 | " 468 | ^Commands trying to master 469 | ^----------------------------------------------------------------------------------------------- 470 | C-c = Use in auctex-mode to display TOC of the document in a separate buffer. 471 | C-c d Display a pop-up menu with info about the file, including word count. 472 | C-h l Display list of last commands. 473 | s-, Open the customize buffer. 474 | C-[scrollwheel-up] Zoom text in. 475 | C-[scrollwheel-down] Zoom text out. 476 | M-S-x List all commands relevant to the current mode. 477 | s-n Open a new frame with the current buffer. 478 | s-s Toggle speedbar. Must load sr-speedbar first. Like M-i or C-c =. 479 | M-w Copy selection to kill ring (clipboard) but do not kill. Like s-c. 480 | M-; Comment or uncomment a region. 481 | M-i Display an index of buffer. Use in tex files to navigate to sections. 482 | C-v Next page down. 483 | M-v Next page up. 484 | C-l Center the current line in the window. 485 | C-n Move to the next line. 486 | C-p Move to the previous line. 487 | C-f Move forward one character. 488 | C-b Move back one character. 489 | M-! Execute a shell command. 490 | M-percent sign M-x query-replace. 491 | M-f Move forward a word. 492 | M-b Move back a word. 493 | M-a Move to the beginning of the sentence. 494 | M-e Move to the end of the sentence. 495 | M-q Unwrap text to one sentence per line. 496 | M-< Move to the end of the file. 497 | M-> Move to the beginning of the file. 498 | M-g M-g Goto a specific line number. 499 | 500 | M-x delete-trailing-whitespace 501 | M-x lsp 502 | M-x query-replace 503 | M-x elispdoc-process-elisp-to-doc 504 | 505 | ^---------------------------------------------------------------------------------------------- 506 | _n_ next part of this learning spiral. 507 | _a_ Auctex and latex learning spiral. 508 | _km_ learning spiral: keybindings mastered 509 | _c_ learning spiral: concepts trying to master 510 | _p_ learning spiral: packages trying to master 511 | _he_ edit /emacs29/my-hydras/my-hydras.el 512 | _i_ edit init.el in Emacs 513 | _l_ edit learning-spiral-hydras.el in Emacs 514 | _ri_ reload init.el into Emacs after changing on disk. 515 | _rl_ reload learning-spiral-hydras after changing on disk. 516 | _zz_ Return to parent hdyra-of-hydras. 517 | _q_ quit 518 | ^------------------------------------------------------------------------------ 519 | " 520 | ("n" hydra-of-learning-spiral-part-two/body :color blue) 521 | ("a" hydra-of-learning-spiral-latex/body :color blue) 522 | ("c" hydra-of-learning-spiral-concepts-mastered/body :color blue) 523 | ("p" hydra-of-learning-spiral-packages-mastered/body :color blue) 524 | ("km" hydra-of-learning-spiral-keybindings-mastered/body :color blue) 525 | ("he" (find-file "/Users/blaine/emacs29/my-hydras/my-hydras.el") :color blue) 526 | ("i" (find-file "/Users/blaine/emacs29/init.el") :color blue) 527 | ("l" (find-file "/Users/blaine/emacs29/my-hydras/learning-spiral-hydras.el") :color blue) 528 | ("ri" (reload-init) :color blue) 529 | ("rl" (reload-learning-spiral-hydras) :color blue) 530 | ("zz" hydra-of-hydras/body :color blue) 531 | ("q" nil :color blue)) 532 | 533 | (provide 'learning-spiral-hydras) 534 | --------------------------------------------------------------------------------