branch: master commit 3f11348af1bf612c09c972782a27fcbea530efdb Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
README.md: Add toc Re #71 --- README.md | 71 ++++++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 49 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index cbc4898..df07cec 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,36 @@ Hercules, besides vanquishing the Hydra, will still serve his original purpose, command. This makes the Hydra very seamless, it's like a minor mode that disables itself auto-magically. -## Sample Hydras - -### The one with the least amount of code +<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc/generate-toc again --> +**Table of Contents** + +- [Sample Hydras](#sample-hydras) + - [The one with the least amount of code](#the-one-with-the-least-amount-of-code) + - [The impressive-looking one](#the-impressive-looking-one) +- [Community wiki](#community-wiki) +- [The Rules Hydra-tics](#the-rules-hydra-tics) + - [`hydra-awesome`](#hydra-awesome) + - [`awesome-map` and `awesome-binding`](#awesome-map-and-awesome-binding) + - [`awesome-plist`](#awesome-plist) + - [`:pre` and `:post`](#pre-and-post) + - [`:exit`](#exit) + - [`:foreign-keys`](#foreign-keys) + - [`:color`](#color) + - [`:timeout`](#timeout) + - [`:hint`](#hint) + - [`:bind`](#bind) + - [`awesome-docstring`](#awesome-docstring) + - [`awesome-head-1`](#awesome-head-1) + - [`head-binding`](#head-binding) + - [`head-command`](#head-command) + - [`head-hint`](#head-hint) + - [`head-plist`](#head-plist) + +<!-- markdown-toc end --> + +# Sample Hydras + +## The one with the least amount of code ```cl (defhydra hydra-zoom (global-map "<f2>") @@ -38,7 +65,7 @@ For any Hydra: - `negative-argument` can be called with <kbd>-</kbd>. - `universal-argument` can be called with <kbd>C-u</kbd>. -### The impressive-looking one +## The impressive-looking one Here's the result of pressing <kbd>.</kbd> in the good-old Buffer menu: @@ -91,13 +118,13 @@ To write your own hydras, you can: - Either modify an existing hydra to do what you want to do. - Read the docstrings and comments in the source to learn the rules. -### Community wiki +# Community wiki A good amount of useful hydras are aggregated in projects [community wiki](https://github.com/abo-abo/hydra/wiki/Hydras%20by%20Topic). Feel free to add your own or edit the existing ones. -## The Rules Hydra-tics +# The Rules Hydra-tics Each hydra (take `awesome` as a prefix to make it more specific) looks like this: @@ -110,7 +137,7 @@ Each hydra (take `awesome` as a prefix to make it more specific) looks like this ...) ``` -### `hydra-awesome` +## `hydra-awesome` Each hydra needs a name, and this one is named `hydra-awesome`. You can name your hydras as you wish, but I prefer to start each one with `hydra-`, because it acts as an additional namespace layer, for example: @@ -166,7 +193,7 @@ The body can be accessed via `hydra-zoom/body'." (setq prefix-arg current-prefix-arg))) ``` -### `awesome-map` and `awesome-binding` +## `awesome-map` and `awesome-binding` This can be any keymap, for instance, `global-map` or `isearch-mode-map`. @@ -217,7 +244,7 @@ Or even simpler: But then you would have to bind `hydra-zoom/text-scale-increase` and `hydra-zoom/text-scale-decrease` yourself. -### `awesome-plist` +## `awesome-plist` You can read up on what a plist is in [the Elisp manual](https://www.gnu.org/software/emacs/manual/html_node/elisp/Property-Lists.html). @@ -225,7 +252,7 @@ You can read up on what a plist is in You can use `awesome-plist` to modify the behavior of each head in some way. Below is a list of each key. -#### `:pre` and `:post` +### `:pre` and `:post` You can specify code that will be called before each head, and after the body. For example: @@ -246,7 +273,7 @@ You can specify code that will be called before each head, and after the body. F Thanks to `:pre`, each time any head is called, the cursor color is changed. And when the hydra quits, the cursor color will be made black again with `:post`. -#### `:exit` +### `:exit` The `:exit` key is inherited by every head (they can override it) and influences what will happen after executing head's command: @@ -254,7 +281,7 @@ after executing head's command: - `:exit nil` (the default) means that the hydra state will continue - you'll still see the hint and be able to use short bindings. - `:exit t` means that the hydra state will stop. -#### `:foreign-keys` +### `:foreign-keys` The `:foreign-keys` key belongs to the body and decides what to do when a key is pressed that doesn't belong to any head: @@ -265,7 +292,7 @@ do whatever it was supposed to do if there was no hydra state. running the foreign key. - `:foreign-keys run` will not stop the hydra state, and try to run the foreign key. -#### `:color` +### `:color` The `:color` key is a shortcut. It aggregates `:exit` and `:foreign-keys` key in the following way: @@ -280,17 +307,17 @@ The `:color` key is a shortcut. It aggregates `:exit` and `:foreign-keys` key in It's also a trick to make you instantly aware of the current hydra keys that you're about to press: the keys will be highlighted with the appropriate color. -#### `:timeout` +### `:timeout` The `:timeout` key starts a timer for the corresponding amount of seconds that disables the hydra. Calling any head will refresh the timer. -#### `:hint` +### `:hint` The `:hint` key will be inherited by each head. Each head is allowed to override it, of course. One value that makes sense is `:hint nil`. See below for an explanation of head hint. -#### `:bind` +### `:bind` The `:bind` key provides a lambda to be used to bind each head. This is quite advanced and rarely used, you're not likely to need it. But if you would like to bind your heads with e.g. `bind-key` @@ -299,7 +326,7 @@ instead of `define-key` you can use this option. The `:bind` key can be overridden by each head. This is useful if you want to have a few heads that are not bound outside the hydra. -### `awesome-docstring` +## `awesome-docstring` This can be a simple string used to build the final hydra hint. However, if you start it with a newline, the key-highlighting and Ruby-style string interpolation becomes enabled, as you can see in @@ -321,7 +348,7 @@ change the amount of marked files, for example, it will be appropriately updated If the result of the Elisp expression is a string and you don't want to quote it, use this form: `%s(shell-command-to-string "du -hs")`. -### `awesome-head-1` +## `awesome-head-1` Each head looks like this: @@ -336,11 +363,11 @@ For the head `("g" text-scale-increase "in")`: - `head-hint` is `"in"`. - `head-plist` is `nil`. -#### `head-binding` +### `head-binding` The `head-binding` is a string that can be passed to `kbd`. -#### `head-command` +### `head-command` The `head-command` can be: @@ -369,7 +396,7 @@ Here's an example of the last option: (global-set-key (kbd "C-c r") 'hydra-launcher/body) ``` -#### `head-hint` +### `head-hint` In case of a large body docstring, you usually don't want the head hint to show up, since you've already documented it the the body docstring. @@ -386,7 +413,7 @@ Press _g_ to zoom in. ("l" text-scale-decrease "out")) ``` -#### `head-plist` +### `head-plist` Here's a list of body keys that can be overridden in each head: