8

我定义了一个函数并想将该区域用作optional参数。

(defun my-grep-select(&optional beg end)
  (interactive "r")
    (if mark-active
       (....)
      (....))

如果标记处于活动状态,我想 grep 缓冲区中的选择字符,或者如果标记未激活,则 grep 缓冲区中光标下的单词。

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

The mark is not set now, so there is no region

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

4

3 回答 3

8

正确的做法可能是:

(defun my-grep-select(&optional beg end)
  (interactive
   (if (use-region-p) (list (region-beginning) (region-end))
     (list <wordbegin> <wordend>)))
  ...)
于 2012-11-08T03:35:49.153 回答
7

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

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

于 2012-11-08T05:23:42.353 回答
0

您也可以只使用M-n<down>在迷你缓冲区中(发出 M-x grep命令后)插入选定的文本。

于 2020-02-25T14:43:22.000 回答