2009-03-03 13 views

risposta

59

Come dice Starblue, (buffer-substring (mark) (point)) restituisce il contenuto dell'area, se il contrassegno è impostato. Se non si desidera il string properties, è possibile utilizzare la variante 'buffer-substring-no-properties.

Tuttavia, se si sta scrivendo un comando interattivo , c'è un modo migliore per ottenere gli endpoint della regione, utilizzando il modulo (interactive "r"). Ecco un esempio da simple.el:

 
(defun count-lines-region (start end) 
    "Print number of lines and characters in the region." 
    (interactive "r") 
    (message "Region has %d lines, %d characters" 
     (count-lines start end) (- end start))) 

Quando chiamato da codice Lisp, la forma (interactive ...) viene ignorato, in modo da poter utilizzare questa funzione per contare le linee in qualsiasi parte del buffer, non solo la regione, da passando gli argomenti appropriati: ad esempio, (count-lines-region (point-min) (point-max)) per contare le righe nella parte ristretta del buffer. Ma quando chiamato in modo interattivo, viene valutato il modulo (interactive ...) e il codice "r" fornisce il punto e il segno, come due argomenti numerici, il più piccolo per primo.

Vedere il manuale Emacs Lisp, sezioni 21.2.1 Using Interactive e 21.2.2 Code Characters for interactive.

4

Se si desidera copiare il contenuto dell'area in un codice Lisp in una struttura di dati accessibile all'utente come kill-ring, X appunti o registro, il manuale di Emacs Lisp consiglia di utilizzare filter-buffer-substring anziché semplicemente buffer-substring. Prima di copiare, la funzione applica le funzioni di filtro da una variabile di lista denominata filter-buffer-substring-functions. La funzione era added in version 22.3.

Problemi correlati