Заставить flyspell переходить к концу слова при автокоррекции слова в Emacs

Меня раздражает, что flyspell, кажется, остается в середине слова, когда вы выполняете команду flyspell-auto-correct-word. Можно ли это изменить, чтобы заставить его перейти к концу слова после выполнения команды? Это может быть так же просто, как установить привязку клавиши к автозаполнению слова, а затем перейти к слову вперед, что я знаю, как это сделать. Но это не будет работать во всех случаях, потому что иногда курсор помещается за словом, если слово автозавершения было меньше, чем напечатанное слово. Любая помощь в этом была бы отличной.


person J Spen    schedule 08.09.2011    source источник


Ответы (2)


Попробуйте этот код:

(eval-after-load "flyspell"
  '(defun flyspell-ajust-cursor-point (save cursor-location old-max)
     (when (not (looking-at "\\b"))
       (forward-word))))

Протестировано с версией flyspell 1.7k и с версией, поставляемой с Emacs 23.2.

person Trey Jackson    schedule 08.09.2011

Я просмотрел (defun flyspell-auto-correct-word ...) и не вижу там хороших хуков или других точек настройки, поэтому я думаю, что лучше всего использовать C-h f defadvice:

(defadvice flyspell-auto-correct-word (after flyspell-forward-word activate) (flyspell-goto-next-error))
person Ross Patterson    schedule 08.09.2011
comment
Да, я знал, как это сделать, но проблема в том, что команда больше не работает должным образом, потому что она отменяет команду flyspell-auto-correct-word с помощью команды forward-word. Вы не можете многократно перебирать слова с помощью this. Приходится делать команду дважды каждый раз. Я думаю, если нет крючков или точек настройки, это единственный способ. Вот в чем я не был уверен. Это почти всегда первое слово, но я просто подумал, что может быть способ заставить его работать правильно. Я на самом деле просто использую путь, но спасибо за совет defadvice. - person J Spen; 08.09.2011
comment
Ах, да, ну нет никакого способа обойти это по определению. У вас есть C-. для попытки следующего исправления и C-, для перехода к следующей опечатке, но нет C-<mind-read> :-) - person Ross Patterson; 08.09.2011
comment
Да я тебя понял :). Я предполагаю, что это должно быть запрограммировано в пакете flyspell, который мне не по силам, так что я буду жить с этим. Почти всегда первое слово, когда я все равно хочу его использовать. Спасибо за помощь. - person J Spen; 08.09.2011
comment
Нет, как могло это быть запрограммировано где угодно. Если нужно сделать две разные вещи, и программа не может знать, что нужно сделать, то запрашивание пользовательского ввода (например, две разные команды, связанные с двумя разными клавишами) является единственным способом. можно сделать. - person Ross Patterson; 08.09.2011
comment
Не совсем уверен, что вы поняли, о чем я спрашивал, но проверьте ответ Трея Джексона, потому что он делает именно то, что я просил. Перемещает курсор в конец слова после замены слова. Вместо того, чтобы оставлять курсор на месте независимо от длины слова. Также сохраняет команду flyspell без изменений, так что вы можете повторять циклически. - person J Spen; 09.09.2011