当且仅当区域在Emacs中处于活动状态时,标记是否处于活动状态?
无论是否启用瞬态标记模式,“标记处于活动状态”是否与Emacs中的“区域处于活动状态”意思相同?因此,激活标记与激活区域相同 我感到困惑,因为这两个短语在许多地方似乎可以互换使用,而region-active-p的定义似乎采取的立场是,当且仅当启用了瞬态标记模式且标记处于活动状态时,区域才被视为活动当且仅当区域在Emacs中处于活动状态时,标记是否处于活动状态?,emacs,elisp,selection,region,textselection,Emacs,Elisp,Selection,Region,Textselection,无论是否启用瞬态标记模式,“标记处于活动状态”是否与Emacs中的“区域处于活动状态”意思相同?因此,激活标记与激活区域相同 我感到困惑,因为这两个短语在许多地方似乎可以互换使用,而region-active-p的定义似乎采取的立场是,当且仅当启用了瞬态标记模式且标记处于活动状态时,区域才被视为活动 (defun region-active-p () "Return t if Transient Mark mode is enabled and the mark is active. So
(defun region-active-p ()
"Return t if Transient Mark mode is enabled and the mark is active.
Some commands act specially on the region when Transient Mark
mode is enabled. Usually, such commands should use
`use-region-p' instead of this function, because `use-region-p'
also checks the value of `use-empty-active-region'."
(and transient-mark-mode mark-active))
两者之间的关系是什么
- 区域高亮显示(即该区域采用不同的背景色)
- 区域是活跃的
- 马克是活跃的
Persistent Mark
)所说:“当
瞬态标记模式关闭,标记永远不会停用“
但最近人们有时并不是这样说的。原因与“临时瞬态标记模式”有关(请参阅Elisp手册,节点标记)
(请记住,如果缓冲区中没有任何标记,则也没有区域。)侧注。下面是一种跟踪mark active何时为真的方法。评估以下代码:
(defun my-message-mark-active ()
(set-background-color
(if mark-active "grey90" "white")))
(defvar my-watch-mark-active-mode nil)
(defun my-watch-mark-active-mode ()
(interactive)
(if my-watch-mark-active-mode
(progn
(cancel-timer my-watch-mark-active-mode)
(setq my-watch-mark-active-mode nil)
(message "off"))
(setq my-watch-mark-active-mode
(run-with-idle-timer 0.1 t #'my-message-mark-active))
(message "on")))
然后键入M-x我的监视标记激活模式
以启用监视标记激活。背景色为灰色90,而“标记活动”为真,否则为白色。再次键入M-x我的手表标记激活模式
将其关闭
这将有助于验证启用瞬态标记模式时,当且仅当区域高亮显示时,标记才处于活动状态。这也将验证当瞬态标记模式被禁用时,标记活动在某个点变为真,然后再不会变为假,这是每个缓冲区