想问一下,interactive 可不可以智能别后面带不带参数

目前,对 interactive 的应用还不是很熟。它有没有混合交互模式? 比如自动识别后面带或不带参数?

以下代码结构在执行时,会出现一点问题

(defun blove/dict-tips (beg end)
  (interactive "r")
  (when (boundp 'evil-mode)
	(when 条件 1
        ;; 无需 interactive "r" 的代码段,无需 beg end 参数
	  )
	(when 条件 2
        ;; 需要 interactive "r" 的代码段,需要 beg end 参数
        ;; 或者是一个外部带参函数
		)
	  )
	)
  )

第一次执行时,如果符合条件 1 会出错。
当遇到符合条件 2 的情况运行成功后,再遇到符合条件 1的情况,就正常了。

以下是实际出问题的应用代码,
目的功能是:当鼠标停留在某一个word上,自动获取该词返回字符串,供使用。适用于 emacs 默认模式和 evil-normal-state
附加功能是:进入 evil-visual-state 选取一段内容,作为返回字符串,供使用。
两种功能分开使用时,一切正常,合到一起,就不正常了。或许是我思路的问题?
麻烦大家帮忙诊断一下。

如果仅仅是需要区分选中和不选中的话其实不需要使用 (interactive "r"),可以使用 (region-active-p) 来判断有没有选中,然后使用 (region-beginning) (region-end) 来获取位置,使用 (buffer-substring-no-properties (region-beginning) (region-end))获取数据,比如下面这样:

(if (region-active-p)
    ;; 选中,获取数据
    (buffer-substring-no-properties
     (region-beginning) (region-end))
  ;; 没选中,开始处理
  )
1 个赞

非常感谢!!!:+1: 按照这个方法,程序正常啦!得到了想要的结果!