2012-11-08 5 views
5

Я определил функцию и хотел, чтобы ues область как optional параметров.Как использовать (интерактивную функцию «r») в этой ситуации?

(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 

Как я могу устранить это жалуется? Благодарю.

+1

Я бы не использовать '(интерактивный«г»)' и просто использовать '(регион-active- p) 'и' (region-begin) 'и' (region-end) ' –

+0

Очень хорошо. Спасибо. –

+0

Я добавил его как ответ, если вы хотите принять ... –

ответ

5

Правильный способ сделать это может быть:

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

Вам не нужно использовать (interactive "r"). Вместо этого вы можете просто проверить, активен ли регион, используя (region-active-p) или аналогичные, а затем использовать (region-beginning) и (region-end) еще делать что-нибудь еще.

Возможно, есть выбор, чтобы быть сделано, когда область является активным и другой набор параметров передаются ...

Смежные вопросы