“标记是否处于活动状态”只是意味着与Emacs中的“区域处于活动状态”相同,无论是否启用了瞬态标记模式?因此激活标记与激活区域相同吗?
我感到困惑,因为在很多地方似乎可以互换地使用两个短语,而region-active-p的定义似乎采取的立场是,当且仅当启用了瞬态标记模式并且标记处于活动状态时,该区域才被认为是活动的
(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))
之间的关系是什么
区域突出显示(即区域的背景颜色不同)
区域有效
标记已激活
当启用瞬态标记模式时,以及何时禁用它?
答案 0 :(得分:6)
区域处于活动状态=标记处于活动状态。但它未必突出显示。
如果启用了活动和瞬态标记模式,则会突出显示该区域。
如果您使用鼠标或使用Shift +光标键进行设置,即使瞬态标记模式已关闭,该区域也会暂时突出显示。
除非该地区为空,否则您将看不到任何突出显示。
从我的观点来看,“有效”仅适用于瞬态标记模式。模式关闭时没有任何意义。任何行为取决于该区域是否处于活动状态的函数都会这样做
当t-m-mode启用时。正如Emacs手册(节点Persistent Mark
)所说:“何时
瞬态标记模式关闭,标记从不取消激活“
但最近有时候并不是这样说的。原因与“临时瞬态标记模式”有关(参见Elisp手册,节点The Mark
)。
(请记住,如果缓冲区中还没有任何标记,那么那里也没有区域。)
答案 1 :(得分:0)
旁注。这是一种跟踪标记活动何时为真的方法。评估以下代码:
(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 my-watch-mark-active-mode
以启用观看标记 - 活动状态。背景颜色为灰色90而标记活动为真,否则为白色。再次输入M-x my-watch-mark-active-mode
即可将其关闭。
这将有助于验证当启用瞬态标记模式时,当且仅当区域突出显示时,标记才有效。这也将验证当禁用瞬态标记模式时,标记 - 活动在某个时刻变为真,然后永远不变为假,这是每个缓冲区。