瞬态标记模式和cua模式之间的相互作用?

时间:2017-08-31 16:05:52

标签: emacs dot-emacs cua-mode

我正在编写一些自定义函数来以特定方式移动这一点,而且我遇到了管理标记和问题的问题。地区适当。 为了便于说明,这里有几行代码实际上做得不多,它们只是将[home]键绑定到一个自定义函数,用于检查标记是否已经激活 - 如果没有,它会暂时启用瞬态标记并设置标记。在所有情况下,它都会按照您的预期称为“行首”。

import unittest
from element import Element

class TestHTMLGen(unittest.TestCase):

    def test_Element(self):
        page = Element("html", el_id=False)
        self.addTypeEqualityFunc(Element, self.are_elements_equal)
        self.assertEqual(page, Element("html", el_id=False))  # this is where I need help

    def are_elements_equal(self, first_element, second_element, msg=None):
        self.assertEqual(type(first_element), type(second_element))
        self.assertEqual(first_element.tag, second_element.tag)
        self.assertEqual(first_element.attribute, second_element.attribute)

现在让我们考虑两种情况:

  1. [home] - 任何未移位的光标移动键 - [home]
  2. [home] - 任何移动的光标移动键 - [home]
  3. 在emacs 24.4及更高版本中,一切都符合我的预期:

    1. [home]的第一次出现暂时启用瞬态标记(transient-mark-mode =(only。OLDVAL)。然后通过任何未移位的光标移动命令停用标记,并将transient-mark-mode恢复为OLDVAL可以在[home]
    2. 的后续调用中观察到
    3. 不同之处在于移位的光标移动键会使标记处于活动状态并暂时启用瞬态标记。在[home]的最后一次出现时,仍然可以在进入我的自定义函数时观察到transient-mark-mode =(仅。OLDVAL)
    4. 现在,在emacs 24.3和更早版本中,当禁用cua模式时,我仍然会得到相同的行为。 但是当启用cua模式时,我不理解的东西会出现在场景#2中。在这种情况下,似乎有一些交互,并且某些东西(CUA?)停用标记并将瞬态标记模式恢复为OLDVAL。任何人都可以解释会发生什么,甚至可能更好,如何编写我的自定义函数,以便它在所有情况下都具有所需的行为? (emacs 24或25,启用cua模式或不启用)

1 个答案:

答案 0 :(得分:0)

我相信我有一个答案的开头。 显然有两个问题。

第一个与emac 24.3及更早版本中的cua - post-command-handler-1的实现有关,其中包含:

  ;; Disable transient-mark-mode if rectangle active in current buffer.
  (if (not (window-minibuffer-p (selected-window)))
      (setq transient-mark-mode (and (not cua--rectangle)
                     (if cua-highlight-region-shift-only
                     (not cua--explicit-region-start)
                       t))))

第二个问题是“cua-mode”的一般问题:启用后,它似乎将'shift-select-mode'改为'nil'(在emacs 24.3及更早版本中)。 在启用cua模式后手动强制'shift-select-mode'到t似乎不是一个可行的选择,因为通常的移位选择(完全不涉及我的自定义[home])在这种情况下完全搞砸了

虽然我可以模糊地理解为什么事情不起作用,但我仍然完全不清楚如何在我的.emacs中编写可以使用版本24.3以及24.4的自定义函数