langmap.kak
                                
                                 langmap.kak copied to clipboard
                                
                                    langmap.kak copied to clipboard
                            
                            
                            
                        Kakoune plugin to toggle between keyboard layouts in insert mode
langmap.kak
If you use more than one keyboard layout that you toggle with your keyboard shortcut, you know that Kakoune won't respond to your key-presses in normal mode unless you use layout that consist only from Latin letters. This is because Kakoune can only have access to the unicode characters, not keys itself. So if you want to type something in insert or prompt mode in non Latin language, when you go back to normal mode you have to swithc layout back to Latin language. This is a common problem for most terminal application.
This plugin is aimed to bring support of various languages to insert and prompt mode within Kakoune. That is, with this plugin you'll be able to toggle layout within Kakoune, without changing your operating system layout.
Installation
With plug.kak
Add this to your kakrc:
plug "andreyorst/langmap.kak" config %{
    # add needed extra layout, for example Russian 'йцукен'
    set-option global langmap %opt{langmap_ru_jcuken}
} demand "langmap" %{
    # optional: mappings to toggle langmap
    map -docstring "toggle layout" global normal '<c-\>' ':      toggle-langmap<ret>'
    map -docstring "toggle layout" global insert '<c-\>' '<a-;>: toggle-langmap<ret>'
    map -docstring "toggle layout" global prompt '<c-\>' '<a-;>: toggle-langmap prompt<ret>'
}
Restart Kakoune, or re-source your kakrc and call :plug-install
command. After that you'll be able to use langmap.kak
Without plugin manager
Clone this repository somewhere:
git clone https://github.com/andreyorst/langmap.kak
And put langmap.kak file to your autoload or source it manually form kakrc
and configure.
Configuration
If the keyboard layout you're using is listed among langmap_lang_map options,
all you need to do if set langmap option to desired variant:
set-option global langmap %opt{langmap_ru_jcuken}
If you're using layout than US qwerty, you need to modify langmap_default
layout in the same way.
However if the layout you're using isn't present in this plugin, you'll have to
set it manually and assign it to new option. In order for this plugin to work
correctly, this option must be a str-list type, and store language name as
it's first element, and all keyboard layout keys as a second element. For
example, let's add Russian and English layouts for European Mac keyboard:
declare-option str-list langmap_ru_jcuken_mac 'ru' %{><1!2"3№4%5:6,7.8;9(0)-_=+йЙцЦуУкКеЕнНгГшШщЩзЗхХъЪфФыЫвВаАпПрРоОлЛдДжЖэЭёЁ][яЯчЧсСмМиИтТьЬбБюЮ/?}
declare-option str-list langmap_eu_qwerty_mac 'en' %{§±1!2@3#4$5%6^7&8*9(0)-_=+qQwWeErRtTyYuUiIoOpP[{]}aAsSdDfFgGhHjJkKlL;:'"\|`~zZxXcCvVbBnNmM,<.>/?}
Now, if we want to use Kakoune on European Mac keyboard, we can assign these
options to langmap_default and langmap:
set-option global langmap_default %opt{langmap_eu_qwerty_mac}
set-option global langmap %opt{langmap_ru_jcuken_mac}
Of course these layouts are shipped with the plugin, but I don't have access to
many keyboards, therefore I can't add most of the different layouts, so I will
highly appreciate pull requests with additional langmaps. Check the order of
keys in langmap_us_qwerty option. Usually it looks like this:
`~1!2@3#4$5%6^7&8*9(0)-_=+\| # for the upper row
  qQwWeErRtTyYuUiIoOpP[{]}   # for the qwerty row
   aAsSdDfFgGhHjJkKlL;:'"    # for the home row
    zZxXcCvVbBnNmM,<.>/?     # for the bottom row
Combined in single line. Note that despite the fact that \ on most
keyboards is on the qwerty row, I've put it on the upper row because it is
like so on my keyboards, and it was easier to add layouts this way. I've used it
to add most layouts featured with this plugin, as well as Dvorak variants. If
this will cause problems when adding langmas I'm open to tweak that.
powerline.kak and modeline support
This plugin supports powerline.kak plugin, and adds a langmap module to
powerline_modules. You can add this module to your powerline_format.
If you don't use powerline.kak you can add current active langmap indicator
to Kakoune's builtin modeline by using langmap_current_lang option.