【问题标题】:Is mark active if and only if region is active in Emacs?当且仅当区域在 Emacs 中处于活动状态时,标记是否处于活动状态?
【发布时间】:2013-09-12 22:55:08
【问题描述】:

无论是否启用了瞬态标记模式,“标记处于活动状态”是否与 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))

两者有什么关系

  • 区域被突出显示(即该区域具有不同的背景颜色)

  • 区域处于活动状态

  • 标记处于活动状态

何时启用瞬态标记模式,何时禁用?

【问题讨论】:

    标签: emacs elisp selection region textselection


    【解决方案1】:
    1. 区域处于活动状态 = 标记处于活动状态。但不一定要突出显示。

    2. 如果活动和瞬态标记模式已打开,则该区域会突出显示。

    3. 如果您使用鼠标或使用 Shift + 光标键设置该区域,也会暂时突出显示该区域,即,即使瞬态标记模式已关闭。

    除非该区域为空,否则您不会看到任何突出显示。

    在我看来,“活动”仅适用于瞬态标记模式。关闭模式时没有任何意义。其行为取决于该区域是否处于活动状态的任何函数只会这样做 启用 t-m 模式时。正如 Emacs 手册(节点 Persistent Mark)所说:“当 瞬态标记模式已关闭,标记从不停用"

    但最近有时不是这样说的。原因与“临时瞬态标记模式”有关(参见 Elisp 手册,节点 The Mark)。

    (请记住,如果缓冲区中还没有任何标记,那么那里也没有区域。)

    【讨论】:

      【解决方案2】:

      旁注。这是一种跟踪标记活动何时为真的方法。评估以下代码:

      (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 以打开观看标记活动。背景颜色为 gray90,而 mark-active 为 true,否则为白色。再次输入M-x my-watch-mark-active-mode 将其关闭。

      这将有助于验证在启用瞬态标记模式时,当且仅当区域被突出显示时,标记才处于活动状态。这也将验证当瞬态标记模式被禁用时,标记活动在某个时候变为真,然后永远不会变为假,这是每个缓冲区。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        相关资源
        最近更新 更多