(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)))
Die Verwendung von (interactive "r")
bedeutet, dass die Parameter beginning
und end
automatisch die Werte des Bereichsanfangs und des Bereichsendes empfangen, wenn die Funktion aufgerufen wird. (Sie können diese Werte auch jederzeit über die Funktionen region-beginning
bzw. region-end
abrufen.)
Die Region ist immer vorhanden (wenn sich eine Markierung im aktuellen Puffer befindet), aber Sie glauben möglicherweise nicht, dass dies der Fall ist. Die Region ist aktiv, wenn sie markiert ist (Text ist ausgewählt). Sie können mithilfe eines Prädikats testen, ob die Region aktiv ist region-active-p
. Der bessere Test ist jedoch in der Regel use-region-p
, da er (standardmäßig) nil
nur dann true (non- ) zurückgibt, wenn die Region sowohl aktiv als auch nicht leer ist (Punkt und Marke sind unterschiedlich).
Ursprünglich gab es keine Hervorhebung der Region. Und lange Zeit war die Hervorhebung zwar verfügbar, aber nicht das Standardverhalten. Damit die Hervorhebung erfolgt, müssen Sie sie aktiviert haben transient-mark-mode
(oder zumindest vorübergehend aktivieren). Standardmäßig transient-mark-mode
ist in neueren Emacs-Versionen aktiviert .
Es ist hilfreich, sich die Definition des Prädikats anzuschauen use-region-p
:
(defun use-region-p ()
(and (region-active-p)
(or use-empty-active-region
(> (region-end) (region-beginning)))))
use-empty-active-region
ist eine Benutzeroption, deren Standardwert nil
(true) ist . Dies bedeutet, dass standardmäßig use-region-p
kein true zurückgegeben wird, wenn die Region leer ist. In diesem Fall muss das Ende der Region größer als der Anfang sein (das oben beschriebene Verhalten), damit true zurückgegeben wird.
Und wenn wir uns die Definition von region-active-p
:
(defun region-active-p ()
(and transient-mark-mode
mark-active
(mark)))
Wir sehen, dass es true (non- nil
) zurückgibt, wenn all dies wahr ist:
transient-mark-mode
Ist eingeschaltet.
- Die Markierung ist aktiv (
mark-active
).
- Im aktuellen Puffer befindet sich eine Markierung.
Die Markierung, die aktiv ist, ist wirklich das, worum es in der Region geht, in der sie aktiv ist. Wenn es aktiv ist, transient-mark-mode
wird die Region hervorgehoben , sofern es eingeschaltet ist und sich eine Markierung im aktuellen Puffer befindet.
C-SPC
M-: mark-active
=> t. Sie können definitiv eine leere Region haben, die dennoch aktiv ist.