使用post-command-hook
之后的copy-region-as-kill
且post-command-hook
包含region-active-p
的测试时,该测试返回正数,因为transient-mark-mode
尚未返回nil
。
post-command-hook
是否设计为在执行 this-command
之前对存在的内容采取行动,或post-command-hook
是否应将this-command
看作世界{ {1}}已经开始了吗?
编辑:我很抱歉没有说明我使用的是最新版本的Emacs Trunk。以下是执行测试的当前函数:
(defun region-active-p ()
(and transient-mark-mode mark-active (mark)))
以下是来自M-x emacs-version
的消息:
GNU Emacs 24.4.50.1 (x86_64-apple-darwin10.8.0,
NS appkit-1038.36 Version 10.6.8 (Build 10K549)) of 2014-06-01 on MP.local
以下是假设可能需要使用copy-region-as-kill
复制的活动区域的示例,并在post-command-hook
运行时进行了测试。 [这样,假设没有活动区域,可以使用计算放置新的叠加层。]在此示例的上下文中,当nil
等于this-command
时,我需要测试返回copy-region-as-kill
实现该目标的一种方法是修改copy-region-as-kill
以在函数的尾端包含(setq transient-mark-mode nil)
。但是,我在修改像copy-region-as-kill
这样的主要功能时犹豫不决。 [在我看来,如果region-active-p
和this-command
等于copy-region-as-kill
,则包含说明该区域未激活的条件,这没有多大意义。]
Example http://www.lawlist.com/images/region_active_p_example.png
答案 0 :(得分:2)
transient-mark-mode
与此无关。请改为deactivate-mark
。
也就是说,您无法在命令后挂钩中使用region-active-p
,而是检查deactivate-mark
变量的值,请参阅docs。
答案 1 :(得分:1)
为了确保在运行
后没有活动区域(deactivate-mark t)
应该做的伎俩。为什么不用它来完成有问题的命令,而是使用post-command-hook
?
答案 2 :(得分:0)
初始草案(2014年6月4日):在查看本主题中的文档和有用的评论和答案之后,我非常倾向于专门设计用于使用的新测试在post-command-hook
内。这将避免修改kill-region
,copy-region-as-kill
和yank
的核心/主要功能。由于新函数将包含在我自己的小模式库中,因此没有理由不能对所述函数进行一些基本计算。 deactivate-mark
中标题为simple.el
的功能使用(setq mark-active nil)
和(setq transient-mark-mode nil)
,所以我没有理由不能在我自己中使用它们自定义功能。
编辑(2014年6月5日):修改初稿只是为了测试条件,而不是将变量(mark-active
或transient-mark-mode
)设置为{{1 }}
nil