2012-11-08 38 views
5

Tôi đã xác định một hàm và muốn ues vùng làm thông số optional.Làm thế nào để sử dụng (tương tác "r") chức năng trong tình huống này?

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

tôi muốn grep chars chọn trong bộ đệm nếu nhãn hiệu được kích hoạt, hoặc grep từ dưới con trỏ trong bộ đệm nếu nhãn hiệu không hoạt động.

Nhưng Trong tình hình: Tôi mở tập tin và đã không chọn bất cứ điều gì, sau đó chạy lệnh my-grep-select, emacs phàn nàn:

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

Làm thế nào tôi có thể loại bỏ điều này phàn nàn? Cảm ơn.

+1

tôi sẽ không sử dụng '(tương tác "r")' và chỉ sử dụng '(khu vực-active- p) 'và' (vùng bắt đầu) 'và' (vùng cuối) ' –

+0

Rất tốt. Cảm ơn bạn. –

+0

Tôi đã thêm nó làm câu trả lời, trong trường hợp bạn muốn chấp nhận ... –

Trả lời

5

Cách đúng để làm điều đó có thể là:

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

Bạn không cần phải sử dụng (interactive "r"). Thay vào đó, bạn chỉ có thể kiểm tra xem khu vực có đang hoạt động không bằng cách sử dụng (region-active-p) hoặc tương tự sau đó sử dụng (region-beginning)(region-end) người khác làm bất kỳ điều gì khác.

Có lẽ đó là sự lựa chọn được thực hiện khi khu vực đang hoạt động và một bộ khác nhau của các tham số được truyền ...

Các vấn đề liên quan