(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)))
Penggunaan (interactive "r")
berarti bahwa parameter beginning
dan end
secara otomatis akan menerima nilai-nilai dari wilayah awal dan akhir wilayah, masing-masing, ketika fungsi dipanggil. (Anda juga bisa mendapatkan nilai-nilai itu kapan saja menggunakan fungsi region-beginning
dan region-end
, masing-masing.)
Wilayah selalu ada (jika ada tanda di buffer saat ini), tetapi Anda mungkin tidak berpikir itu ada. Wilayah aktif saat disorot (teks dipilih). Anda dapat menguji apakah wilayah tersebut aktif menggunakan predikat region-active-p
. Tetapi tes yang lebih baik biasanya use-region-p
, karena (secara default) itu mengembalikan true (non- nil
) hanya ketika wilayah tersebut aktif dan tidak kosong (titik dan tanda berbeda).
Awalnya, tidak ada highlight dari wilayah tersebut. Dan untuk waktu yang lama, meskipun penyorotan tersedia, itu bukan perilaku default. Agar penyorotan terjadi, Anda harus transient-mark-mode
menghidupkan (atau menyalakan setidaknya untuk sementara). Secara default, transient-mark-mode
dihidupkan dalam versi Emacs terbaru.
Sangat membantu untuk melihat definisi predikat use-region-p
:
(defun use-region-p ()
(and (region-active-p)
(or use-empty-active-region
(> (region-end) (region-beginning)))))
use-empty-active-region
adalah opsi pengguna, yang nilai default-nya adalah nil
(true), yang berarti bahwa secara default use-region-p
tidak akan mengembalikan true jika wilayah itu kosong. Dalam hal itu, agar benar, akhir wilayah harus lebih besar dari awal (perilaku yang saya jelaskan di atas).
Dan jika kita melihat definisi region-active-p
:
(defun region-active-p ()
(and transient-mark-mode
mark-active
(mark)))
Kami melihat bahwa itu mengembalikan true (non- nil
) ketika semua ini benar:
transient-mark-mode
dihidupkan.
- Tanda aktif (
mark-active
).
- Ada tanda di buffer saat ini.
Tanda aktif sebenarnya adalah tentang semua wilayah yang aktif. Saat aktif, dengan asumsi bahwa transient-mark-mode
itu aktif dan ada tanda di buffer saat ini, wilayah tersebut disorot.