Limitar a restricción previa

8

¿Hay alguna manera conveniente de restaurar la restricción anterior? Entonces, después de la siguiente secuencia de eventos:

  • Marcar una región
  • Llama narrow-to-regiony haz algo de trabajo.
  • Llama widenpara saltar y buscar algo

Me gustaría limitarme a la región original nuevamente sin tener que ir a marcarla nuevamente.

glucas
fuente
Esto es complicado porque, por supuesto, el contenido del búfer podría cambiar entre la llamada wideny la llamada a un renarrowcomando hipotético . Quizás el mejor enfoque es guardar los límites de la región en algún lugar y tener un comando para marcar la última región guardada.
glucas

Respuestas:

2

En lugar de reducir el búfer principal, puede abrir un nuevo búfer indirecto y reducir eso:

(defun indirect-region (beg end name)
  "Open a new named indirect buffer of the current buffer,
narrowed to region [BEG, END]."
  (interactive "r\nsname of narrowed buffer: ")
  (let ((new-buff
         (make-indirect-buffer (current-buffer)
                               (generate-new-buffer-name name)
                               t)))
    (switch-to-buffer new-buff nil t)
    (narrow-to-region beg end)))

Esto abrirá un nuevo búfer indirecto de su búfer actual reducido a su región actual, editar este búfer es como editar el búfer principal, y podrá alternar entre ellos.

Al igual que:

ingrese la descripción de la imagen aquí

Podría ampliar esto con características agradables como

  • estrechamiento automático a la función actual
  • nombrar el nuevo búfer después de la función actual
  • una combinación de teclas para saltar entre el búfer indirecto de una función y el búfer principal
  • no crear un nuevo búfer indirecto para funciones que ya tienen una abierta

Sin embargo, todo depende de ti.

Jordon Biondo
fuente
Gracias, este puede ser el camino a seguir. También pude ver lo inverso: desde un búfer estrecho, cree un búfer indirecto ampliado para buscar algo.
glucas
7

Lo siento, no vi tu pregunta antes.

Esta es precisamente una de las razones para las Zonas de la biblioteca ( zones.el).

Cuando estrecha el búfer, cada estrechamiento se agrega a un anillo de estrechamientos , que incluye el búfer completo (no restringido). Los estrechamientos se pueden anidar, pero no necesariamente. Pueden ser cualquier región en absoluto.

Puede alternar entre los estrechamientos (usando C-x n x x x...). Puede ir directamente a la N º estrechamiento anterior mediante el uso de un prefijo numérico arg; por ejemplo, C-3 C-x n x. La llanura se C-uensancha por completo (igual que C-x n wo en bicicleta a la entrada del anillo no estrecha). C-0vacía el anillo

La línea de modo le indica qué estrechamiento (restricción de búfer) es actual.

Incluso puede guardar el anillo de restricciones actuales del búfer de forma persistente y restaurarlo más tarde. Si usa la biblioteca Bookmark + , puede marcar un anillo de restricciones y luego restaurarlo saltando al marcador.

Para obtener más información, consulte Estrechamiento múltiple .


Ver también Narrow Indirect (biblioteca narrow-indirect.el). Le permite crear fácilmente cualquier cantidad de búferes indirectos que sean clones del búfer principal y que se reduzcan a porciones particulares de este.

Dibujó
fuente
@phils: Thx; hecho. En realidad, se mencionó en la página Zonas , pero también lo agregué a la página Múltiples limitaciones .
Dibujó el