¿Cuáles son los beneficios de usar tampones indirectos ? ¿En qué circunstancias son útiles?
¿Cuáles son los beneficios de usar tampones indirectos ? ¿En qué circunstancias son útiles?
Respuestas:
Para ver y editar múltiples ubicaciones del mismo búfer. Por lo tanto, no tiene que desplazarse por un búfer largo, sino simplemente cambiar la ventana a la región visible. Cada búfer clonado también tiene diferentes marcas de anillo, estrechamiento y otras propiedades del búfer. Si no usa el búfer indirecto pero crea otra ventana del mismo búfer, todo se comparte y no puede realizar otras funciones avanzadas más allá de ver y editar diferentes ubicaciones. Por ejemplo, con un búfer indirecto, puede doblar todo el bloque de código, crear efectivamente un "árbol de etiquetas" sin afectar el búfer original. Usando una ventana, ambos búferes en ambas ventanas se pliegan porque ambos son iguales.
En resumen, el búfer indirecto es un búfer completamente diferente que comparte el mismo texto y archivo en su búfer original, por lo que cuando guarda el búfer clonado, también guarda su archivo original.
Un caso de uso es usar un modo principal diferente en una parte de un archivo.
Por ejemplo, en un momento estaba trabajando con documentos xml con código dentro de ciertos elementos. Quería poder editar todo el documento como si fuera xml, pero aún tengo todas las características principales del modo para el lenguaje de programación incrustado en ciertos elementos, así que me limité al cuerpo de esos elementos en un búfer indirecto que ejecutaba el modo principal apropiado.
Aquí hay una función de mi configuración que uso para hacer esto:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Nota: esto no es perfecto, cosas como el bloqueo de fuente requieren un trabajo adicional especial para su uso en este escenario.
Los búferes indirectos le brindan múltiples vistas del mismo búfer, en particular, múltiples reducciones, cada una de las cuales actúa, en muchos aspectos, como un búfer separado.
Como narrow-indirect.el
dice el Comentario para la biblioteca :
Puedes usar buffers indirectos por más de lo que piensas. Puede usar clones tomados de porciones de buffers Dired, por ejemplo, para darle vistas útiles (activas) en una lista de directorios. Solo hay unas pocas teclas / comandos (como
g
para actualizar la lista) que no funcionan, porque dependen de una vista de todo el búfer Dired. Experimente, y sin duda encontrará nuevos usos interesantes para los amortiguadores indirectos.