Because I have stopped using Kakoune, this project will not receive active maintenance. The issues section has been closed, as I do not plan to address any issues myself. However, I welcome pull requests from anyone who encounters problems with this plugin and knows how to resolve them.
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.
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
Clone this repository somewhere:
git clone https://github.com/andreyorst/langmap.kakAnd put langmap.kak file to your autoload or source it manually form kakrc
and configure.
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.