Previously if the completion entry text had a multibyte character the
ghostly text renderd improperly, for example:
The cursor position is "|"
1. In this case the ghost text was spliting a multibyte character.
entry: comunicación
prev: comunicacio|<b3>n
now: comunicacio|n
2. In this case the multibyte character was before meking the index
wrong, therefore presenting an extra character of the entry as ghost text.
entry: árbol
prev: arbol|l
now: arbol|
With this changes the calculation for the bytes to show is done based on
characters avoiding both of the issues above.
In `keymap.autoindent`, `!^F` is added to `indentkeys`, then `<C-f>` is
fed. In the end `indentkeys` is reset to its original value.
We need to escape any `|` in `indentkeys` when setting the option
because otherwise they are seen as the command separator.
Before this change:
1. `misc.merge({a = misc.none}, {a = nil})` returned `{a = misc.none}`
2. `misc.merge({a = nil}, {a = misc.none})` returned `{a = misc.none}`
(1) can cause error if a non-existing mapping is set to `config.disable`
(which is an alias for `misc.none`).
(2) does not cause any issue to date, but is inconsistent with the
expected behavior of `misc.merge(…)`.
After this change:
1. `misc.merge({a = misc.none}, {a = nil})` returns `{a = nil}`
2. `misc.merge({a = nil}, {a = misc.none})` returns `{a = nil}`
Fixes#440.