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

时间:2012-11-08 01:15:55

标签: emacs elisp

我定义了一个函数并希望使用它 区域为optional个参数。

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

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

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

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

如何消除这种抱怨?感谢。

3 个答案:

答案 0 :(得分:7)

正确的方法可能是:

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

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