我定义了一个函数并希望使用它
区域为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
如何消除这种抱怨?感谢。
答案 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
命令后)以插入选定的文本。