157 lines
6.4 KiB
Org Mode
157 lines
6.4 KiB
Org Mode
← [[doom-module-index:][Back to module index]] ! [[doom-module-issues:::input layout][Issues]] ↖ [[doom-repo:tree/develop/modules/input/layout/][Github]] ± [[doom-suggest-edit:][Suggest edits]] ? [[doom-help-modules:][Help]]
|
|
--------------------------------------------------------------------------------
|
|
#+title: :input layout
|
|
#+subtitle: auie,ctsrnm is the superior home row
|
|
#+created: Jun 29, 2020
|
|
#+since: 21.12.0
|
|
|
|
* Description :unfold:
|
|
This module provides barebones support for using Doom with non-qwerty keyboard
|
|
layouts.
|
|
|
|
** Maintainers
|
|
- [[doom-user:][@gagbo]] ([[kbd:][+bepo]])
|
|
|
|
[[doom-contrib-maintainer:][Become a maintainer?]]
|
|
|
|
** Module flags
|
|
- +azerty ::
|
|
Remap keybinds to accommodate the [[https://en.wikipedia.org/wiki/AZERTY][Azerty keyboard layout]].
|
|
- +bepo ::
|
|
Remap keybinds to accommodate the [[https://en.wikipedia.org/wiki/B%C3%89PO][BÉPO keyboard layout]] (version 1.1, in
|
|
particular).
|
|
|
|
** Packages
|
|
/This module doesn't install any packages./
|
|
|
|
** TODO Hacks
|
|
#+begin_quote
|
|
🔨 This module's hacks haven't been documented yet. [[doom-contrib-module:][Document them?]]
|
|
#+end_quote
|
|
|
|
** TODO Changelog
|
|
# This section will be machine generated. Don't edit it by hand.
|
|
/This module does not have a changelog yet./
|
|
|
|
* Installation
|
|
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]
|
|
|
|
/This module has no external requirements./
|
|
|
|
* TODO Usage
|
|
#+begin_quote
|
|
🔨 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
|
|
#+end_quote
|
|
|
|
** Bépo
|
|
Support for the bépo layout includes:
|
|
- Setting Avy keys to the correct home row keys
|
|
- Changing navigation keys to [[kbd:][c]], [[kbd:][t]], [[kbd:][s]], and [[kbd:][r]]
|
|
+ old [[kbd:][t]] is mapped to [[kbd:][j]]
|
|
+ old [[kbd:][s]] is mapped to [[kbd:][k]] (i.e. staging in the magit status buffer is done with
|
|
[[kbd:][k]])
|
|
+ See [[*Configuration][Configuration]] to see where old [[kbd:][c]] and [[kbd:][r]] functions
|
|
are remapped
|
|
- Bind [[kbd:][<>]] functions to [[kbd:][«»]] keys when possible
|
|
- Bind [[kbd:][[]]] functions to [[kbd:][()]] keys when possible (the "unimpaired-like" bindings)
|
|
- Bind [[kbd:][é]] key to [[kbd:][w]] functions when possible
|
|
- Bind [[kbd:][è]] key to useful functions when possible
|
|
- Bind [[kbd:][`~]] functions to [[kbd:][$#]] keys when possible
|
|
|
|
*** Easymotion
|
|
If you use [[doom-package:][evil-easymotion]], then all the bindings that were on [[kbd:][gs]] have been
|
|
moved to [[kbd:][gé]].
|
|
|
|
In short : [[kbd:][g s j]] -> [[kbd:][g é t]] (~evilem-motion-next-line~). And so on.
|
|
|
|
*** Leaving mnemonics alone when possible
|
|
Exchanging [[kbd:][h]]/[[kbd:][j]]/[[kbd:][k]]/[[kbd:][l]] to [[kbd:][c]]/[[kbd:][t]]/[[kbd:][s]]/[[kbd:][r]] has the effect of destroying a few mnemonics: the
|
|
change operator becomes [[kbd:][l]] for example, or the window split becomes [[kbd:][SPC é k]].
|
|
|
|
The module tries to limit those changes to the minimum, especially in special
|
|
buffers. A concrete example is magit.
|
|
|
|
As the =magit: project= buffer (obtained with ~M-x magit-status~) does not need
|
|
left-right navigation, keys [[kbd:][c]], [[kbd:][r]], [[kbd:][h]], and [[kbd:][l]] keep their "expected" bindings, while
|
|
[[kbd:][t]], [[kbd:][s]], [[kbd:][j]], and [[kbd:][k]] are flipped:
|
|
- checking the log from a magit buffer is still on [[kbd:][l]]
|
|
- staging a file/region has been moved to [[kbd:][k]]
|
|
|
|
*** Possible contributions
|
|
**** Avoid [[kbd:][g]] and [[kbd:][z]] to be used too often
|
|
A nice addition in the future might be to have all the normal mode bindings that
|
|
start with [[kbd:][g]] start with [[kbd:][,]] instead to avoid the curl on these common bindings.
|
|
This is *not* implemented for the time being.
|
|
|
|
The same thing could be done to [[kbd:][z]], potentially using [[kbd:][à]] instead.
|
|
|
|
**** Proper minor mode
|
|
Also, implementing all those changes as a minor we could flip on and off would
|
|
help with adoption
|
|
|
|
**** Put "word" text objects to é instead of w
|
|
"inside word" and "around word" are [[kbd:][iw]] and [[kbd:][aw]], which use the very poorly rated [[kbd:][w]]
|
|
key in the bépo layout. Finding a way to use [[kbd:][é]] or even [[kbd:][è]] more for these would be
|
|
a welcome change
|
|
|
|
*** Org-mode
|
|
[[doom-package:][evil-org]] allows to define ~evil-org-movement-bindings~ to automatically map
|
|
movement bindings on non-hjkl keys. It maps automatically keys to [[kbd:][C-c]] and [[kbd:][C-r]] in
|
|
normal and insert states though, and it's not really user friendly in Emacs to
|
|
remap those.
|
|
|
|
Therefore, in ~org-mode~:
|
|
- ~org-shiftright~ is bound to [[kbd:][C-»]]
|
|
- ~org-shiftleft~ is bound to [[kbd:][C-«]]
|
|
|
|
* TODO Configuration
|
|
#+begin_quote
|
|
🔨 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
|
|
#+end_quote
|
|
|
|
** Bépo
|
|
=+layout-bepo-cr-rotation-style= controls whether:
|
|
- =qwerty-c= functions are mapped on =bépo-l= key, and =qwerty-r= functions on
|
|
=bépo-h= key (~'ergodis~), or
|
|
- =qwerty-c= functions are mapped on =bépo-h= key, and =qwerty-r= functions on
|
|
=bépo-l= key (~'strict~)
|
|
|
|
~'strict~ would be the logical choice but the [[kbd:][c]] functions are used more often
|
|
than the [[kbd:][r]] ones so [[https://bepo.fr/wiki/Vim#Principe][Ergodis]] advises to actually put all the [[kbd:][c]] functions on the
|
|
key that does not need a curl.
|
|
|
|
* Troubleshooting
|
|
[[doom-report:][Report an issue?]]
|
|
|
|
** Outstanding issues (contributions welcome)
|
|
*** Bépo
|
|
- In [[doom-package:][eshell]], the key [[kbd:][c]] is still bound to ~evil-collection-eshell-evil-change~ in
|
|
normal mode.
|
|
|
|
** How to investigate an issue ?
|
|
If a key is misbehaving, use ~M-x describe-key~ ([[kbd:][C-h k]] or [[kbd:][SPC h k]] or [[kbd:][F1 k]]) to
|
|
see the command bound to the key, and more importantly in which keymap it is
|
|
bound.
|
|
|
|
You should ignore all ~evil-collection-*-backup-map~ keymaps, as they are
|
|
artifacts from ~evil-collection-translate-key~ and those maps are actually not
|
|
active.
|
|
|
|
Most likely the solution is to call one of the "key rotation" functions on the
|
|
relevant keymaps.
|
|
|
|
** How to deactivate the new bindings and go back to the old ones ?
|
|
If you are learning a new layout you might want to go back to tho old one to
|
|
"get work done". Sadly the only way is to comment out the module, run ~$ doom
|
|
sync~ and restart emacs.
|
|
|
|
Restoring the session [[kbd:][SPC q l]] by default helps to lower the impact of the
|
|
restart.
|
|
|
|
* Frequently asked questions
|
|
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]
|
|
|
|
* TODO Appendix
|
|
#+begin_quote
|
|
🔨 This module has no appendix yet. [[doom-contrib-module:][Write one?]]
|
|
#+end_quote
|