编辑:也许(在原始帖子中)我错误地使用了“ transient ”一词(我对行话还不够熟悉)。我真正的意思是突出显示的区域将消失当用户按下 时立即导航键 例如。箭头键...(第二次编辑:我删除了“ transient ”这个词)
选择区域以便用户获得 的特殊问题“光标键移动会使突出显示消失”最近一直是我存在的祸根。根据我运行以下脚本的方式,我得到不同的结果。
为什么它会给出不同的结果,更具体地说,有没有办法让它产生 “光标键使突出显示消失”无论正在运行哪种模式,或者是否在测试时对其进行评估? .. CUA模式有这种行为,但我真的需要非CUA模式也能做到(如果可能的话,还要评估)......
这是结果,后面是代码。 (GNU Emacs 23.1.1)
C-x C-e
评估— 两者 (call-trans-hi)
和 (trans-hi)
NO-GO:设置标记和移动点都指向 EOL,但没有突出显示。 M-x call-trans-hi
好的:工作正常;该区域突出显示,然后在第一次按下键时消失。 C-f1
好的:工作正常;该区域突出显示,然后在第一次按下键时消失。 C-x C-e
评估NO-GO:同 1.启用 CUA 时。
M-x call-trans-hi
NO-GO:这条线被突出显示,但它很粘!并且需要 C-g
(键盘退出)清除它。 C-f1
NO-GO:这条线被突出显示,但它很粘!并且需要 C-g
(键盘退出)清除它。 ;test (trans-hi) EOL
(defun trans-hi ()
"transient highlight"
(beginning-of-line)
(push-mark (point))
(end-of-line)
(activate-mark))
;test (call-trans-hi) EOL
(defun call-trans-hi ()
"call transient highlight"
(interactive)
(trans-hi))
(global-set-key [C-f1] 'call-trans-hi)
最佳答案
当你查看 activate-mark
的来源时,你可以看到它只是设置了一些变量。我想这就是为什么你在 中都看不到标记的原因。 1. ,因为实际突出显示发生在交互执行函数时完成的某些事情中,而不仅仅是调用它们。
在其他没有 CUA 模式的情况下, transient 突出显示在 CUA 模式之外是如何工作的。如果您想要 CUA 模式行为,请分别使用 CUA 模式。那部分。
编辑:
这是否会改变(添加 setq
行)到 trans-hi
?使突出显示以您想要的方式工作?
(defun trans-hi ()
"transient highlight"
(beginning-of-line)
(push-mark (point))
(end-of-line)
(setq transient-mark-mode (cons 'only transient-mark-mode))
(activate-mark))
关于emacs - elisp函数运行方式不同,结果不同;为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337508/