2009-03-03 6 views

Respuesta

49

buffer-substring junto con region-beginning y region-end puede hacer eso.

+0

Eso es maravilloso, gracias. Definitivamente no habría encontrado eso solo. – Singletoned

59

Como dice starblue, (buffer-substring (mark) (point)) devuelve el contenido de la región, si se ha establecido la marca. Si no desea que el string properties, puede utilizar la variante 'buffer-substring-no-properties.

Sin embargo, si está escribiendo un comando interactivo, existe una forma mejor de obtener los puntos finales de la región, utilizando el formulario (interactive "r"). He aquí un ejemplo de 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))) 

cuando se llama desde el código Lisp, la forma (interactive ...) se ignora, por lo que puede utilizar esta función para contar las líneas en cualquier parte del búfer, no sólo de la región, por pasando los argumentos apropiados: por ejemplo, (count-lines-region (point-min) (point-max)) para contar las líneas en la parte estrecha de la memoria intermedia. Pero cuando se le llama de forma interactiva, se evalúa la forma (interactive ...), y el código "r" suministra el punto y la marca, como dos argumentos numéricos, más pequeño primero.

Consulte el Manual de Emacs Lisp, secciones 21.2.1 Using Interactive y 21.2.2 Code Characters for interactive.

4

Si desea copiar el contenido de la región en un código Lisp a una estructura de datos accesible al usuario como kill-ring, X portapapeles o registro, manual de Emacs Lisp recomienda utilizar filter-buffer-substring en lugar de simplemente buffer-substring. Antes de copiar, la función aplica funciones de filtro desde una variable de lista llamada filter-buffer-substring-functions. La función era added in version 22.3.

Cuestiones relacionadas