6

Transient Markモードが有効になっているかどうかに関係なく、「マークがアクティブ」とは単にEmacsの「リージョンがアクティブ」と同じことを意味しますか? したがって、マークをアクティブにすることは、リージョンをアクティブにすることと同じですか?

region-active-p の定義は、トランジェント マーク モードが有効で、マークがアクティブな場合にのみ、リージョンがアクティブと見なされるというスタンスを取っているように見える一方で、2 つのフレーズは多くの場所で同じ意味で使用されているように見えるため、私は混乱しています。

(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))

間の関係は何ですか

  • 領域が強調表示されます (つまり、領域の背景色が異なります)

  • リージョンはアクティブです

  • マークが有効です

トランジェント マーク モードが有効な場合と無効な場合はそれぞれ?

4

2 に答える 2

7
  1. リージョンがアクティブ = マークがアクティブです。しかし、必ずしも強調されるわけではありません。

  2. アクティブで、transient-mark-mode がオンの場合、リージョンが強調表示されます。

  3. マウスまたは Shift + カーソル キーを使用して設定した場合、つまり、transient-mark-mode がオフの場合でも、領域は一時的に強調表示されます。

ただし、領域が空の場合は強調表示されません。

私の見解では、「アクティブ」は transient-mark-mode にのみ適用されます。モードをオフにすると意味がありません。領域がアクティブかどうかに依存する関数は、tm-mode が有効になっている場合にのみ動作します。Emacs のマニュアル (ノードPersistent Mark) にあるように、「Transient Mark モードがオフの場合、マークは非アクティブ化されません

しかし、最近はそう言われることはありません。その理由は、「temporary transient-mark-mode」に関係しています (Elisp マニュアルの node を参照してくださいThe Mark)。

(バッファにまだマークがない場合は、リージョンも存在しないことに注意してください。)

于 2013-09-09T14:34:27.073 に答える
0

サイドノート。mark-active が true の場合を追跡する方法を次に示します。次のコードを評価します。

(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して、watching mark-active をオンにします。背景色は、mark-active が true の場合は gray90、それ以外の場合は白です。M-x my-watch-mark-active-modeオフにするには、もう一度入力します。

これは、トランジェント マーク モードが有効な場合に、リージョンがハイライトされている場合にのみマークがアクティブであることを確認するのに役立ちます。また、一時的なマーク モードが無効になっている場合、mark-active がある時点で true になり、その後 false にならないことも確認されます。これはバッファーごとです。

于 2013-09-10T12:08:58.293 に答える