Desidero accedere al contenuto dell'area corrente come stringa all'interno di una funzione. Per esempio:Come accedere ai contenuti della regione corrente in Emacs Lisp?
(concat "stringa" (get-region-as-string) "stringb")
Grazie
Ed
Desidero accedere al contenuto dell'area corrente come stringa all'interno di una funzione. Per esempio:Come accedere ai contenuti della regione corrente in Emacs Lisp?
(concat "stringa" (get-region-as-string) "stringb")
Grazie
Ed
buffer-substring
insieme region-beginning
e region-end
può farlo.
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.
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.
È meraviglioso, grazie. Sicuramente non l'avrei trovato da solo. – Singletoned