Limite à restrição anterior

8

Existe uma maneira conveniente de restaurar a restrição anterior? Então, após a seguinte sequência de eventos:

  • Marcar uma região
  • Ligue narrow-to-regione faça algum trabalho.
  • Ligue widenpara pular e procurar algo

Eu gostaria de restringir a região original novamente sem precisar marcá-la novamente.

glucas
fonte
Isso é complicado porque, é claro, o conteúdo do buffer pode mudar entre a chamada para widene a chamada para um renarrowcomando hipotético . Talvez a melhor abordagem seja salvar os limites da região em algum lugar e ter um comando para marcar a última região salva.
glucas

Respostas:

2

Em vez de restringir o buffer principal, você pode abrir um novo buffer indireto e restringir que:

(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)))

Isso abrirá um novo buffer indireto do seu buffer atual restrito à sua região atual. A edição desse buffer é como editar o buffer principal e você poderá alternar entre eles.

Igual a:

insira a descrição da imagem aqui

Você pode expandir isso com recursos interessantes, como

  • estreitando automaticamente para a função atual
  • nomear o novo buffer após a função atual
  • uma combinação de teclas para alternar entre o buffer indireto de uma função e o buffer principal
  • não criando um novo buffer indireto para funções que já têm um aberto

Isso tudo depende de você.

Jordon Biondo
fonte
Obrigado, este pode ser o caminho a percorrer. Também pude ver o inverso: a partir de um buffer restrito, crie um buffer indireto ampliado para procurar alguma coisa.
glucas
7

Desculpe, mas não vi sua pergunta antes.

Esse é precisamente um dos motivos da biblioteca Zones ( zones.el).

Quando você restringe o buffer, cada restrição é adicionada a um anel de restrições, que inclui o buffer completo (sem restrição). As restrições podem ser aninhadas, mas não precisam ser. Eles podem ser quaisquer regiões.

Você pode alternar entre os estreitos (usando C-x n x x x...). Você pode ir diretamente ao N- ésimo estreitamento anterior usando um prefixo numérico arg; por exemplo C-3 C-x n x,. A planície é C-uampliada completamente (igual C-x n wou alternando para a entrada de anel sem restrição). C-0esvazia o anel.

A linha de modo informa qual estreitamento (restrição de buffer) está atual.

Você pode até salvar o anel de restrições atuais do buffer persistentemente e restaurá-lo mais tarde. Se você usar a biblioteca Favorito + , poderá marcar um anel de restrições e restaurá-lo mais tarde, saltando para o favorito.

Para mais informações, consulte Várias restrições .


Consulte também Indireto estreito (biblioteca narrow-indirect.el). Permite criar facilmente qualquer número de buffers indiretos que são clones do buffer principal e que são limitados a partes específicas dele.

Desenhou
fonte
@phils: Thx; feito. Na verdade, isso foi mencionado na página Zonas , mas eu também o adicionei à página Múltiplos estreitos .
Desenhou