Move Emacs documents to //emacs

These documents outline some of my Elisp conventions and ideas. As such,
I think //emacs should host them.
This commit is contained in:
William Carroll 2020-04-04 14:30:27 +01:00
parent d0d331df09
commit 46d817665f
3 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,20 @@
# Elisp Conventions
Some of this aligns with existing style guides. Some of it does not.
In general, prefer functions with fixed arities instead of variadic
alternatives.
- Namespace functions with `namespace/function-name`
- Use `ensure`, `assert`, `refute` whenever possible.
- When talking about encoding and decoding, let's use the words "encoding" and
"decoding" rather than the myriad of other variants that appear like:
- `marshalling` and `unmarshalling`
- `parse` and `deparse`, `serialize`, `stringify`
- `unpickle` and `pickle` (Python)
- `from-string` and `to-string`
- TODO: Add more examples of these; there should be close to a dozen.
- Annotate assertions with `!` endings.
- Prefer the Scheme style of `predicate?`
- Variadic functions *should* encode this by appending * onto their
name. E.g. `maybe/nil?*`

47
emacs/keybindings.md Normal file
View file

@ -0,0 +1,47 @@
# Keybindings
Since I'm using Emacs to manage most of my workflow, all of the keybindings
should be defined herein and -- in order to scale -- order must be imposed. This
can help avoid KBD collisions and improve my ability to remember each KBD.
See `kbd.el` for the programmatic encoding of these principles.
## Troubleshooting
When in doubt, use Emacs's `read-key` and `read-event` to learn what signal
you're sending Emacs.
### Super-
- EXWM X11 windows are not processing `s-`.
- EXWM X11 windows are not processing `<M-ESC>`.
### Super-Ctrl-
I'm reserving `C-s-` for opening X11 applications.
- `terminator`: `t`
- `google-chrome`: `c`
## Emacs nouns
Most of my keybindings should be organized according to their function, which in
turn should be related to the following Emacs nouns.
- `workspace`: As defined by EXWM.
- `frame`: What non-Emacs users would call a "window". Currently my workflow
doesn't use or rely on Emacs frames.
- `window`: A vertical or horizontal split within an Emacs frame.
- `buffer`: Anything storing text in memory.
## Prefixes and their meanings
TODO: Have a system for leader-prefixed KBDs, chords, and prefixed chords.
- `s-`: Switching between named workspaces. Right now, super is too overloaded
and would benefit from having more deliberate keybindings.
- `C-M-`: Window sizing
- `M-{h,j,k,l}`: Window traversing
- `M-{\,-}`: Window splitting
- `M-q`: Window deletion
- `<leader>-q`: Window deletion

22
emacs/snippets.md Normal file
View file

@ -0,0 +1,22 @@
# Snippets
Specifying snippets that I plan on defining for most of the programming
languages with which I work. I hope this will serve as a checklist of language
constructs I should support when adopting a new language.
## Shared language features
These are language features that should be available across most of the
languages that I'm hoping to support.
- `ld`: anonymous functions (i.e. lambdas)
- `fn`: named function definition
- `var`: variable definition
## Miscellaneous other language KBDs
Some of this is related to language tool must-haves, which may need to be a
separate document.
- `<leader>d`: Show documentation
- `<leader>x`: Evaluate expression (works mostly for LISPs)