#+TITLE: Bepo layer #+HTML_HEAD_EXTRA: #+CAPTION: logo [[file:img/bepo.png]] * Table of Contents :TOC_4_org:noexport: - [[Description][Description]] - [[Mapping][Mapping]] - [[Supported modes/packages/layer][Supported modes/packages/layer]] - [[Install][Install]] - [[Key bindings][Key bindings]] - [[company][company]] - [[evil][evil]] - [[evil-escape][evil-escape]] - [[evil-surround][evil-surround]] - [[evil-window][evil-window]] - [[helm][helm]] - [[magit][magit]] - [[neotree][neotree]] - [[org][org]] - [[ranger][ranger]] - [[spacemacs-specific][spacemacs-specific]] - [[Contributors][Contributors]] - [[Sources][Sources]] * Description This layer changes the key bindings in spacemacs to be compatible with the [[http://bepo.fr/][bepo]] keyboard layout. =bepo= is a keyboard layout optimized for the French language. This package first switch traditional ~hjkl~ movement keys with ~ctsr~, and then try to correct the bugs introduced by these changes in other modes/packages. [[file:img/keymap.png]] * Mapping The mapping correction is the one proposed for vim on the bepo's official [[http://bepo.fr/wiki/Vim#Principe][wiki]]. This layer tries to do the following changes when the following letters are used for *doing a movement*: - Map the movements keys under the right hand's fingers: - ~c → h~ - ~t → j~ - ~s → k~ - ~r → l~ - Map lost functionalities back to some keys: - ~h → r~ - ~j → t~ - ~k → s~ - ~l → c~ The equivalent remapping is also valid for uppercase letters when they are used te represent a movement, or to keep the mnemonic between the lower/upper-case consistent. Some bepo keys are not used in traditional mapping, mainly because they are not present on the =en-us= keyboard layout. They can be used as an alias for other shortcuts: - Map unused ~é~ key as an alias of ~w~, more useful in vim mode: - ~é → w~ - ~É → W~ - Map indentation on direct-access keys: - ~» → >~ - ~« → <~ Some default configurations are also not optimal for vim, so the following defaults are changed: - Change =evil-escape= escape combination to something faster to type, while being nearly nonexistant in french or english words: - ~fd → gq~ - In =avy=, the key used to select words/lines are remapped to the 8 characters under the fingers: - ~a u i e t s r n~ - Add ~«~ and ~»~ as operators for =evil-surround=, surrounding text with the specified symbols. In some cases the key remapping will not follow these conventions, mainly because there are better alternatives, or because some moves don't make sense. #+begin_verse Example: In =magit= status, the ~c~ is used for =commit= by default, but if we want to follow the conventions, it should be remapped to "move left". As it is not useful to move left on =magit=, because operations are done on lines, the ~c~ is not remapped. #+end_verse Note: One difference exists with the wiki version: the ~w~ is *not* remapped to ~C-w~ to avoid having to change its meaning in other modes. Spacemacs provides already a ~SPC w~ key binding for working with windows. * Supported modes/packages/layer - avy - company - evil - evil-escape - evil-surround - evil-window - helm - magit - neotree - org - ranger - spacemacs * Install To use this contribution add it to your =~/.spacemacs= #+begin_src emacs-lisp (setq-default dotspacemacs-configuration-layers '(bepo)) #+end_src * Key bindings Thanks to `which-keys`, you shouldn't probably have to go through this list, the keys being shown after a small delay following a keypress. ** company |-------------+----------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+----------------------------+--------------------| | ~C-t~ | Company next line | ~C-j~ | | ~C-s~ | Company previous line | ~C-k~ | | ~C-r~ | Company complete selection | ~C-l~ | |-------------+----------------------------+--------------------| ** evil |-------------+----------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+----------------------------+--------------------| | ~c~ | Move the cursor left | ~h~ | | ~t~ | Move the cursor down | ~j~ | | ~s~ | Move the cursor up | ~k~ | | ~r~ | Move the cursor right | ~l~ | |-------------+----------------------------+--------------------| | ~C~ | Top of the window | ~L~ | | ~T~ | Join lines | ~J~ | | ~S~ | Smart doc lookup | ~K~ | | ~R~ | Bottom of the window | ~H~ | |-------------+----------------------------+--------------------| | ~h~ | Replace | ~r~ | | ~j~ | Until | ~t~ | | ~k~ | Substitute | ~s~ | | ~l~ | Change | ~c~ | |-------------+----------------------------+--------------------| | ~H~ | Replace mode | ~R~ | | ~J~ | Backward Until | ~T~ | | ~K~ | Substitute line | ~S~ | | ~L~ | Change line | ~C~ | |-------------+----------------------------+--------------------| | ~é~ | Word (without punctuation) | ~w~ | | ~É~ | WORD (with punctuation) | ~W~ | |-------------+----------------------------+--------------------| | ~»~ | Indent | ~>~ | | ~«~ | Unindent | ~<~ | |-------------+----------------------------+--------------------| ** evil-escape |-------------+-------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+-------------+--------------------| | ~gq~ | Escape | ~fd~ | |-------------+-------------+--------------------| ** evil-surround |-------------+-------------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+-------------------------------+--------------------| | ~k~ | Evil-surround functionalities | ~s~ | |-------------+-------------------------------+--------------------| ** evil-window |-------------+------------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+------------------------------+--------------------| | ~SPC w c~ | Window left | ~SPC w h~ | | ~SPC w t~ | Window down | ~SPC w j~ | | ~SPC w s~ | Window up | ~SPC w k~ | | ~SPC w r~ | Window right | ~SPC w l~ | |-------------+------------------------------+--------------------| | ~SPC w C~ | Window move far left | ~SPC w H~ | | ~SPC w T~ | Window move very bottom | ~SPC w J~ | | ~SPC w S~ | Window move very top | ~SPC w K~ | | ~SPC w R~ | Window move far right | ~SPC w L~ | |-------------+------------------------------+--------------------| | ~SPC w k~ | Split window below | ~SPC w s~ | | ~SPC w l~ | Delete window | ~SPC w c~ | |-------------+------------------------------+--------------------| | ~SPC w H~ | Rotate windows | ~SPC w R~ | | ~SPC w K~ | Split window below and focus | ~SPC w S~ | | ~SPC w L~ | Ace delete window | ~SPC w C~ | |-------------+------------------------------+--------------------| | ~SPC w é~ | Other window | ~SPC w w~ | | ~SPC w q~ | Delete window | ~SPC w c~ | | ~SPC é~ | Alias for ~SPC w~ | ~SPC w~ | |-------------+------------------------------+--------------------| ** helm |-------------+---------------------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+---------------------------------------+--------------------| | ~C-t~ | Helm next line | ~C-j~ | | ~C-s~ | Helm previous line | ~C-k~ | |-------------+---------------------------------------+--------------------| | ~C-j~ | Helm toggle resplit and spawn windows | ~C-t~ | | ~C-k~ | Helm find files run grep | ~C-s~ | |-------------+---------------------------------------+--------------------| ** magit |-------------+----------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+----------------+--------------------| | ~t~ | Next line | ~j~ | | ~s~ | Previous line | ~k~ | |-------------+----------------+--------------------| | ~k~ | Stage change | ~s~ | | ~j~ | Tag popup | ~t~ | | ~h~ | Discard change | ~k~ | |-------------+----------------+--------------------| ** neotree |-------------+--------------------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+--------------------------------------+--------------------| | ~c~ | Spacemacs/neotree collapse or up | ~h~ | | ~t~ | Evil next visual line | ~j~ | | ~s~ | Evil previous visual line | ~k~ | | ~r~ | Spacemacs/neotree expand or open | ~l~ | |-------------+--------------------------------------+--------------------| | ~C~ | Neotree select previous sibling node | ~H~ | | ~T~ | Neotree select down node | ~J~ | | ~S~ | Neotree select up node | ~K~ | | ~R~ | Neotree select next sibling node | ~L~ | |-------------+--------------------------------------+--------------------| | ~h~ | Neotree hidden file toggle | ~l~ | | ~k~ | Neotree rename node | ~r~ | | ~l~ | Neotree create node | ~c~ | |-------------+--------------------------------------+--------------------| | ~H~ | Neotree change root | ~R~ | |-------------+--------------------------------------+--------------------| ** org |---------------+--------------------------------------| | Key Binding | Description | |---------------+--------------------------------------| | ~t~ | Evil next visual line | |---------------+--------------------------------------| | ~M c~ | Org metaleft | | ~M t~ | Org metadown | | ~M s~ | Org metaup | | ~M r~ | Org metaright | |---------------+--------------------------------------| | ~M C~ | Org shiftmetaleft | | ~M T~ | Org shiftmetadown | | ~M S~ | Org shiftmetaup | | ~M R~ | Org shiftmetaright | |---------------+--------------------------------------| | ~SPC m C~ | Org shiftleft | | ~SPC m T~ | Org shiftdown | | ~SPC m S~ | Org shiftup | | ~SPC m R~ | Org shiftright | |---------------+--------------------------------------| | ~SPC m s~ | Org schedule | | ~SPC j~ | Org todo | |---------------+--------------------------------------| | ~C S c~ | Org shiftcontrolleft | | ~C S t~ | Org shiftcontroldown | | ~C S s~ | Org shiftcontrolup | | ~C S r~ | Org shiftcontrolright | |---------------+--------------------------------------| | ~SPC m t C~ | Org table move column left | | ~SPC m t T~ | Org table move row down | | ~SPC m t S~ | Org table move row up | | ~SPC m t R~ | Org table move column right | |---------------+--------------------------------------| | ~SPC m t c~ | Org table previous field | | ~SPC m t t~ | Org table next row | | ~SPC m t r~ | Org table next field | |---------------+--------------------------------------| | ~SPC g t~ | Org forward heading same level | | ~SPC g s~ | Org backward heading same level | |---------------+--------------------------------------| | ~M h~ | Capitalize word | | ~M j~ | Transpose chars | | ~M l~ | Move to window line top bottom | |---------------+--------------------------------------| | ~M H~ | Capitalize word | | ~M J~ | Transpose chars | | ~M L~ | Move to window line top bottom | |---------------+--------------------------------------| | ~SPC m H~ | Org refile | | ~SPC m J~ | Org show todo tree | | ~SPC m K r~ | Org demote subtree | | ~SPC m K c~ | Org promote subtree | | ~SPC m K t~ | Org move subtree down | | ~SPC m K s~ | Org move subtree up | | ~SPC m L~ | Evil org recompute clocks | |---------------+--------------------------------------| | ~SPC m t h~ | Org table recalculate | | ~SPC m t k~ | Org table sort lines | | ~SPC m t l~ | Org table convert | | ~SPC m t j f~ | Org table toggle formula debugger | | ~SPC m t j o~ | Org table toggle coordinate overlays | |---------------+--------------------------------------| | ~SPC «~ | Org metaleft | | ~SPC »~ | Org metaright | |---------------+--------------------------------------| ** ranger |-------------+---------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+---------------------+--------------------| | ~c~ | Ranger up directory | ~h~ | | ~t~ | Ranger next file | ~j~ | | ~s~ | Ranger prev file | ~k~ | | ~r~ | Ranger find file | ~l~ | |-------------+---------------------+--------------------| | ~C~ | Ranger prev history | ~H~ | | ~T~ | Ranger next subdir | ~J~ | | ~S~ | Ranger prev subdir | ~K~ | | ~R~ | Ranger next history | ~L~ | |-------------+---------------------+--------------------| | ~H~ | Dired do rename | ~R~ | | ~K~ | Eshell | ~S~ | |-------------+---------------------+--------------------| ** spacemacs-specific |-------------+--------------------------------------+--------------------| | Key Binding | Description | Replace/equivalent | |-------------+--------------------------------------+--------------------| | ~SPC j c~ | Push mark and goto beginning of line | ~SPC j h~ | | ~SPC j t~ | Sp newline | ~SPC j j~ | | ~SPC j s~ | Evil goto next line and indent | ~SPC j k~ | | ~SPC j r~ | Push mark and goto end of line | ~SPC j l~ | |-------------+--------------------------------------+--------------------| | ~SPC j T~ | Split and new line | ~SPC j J~ | |-------------+--------------------------------------+--------------------| | ~SPC i T~ | Insert line below no indent | ~SPC i J~ | | ~SPC i t~ | Evil insert line below | ~SPC i j~ | |-------------+--------------------------------------+--------------------| | ~SPC i y~ | Helm yas | ~SPC i S~ | | ~SPC i Yc~ | Auto yasnippet create | ~SPC i Sc~ | | ~SPC i Ye~ | Auto yasnippet expand | ~SPC i Se~ | | ~SPC i Yw~ | Auto yasnippet persist snippet | ~SPC i Sw~ | |-------------+--------------------------------------+--------------------| * Contributors - Fabien Dubosson * Sources The bepo logo and the keymap image come from the [[http://bepo.fr/][bepo]] official website. They are licensed under the [[http://creativecommons.org/licenses/by-sa/3.0/deed.en][CC-BY-SA]].