Sempre que eu ligo fill-paragraph
, o buffer é sempre marcado como modificado, mesmo que o comando não tenha efeito (ou seja, se o parágrafo já estiver preenchido). Ele também cria uma ação anulável vazia (facilmente detectada com undo-tree-mode
). Outros comandos com potencial para fazer alterações, como os comandos de indentação, não marcam o buffer como modificado ou criam uma ação que não pode ser desfazida se nada foi alterado. Existe alguma maneira de fill-paragraph
marcar o buffer modificado e criar uma ação que não pode ser desfazida apenas se ele realmente mudou alguma coisa?
fill-paragraph
Lily Chung
fonte
fonte
M-q
não marca o buffer alterado por padrão, pelo menos nos meus testes. Que modo você está usando? Eu acho que o modo está sobrescrevendofill-paragraph
de alguma forma.Respostas:
Observe que isso foi corrigido para o Emacsen mais recente (v.26 para cima).
fonte
O problema é que
fill-paragraph
(ou melhor,fill-region-as-paragraph
) removerá e reinserirá novas linhas enquanto divide seu parágrafo. Não modificará o buffer se houver apenas uma linha. O no-op na lista de desfazer que você testemunha está apenasfill-paragraph
removendo e reinserindo novas linhas.Não é trivial evitar isso. A seguir, é um hack muito ruim e altamente ineficiente para buffers grandes, mas talvez funcione para você. O comando imita
fill-paragraph
(M-q
) com o mesmo comportamento, exceto que ele armazena o conteúdo do buffer antes de chamá-lo e, posteriormente, se o conteúdo permanecer o mesmo, ele restaurará o estado de modificação e desfará a lista antes da alteração. Para fazer isso, ele precisa de uma cópia (duas, na verdade) do conteúdo do buffer; portanto, isso é realmente ineficiente. :-)Você pode vincular isso
M-q
.fonte
fill-paragraph
faz alguma distinção entre vários casos, ou seja, se comporta de maneira diferente dependendo de uma região ativa, das funções de preenchimento de parágrafos existentes etc. Você teria que replicar esse comportamento para descobrir quais partes do buffer serão realmente alteradas. Possível, mas complicado. :-)Resposta tardia, mas aqui está uma versão simples que não modifica o buffer se o texto não for alterado.
Ele adapta algumas das idéias da resposta de @ JorgenSchäfer, mas funciona apenas com o parágrafo atual e apenas de maneira simples, separada por espaços em branco (consulte os comentários na resposta de @ JorgenSchäfer sobre complicações ocultas).
Esse é o único caso de uso relevante para meus próprios propósitos (ou seja, uso interativo com prosa "normal", sem região ativa), por isso estou publicando-o caso alguém queira usá-lo ou melhorá-lo para casos de uso mais complicados .
fonte