spell.kak: Present spelling suggestions with :prompt

Previously, spelling suggestions were presented with the :menu command,
requiring the user to cycle through wild and fanciful alternatives to get to the
one they wanted. Now, we present suggestions with the :prompt command, which
allows the user to type to filter down the list, and also to customise the
replacement after they've chose it (perhaps to fix capitalisation or add
apostrophe-S).

We also use the mispelled word as the initial content of the prompt. That
filters out the wildest alternatives by default, and allows the user to edit the
original word instead of forcing them to choose from among the suggestions. To
get the full list of suggestions, it's easy enough to just backspace until the
word you want appears in the list.
This commit is contained in:
Tim Allen 2020-09-21 21:07:35 +10:00
parent dbd7e4da79
commit f75f484b84

View File

@ -142,20 +142,27 @@ define-command spell-next %{ evaluate-commands %sh{
define-command \ define-command \
-docstring "Suggest replacement words for the current selection, against the last language used by the spell-check command" \ -docstring "Suggest replacement words for the current selection, against the last language used by the spell-check command" \
spell-replace %{ evaluate-commands %sh{ spell-replace %{
options="" prompt \
if [ -n "$kak_opt_spell_last_lang" ]; then -init %val{selection} \
options="-l '$kak_opt_spell_last_lang'" -shell-script-candidates %{
fi options=""
suggestions=$(printf %s "$kak_selection" | eval "aspell -a $options" | grep '^&' | cut -d: -f2) if [ -n "$kak_opt_spell_last_lang" ]; then
menu=$(printf %s "${suggestions#?}" | awk -F', ' ' options="-l '$kak_opt_spell_last_lang'"
{ fi
for (i=1; i<=NF; i++) printf %s "$kak_selection" |
printf "%s", "%{"$i"}" "%{execute-keys -itersel %{c"$i"<esc>be}}" eval "aspell -a $options" |
kak -f '<a-s><a-K>^&<ret>d%s^[^:]*: <ret>d%s, <ret>c<ret><esc>'
} \
"Replace with: " \
%{
evaluate-commands -save-regs a %{
set-register a %val{text}
execute-keys c <c-r>a <esc>
}
} }
') }
printf 'try %%{ menu -auto-single %s }' "${menu}"
} }
define-command -params 0.. \ define-command -params 0.. \
-docstring "Add the current selection to the dictionary" \ -docstring "Add the current selection to the dictionary" \