boon/README.md

189 lines
6.9 KiB
Markdown
Raw Normal View History

2014-10-24 23:04:32 +02:00
Boon: An Ergonomic Command Mode for Emacs
==========================================
2014-10-20 14:25:43 +02:00
2016-08-31 21:58:55 +02:00
Boon is a complete package for modal editing, which is not Evil.
2014-10-20 14:25:43 +02:00
2014-11-04 14:07:55 +01:00
Selling points:
- Ergonomic: common commands are easy to type. (See below)
- Lightweight: ~300 loc for its core.
2016-08-31 21:58:55 +02:00
- Good Emacs integration: integrates with existing Emacs
infrastructure and takes advantage of it.
2014-10-20 14:25:43 +02:00
2016-08-31 21:58:55 +02:00
Ergonomic Design
----------------
2014-10-20 14:25:43 +02:00
2014-10-20 22:44:58 +02:00
It is largely accepted that modal edition is more ergonomic than using
2016-08-31 21:58:55 +02:00
key-chords. Boon attempts to make modal editing as comfortable as
2014-10-20 22:44:58 +02:00
possible, by adhering to the following design principles:
- Spacial allocation first, mnemonics second: the allocation of keys
to commands is based in priority on the locations of keys on the
2014-10-26 12:31:08 +01:00
keyboard. Whatever is printed on the key cap is a secondary concern.
2014-10-20 22:44:58 +02:00
- Easy finger rolls: common combination should either be left/right
hand alternation or easy one-hand rolls.
- Use of home row and strong fingers for the most used commands
- Easy navigation: many commands are bound to navigation. This
facilitates moving around. Because movements double up as
2016-09-04 22:20:07 +02:00
region-definitions, this design also makes manipulation commands
more powerful.
- Prefer several two easy keystrokes to one hard-to-reach
key. hard-to-reach keys are left for rarely used commands.
2014-10-20 22:44:58 +02:00
In command mode, movement keys are bound to the right hand, while text
manipulation is bound to the left hand.
Right-hand.
The leftwards (and upwards) movements are bound to the leftmost
fingers (index and middle finger), while rightwards (and downwards)
movements are bound to the rightmost fingers (ring finger and pinky.)
2016-09-04 22:20:07 +02:00
Additional, unpaired, movements are bound to the middle column
(extended index reach).
2014-10-20 22:44:58 +02:00
Left-hand.
The most common edition commands (cut, paste, parenthesis
manipulation) are bound to the home row. The top row is (mainly) for
2014-10-26 12:31:08 +01:00
searching. The bottom row gives access to regular Emacs stuff (C-x
2014-10-20 22:44:58 +02:00
...) (C-c ...) and registers.
2016-08-31 21:58:55 +02:00
Emacs Integration: Reusable Modules
-----------------------------------
2016-09-04 22:20:07 +02:00
Boon is designed as a stack of layers. Each layer is customizable and
2016-09-01 20:49:33 +02:00
provide reusable components, in full agreement with the Emacs
2016-09-04 22:20:07 +02:00
spirit. This means that even if you disagree with the designed choices
explained above, you may still want to use some parts of Boon. The
2016-09-01 20:49:33 +02:00
structure of Boon is as follows:
2016-08-31 21:58:55 +02:00
1. boon-moves, boon-search: a set of move and search commands. These
2016-09-04 22:20:07 +02:00
work the same way as standard Emacs commands --- they are merely
(sometimes) more powerful. Frontends typically bind these commands
(and more) in boon-moves-map, which is active in 'command mode'.
2016-09-01 20:49:33 +02:00
2. boon-arguments: a set of selectors to define regions. (Equivalent
of vim 'text objects'.) Selectors include plain regions (words,
lines, paragraphs, ...), but also region transformers (think:
exclude borders, just borders, including spaces, foreach,
etc.). Additionally every move command in boon-moves-map can be
2016-09-04 22:20:07 +02:00
used as a selector. The system supports multiple-cursors. The
selectors are regular interactive functions, which means that they
are easily customized.
3. boon-core: An infrastructure for modal editing. The implementation
is very much inspired from evil-core, but heavily simplified.
4. boon-main: A set of commands. These are similar to standard Emacs
commands, but they use the system of selectors described
above. (For good measure, some random extra commands are thrown
in.) These commands may be used in combination with a modal system,
or not. A few commands also switch to insert mode.
2016-09-09 20:13:43 +02:00
5. boon-keys, boon-colemak, boon-qwerty, ...:
2016-09-04 21:42:27 +02:00
frontends. Those require all the above and provide a mapping of
moves, selectors and commands onto keys.
2016-08-31 21:58:55 +02:00
2016-09-04 21:42:27 +02:00
Installation
------------
2014-10-20 22:44:58 +02:00
2014-10-23 09:54:14 +02:00
REQUIREMENTS
2015-11-19 11:30:06 +09:00
- Emacs version >= 24.5
2016-09-04 22:20:07 +02:00
- Qwerty or Colemak layout (workman version partially implemented).
2014-10-20 22:44:58 +02:00
2014-10-26 12:31:08 +01:00
Install Boon (perhaps using
2014-11-03 09:22:44 +01:00
[![MELPA](http://stable.melpa.org/packages/boon-badge.svg)](http://stable.melpa.org/#/boon)),
2014-10-24 21:16:16 +02:00
and add the following to your configuration:
2014-10-20 22:44:58 +02:00
2016-08-31 21:58:55 +02:00
(require 'boon-colemak)
;; (require 'boon-qwerty) ;; for qwerty port (alpha quality)
(boon-powerline-theme) ;; if you want use powerline with Boon
2016-09-04 21:42:27 +02:00
Then
(boon-mode) ;; to enable boon everywhere
If you just eval'ed the above (or just did not want to enable boon
2016-09-04 22:20:07 +02:00
everywhere), Boon may not be active in the current buffer. If it is
not activated and you want to try it locally, activate it by
2016-09-04 21:42:27 +02:00
M-x turn-on-boon-mode
Usage
-----
2014-10-20 14:25:43 +02:00
You can jump-start by reading the
2014-11-03 09:15:55 +01:00
[cheat sheet](https://pdf.yt/d/hSKUThNNSxrNFXkQ) directly, but reading
2016-09-04 21:42:27 +02:00
through the tutorial is highly recommended:
M-x boon-tutorial
(You'll get the version of the tutorial adapted to the frontend you
selected, qwerty or colemak.)
Configuration
-------------
The main variables to configure are:
2014-10-20 22:44:58 +02:00
2016-09-04 21:42:27 +02:00
boon-select-map, boon-moves-map, boon-command-map, boon-enclosures
2014-10-20 14:25:43 +02:00
2014-10-26 12:31:08 +01:00
Comparison with other modal layers for Emacs
2014-10-20 22:44:58 +02:00
---------------------------------------------
As far as I know, none of the other modal mode care about ergonomics
(beside being modal).
- Evil
2014-10-26 12:31:08 +01:00
Evil is a (quite) complete vi emulation layer for Emacs.
2014-10-24 22:54:56 +02:00
2016-08-31 21:58:55 +02:00
In Boon, quite a bit of Emacs structure and user experience is
retained. Examples: the x key gives the C-x prefix map. The usual
Emacs (interactive) arguments are used for text objects. Thus most of
Boon remains usable even if one does not wish to use modal editing.
2014-10-20 14:25:43 +02:00
2014-10-24 22:54:56 +02:00
Besides, Emacs is already customizable enough as it is: the core of
2016-08-31 21:58:55 +02:00
Boon is just 300 lines or so. Figuring out all the ins and outs of
Evil to do what I want would probably have required more effort than
implementing Boon.
Finally, evil use vi bindings (by default at least), which do not
feature the best ergonomics.
2016-09-08 13:48:42 +02:00
- Xah Fly Keys http://ergoemacs.org/misc/ergoemacs_vi_mode.html
Like boon, Xah Fly Keys aims at providing a layout whose design is
ergonomic. As far as I understand it follows the spirit of Xah's
ErgoEmacs package. As I understand it ErgoEmacs makes most design
decisions differently from boon. I have not made an in-depth
comparison of ergonomics yet.
2016-08-31 21:58:55 +02:00
- Fingers https://github.com/fgeller/fingers.el
Fingers borrows a few ideas from Boon, including the division of work
between left and right hand. fgeller gives a detailed account of the
particular differences with Boon. My opinion is that fingers is
compatible with Boon concepts and could be implemented as a Boon
'frontend'.
2014-10-20 14:25:43 +02:00
2014-10-20 22:44:58 +02:00
- God-mode https://github.com/chrisdone/god-mode
2014-10-20 14:25:43 +02:00
2014-10-24 22:54:56 +02:00
God-mode is similar to "sticky modifier keys" in principle. Its
simplicity allows to quickly get up to speed with it. However, it
lacks the main benefit of a true modal layer: text operators. (what
vi fans call a "language for text edition").
2014-10-20 14:25:43 +02:00
2014-10-20 22:44:58 +02:00
- Modal Mode http://retroj.net/modal-mode
2014-10-20 14:25:43 +02:00
2016-08-31 21:58:55 +02:00
Another modal layer for Emacs, which is also lightweight and aims to
integrate with Emacs. However, as far as I can see, there is no
special attention to ergonomics.
2014-10-20 14:25:43 +02:00
2014-10-20 22:44:58 +02:00
- Modal Emacs https://github.com/joelmccracken/modal-emacs
2014-10-18 22:03:14 +02:00
2014-10-24 22:54:56 +02:00
Modal Emacs does not appear to be complete.
2016-08-31 21:58:55 +02:00