о основной области elisp - PullRequest
       282

о основной области elisp

0 голосов
/ 21 сентября 2011

посмотрите на эту простую процедуру:

(defun test ()
  (interactive)
  (push-mark)
  (setq mark-active t)
  (search-forward "a" nil nil 1))

Перемещает курсор к ближайшему «а» и выделяет путь. Конечно, это очевидно.

Но он ведет себя по-разному в зависимости отчто будет следующим вводом после выполнения этой процедуры. Например, вы вводите символ, такой как 'b' или \ Cg, выделение исчезает, но если вы вводите \ Cf или \ Ce, выделение сохраняется.Итак, вот мой вопрос: что заставляет эти входные данные вести себя по-разному?

Ответы [ 2 ]

6 голосов
/ 21 сентября 2011

Из руководства Emacs :

Установка метки в позиции в тексте также активирует ее.Когда метка активна, Emacs указывает экстент региона, выделяя текст внутри него, используя грань региона (см. Настройка лица).После определенных команд без движения, включая любую команду, которая изменяет текст в буфере, Emacs автоматически деактивирует метку;это отключает подсветку.Вы также можете явно отключить метку в любое время, набрав Cg (см. Выход).

5 голосов
/ 21 сентября 2011

В дополнение к тому, что сказал JB, вы можете предотвратить автоматическую деактивацию метки, на которую он ссылался, выполнив в конце команды:

(setq deactivate-mark  nil)

Вот строка документа. Обратите внимание на последнее предложение (именно это говорил JB).

deactivate-mark is a variable defined in `C source code'.
Its value is nil

Documentation:
If an editing command sets this to t, deactivate the mark afterward.
The command loop sets this to nil before each command,
and tests the value when the command returns.
Buffer modification stores t in this variable.
...