При создании функции регион-отступ оставить регион отмеченным - PullRequest
4 голосов
/ 30 июня 2011

У меня проблемы с region-indent-function в haml-режиме, который я пытаюсь использовать в другом основном режиме.Предполагается, что мы сможем циклически выполнять отступ в области, оставляя область отмеченной после того, как haml-indent-region будет удален, но это не будет работать так, как задумано.После некоторого взлома я обнаружил, что выдача ошибки в конце функции заставляет Emacs сохранять помеченную область, как в этом примере:

(defun haml-indent-region (start end)
  (save-excursion
    ...)
  (error "")) ;; Terrible hack

Но мне действительно это не нравится.Есть ли чистый способ получить такое поведение без такого ужасного взлома?

1 Ответ

3 голосов
/ 30 июня 2011

Регион сбрасывается после команда завершается, поэтому вызов метки активации не имеет никакого эффекта. Выдача ошибки (нелокальный выход), по-видимому, предотвращает этот шаг, но это может быть ошибкой.

Хитрость: deactivate-mark

Если команда редактирования устанавливает это значение t, деактивируйте метку позже. Цикл команд устанавливает это в ноль перед каждой командой, и проверяет значение, когда команда возвращается. Модификация буфера сохраняет t в этой переменной.

Так что просто сделайте это в конце вашей команды:

  (setq deactivate-mark nil)
...