在这种情况下如何使用(交互式"r")功能?

yan*_*wen 7 emacs elisp

我定义了一个函数,并希望将该区域作为optional参数.

(defun my-grep-select(&optional beg end)
  (interactive "r")
    (if mark-active
       (....)
      (....))
Run Code Online (Sandbox Code Playgroud)

如果标记处于活动状态,我想grep缓冲区中的select chars;如果标记未激活,我想grep缓冲区中光标下的字.

但在这种情况下:我打开文件并没有选择任何东西,然后运行命令my-grep-select,emacs抱怨:

The mark is not set now, so there is no region
Run Code Online (Sandbox Code Playgroud)

我怎样才能消除这种抱怨?谢谢.

Ste*_*fan 7

正确的方法可能是:

(defun my-grep-select(&optional beg end)
  (interactive
   (if (use-region-p) (list (region-beginning) (region-end))
     (list <wordbegin> <wordend>)))
  ...)
Run Code Online (Sandbox Code Playgroud)


Mis*_*ble 5

您无需使用(interactive "r")。相反,您可以使用(region-active-p)或类似方法检查区域是否处于活动状态,然后使用(region-beginning),然后(region-end) 执行其他操作。

当区域处于活动状态并且传递了一组不同的参数时,也许可以选择...