emacs - elisp函数运行方式不同,结果不同;为什么?

标签 emacs elisp

编辑:也许(在原始帖子中)我错误地使用了“ transient ”一词(我对行话还不够熟悉)。我真正的意思是突出显示的区域将消失当用户按下 时立即导航键 例如。箭头键...(第二次编辑:我删除了“ transient ”这个词)

选择区域以便用户获得 的特殊问题“光标键移动会使突出显示消失”最近一直是我存在的祸根。根据我运行以下脚本的方式,我得到不同的结果。

为什么它会给出不同的结果,更具体地说,有没有办法让它产生 “光标键使突出显示消失”无论正在运行哪种模式,或者是否在测试时对其进行评估? .. CUA模式有这种行为,但我真的需要非CUA模式也能做到(如果可能的话,还要评估)......

这是结果,后面是代码。 (GNU Emacs 23.1.1)

  • 启用 CUA 模式
  • 通过 C-x C-e 评估— 两者 (call-trans-hi)(trans-hi)NO-GO:设置标记和移动点都指向 EOL,但没有突出显示。
  • 执行M-x call-trans-hi好的:工作正常;该区域突出显示,然后在第一次按下键时消失。
  • 通过键绑定(bind)C-f1好的:工作正常;该区域突出显示,然后在第一次按下键时消失。
  • 没有 CUA 模式(几乎是标准 emacs)
  • 通过 C-x C-e 评估
    NO-GO:同 1.启用 CUA 时。
  • 执行M-x call-trans-hiNO-GO:这条线被突出显示,但它很粘!并且需要 C-g (键盘退出)清除它。
  • 通过键绑定(bind)C-f1NO-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/

    相关文章:

    emacs 中的 Python 高亮显示

    Emacs lua 模式问题 : (void-function interactively-called-p)

    emacs - Emacs 临时模式下的密码编辑

    emacs - 如何读取Emacs语法表中的范围?

    emacs - 如何根据条件加载yasnippets

    emacs - 命令取消注释多行而不选择它们

    elisp - Emacs Lisp 嵌套函数 - 无效变量错误

    unit-testing - 无法以交互方式运行 Emacs ERT 测试

    Emacs 组织模式发布议程

    Emacs 完成点函数