我正在编写一些自定义函数来以特定方式移动这一点,而且我遇到了管理标记和问题的问题。地区适当。 为了便于说明,这里有几行代码实际上做得不多,它们只是将[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)
现在让我们考虑两种情况:
在emacs 24.4及更高版本中,一切都符合我的预期:
现在,在emacs 24.3和更早版本中,当禁用cua模式时,我仍然会得到相同的行为。 但是当启用cua模式时,我不理解的东西会出现在场景#2中。在这种情况下,似乎有一些交互,并且某些东西(CUA?)停用标记并将瞬态标记模式恢复为OLDVAL。任何人都可以解释会发生什么,甚至可能更好,如何编写我的自定义函数,以便它在所有情况下都具有所需的行为? (emacs 24或25,启用cua模式或不启用)
答案 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的自定义函数