Есть ли крючок, который я могу использовать для запуска моей функции при перемещении точки?

Я хотел бы добавить некоторый контекст навигации в modeline. Я могу понять, где я в порядке, и дать имя моей функции, но я не знаю, как это запускать каждый раз.

post-command-hook is the only thing I've found, but it sounds like it's overkill. Is there anything more appropriate?

4
@ Харальд, я полагаю, этого может и не быть. Документация не очень понятна при запуске этого крючка (т. Е. Что составляет команду). Для записи я на 100% согласен принять «на самом деле правильную вещь для использования» в качестве ответа.
добавлено автор pelms, источник
Команда RET команды M-x elisp-index-search . Команда - это функция с формой interactive или макросом клавиатуры (строковым или векторным форматом).
добавлено автор Mark Ireland, источник
Почему post-command-hook overkill? Возможно, вы не захотите, чтобы ваш крючок запускался каждый раз, когда он двигался, если это делается с помощью некоторого кода elisp. Существует много кода, который перемещает точку, чтобы делать вещи. Конечно, это обычно делается в save-excursion , но все же ... (я не знаю, может ли код решить, действует ли save-excursion ).)
добавлено автор AttackingHobo, источник

1 ответы

Я думаю, что post-command-hook - это то, что вы хотите использовать.

Он запускается каждый раз, когда выполняется команда . И команда - это в основном любые интерактивные действия, такие как щелчок мышью, ввод буквы (которая запускает self-insert-command ) или запускает команду, используя M-x .

Возможно, вы захотите убедиться, что ваш крючок не запущен во время ввода минибуфера. Я думаю, что обертывание тела в (за исключением (window-minibuffer-p) ...) позаботится об этом для вас.

И, возможно, вы хотите, чтобы ваш крючок был активным только при редактировании определенных файлов. В этом случае вы можете использовать локальный буфер post-command-hook : Использование

(add-hook 'post-command-hook #'your-hook nil :local)

позаботится об этом для вас. ( Отредактировано , чтобы добавить эту последнюю точку.)

7
добавлено
Не допускайте, чтобы явные переменные hook были локальными. Вместо этого используйте LOCAL аргумент при вызове add-hook .
добавлено автор Mark Ireland, источник
@phils Отличная точка. Я обновлю ответ.
добавлено автор AttackingHobo, источник