(defun some-function (beginning end)
(interactive "r")
(if (use-region-p)
(message "The region is active, and is from %d to %d" beginning end)
(message "The region is still there (from % d to %d), but it is inactive"
beginning end)))
Việc sử dụng (interactive "r")
có nghĩa là các tham số beginning
và end
sẽ tự động nhận các giá trị của vùng bắt đầu và kết thúc vùng tương ứng, khi hàm được gọi. (Bạn cũng có thể nhận các giá trị đó bất cứ lúc nào bằng cách sử dụng các hàm region-beginning
và region-end
, tương ứng.)
Vùng luôn có mặt (nếu có một dấu trong bộ đệm hiện tại), nhưng bạn có thể không nghĩ đó là. Vùng được kích hoạt khi được tô sáng (văn bản được chọn). Bạn có thể kiểm tra xem vùng đang hoạt động bằng cách sử dụng vị ngữ region-active-p
. Nhưng thử nghiệm tốt hơn thường là use-region-p
, bởi vì (theo mặc định) nó chỉ trả về true (không phải nil
) khi vùng này hoạt động và không trống (điểm và dấu là khác nhau).
Ban đầu, không có sự nổi bật của khu vực. Và trong một thời gian dài, mặc dù việc làm nổi bật đã có sẵn, đó không phải là hành vi mặc định. Để tô sáng xảy ra, bạn phải transient-mark-mode
bật (hoặc bật ít nhất là tạm thời). Theo mặc định, transient-mark-mode
được bật trong các phiên bản Emacs gần đây.
Thật hữu ích khi xem xét định nghĩa của vị ngữ use-region-p
:
(defun use-region-p ()
(and (region-active-p)
(or use-empty-active-region
(> (region-end) (region-beginning)))))
use-empty-active-region
là một tùy chọn người dùng, có giá trị mặc định là nil
(true), nghĩa là theo mặc định use-region-p
sẽ không trả về true nếu vùng trống. Trong trường hợp đó, để nó trở về đúng, phần cuối của vùng phải lớn hơn phần đầu (hành vi tôi đã mô tả ở trên).
Và nếu chúng ta nhìn vào định nghĩa của region-active-p
:
(defun region-active-p ()
(and transient-mark-mode
mark-active
(mark)))
Chúng tôi thấy rằng nó trả về true (không- nil
) khi tất cả những điều này là đúng:
transient-mark-mode
Được bật.
- Dấu đang hoạt động (
mark-active
).
- Có một dấu trong bộ đệm hiện tại.
Dấu hiệu đang hoạt động thực sự là những gì khu vực đang hoạt động là tất cả về. Khi nó hoạt động, giả sử transient-mark-mode
là bật và có một dấu trong bộ đệm hiện tại, vùng được tô sáng.