Ao executar o comando undo-tree-undo/redo
sucessivamente, as coisas são desfeitas / refeitas com base na ramificação ativa atual. Embora o usuário receba uma mensagem de ponto de ramificação ao longo do caminho, as ramificações anteriores são ignoradas, a menos que um usuário selecione manualmente uma ramificação diferente.
Entendo que posso abrir o visualizador e selecionar um ramo diferente; no entanto, seria muito útil manter pressionada a tecla Desfazer / Refazer e observar tudo acontecer na ordem exatamente oposta. Idealmente, isso deve funcionar independentemente de o visualizer
buffer estar aberto - isto é, calcular programaticamente a ordem do início ao início e do início ao fim.
P : Esta é essencialmente uma solicitação de recurso a ser estendida undo-tree
para permitir desfazer / refazer sucessivos lineares, independentemente de o buffer do visualizador estar aberto. [Novas funções e atalhos de teclado alternativos para esse novo recurso são certamente aceitáveis.]
fonte
undo-tree
Parece que o código faz parte do conceito que você pode alternar livremente entrebuffer-undo-tree
ebuffer-undo-list
alternandoundo-tree-mode
. Pelo que entendi sua pergunta, o manuseio originalbuffer-undo-list
faz o que você deseja. Por isso, sugere-se desligar temporariamenteundo-tree-mode
para o seu propósito. Lamentavelmente, a alternância entrebuffer-undo-tree
ebuffer-undo-list
parece ser buggy (pelo menos para mim). Então, talvez, o caminho a seguir seja apenas um relatório de erro para o mantenedor doundo-tree
. Mas, talvez meu palpite sobre o conceito original esteja errado.undo-tree-mode
forma a alternar entrebuffer-undo-tree
ebuffer-undo-list
funcionar sem falhas. Você já pensou em emitir um relatório de erro em `toby-undo-tree @ dr-qubit.org`?undo-tree
enquanto estiver usando o novolinear
recurso; e gostaria que o novolinear
recurso funcionasse sem que o buffer do visualizador estivesse necessariamente visível. Em geral, implementei minhas próprias melhorias / modificações no Emacs, suas bibliotecas de terceiros internas e opcionais. Quando fico preso ou vejo algo super-complexo como oundo
recurso, peço ajuda. Uma solicitação de recurso para o mantenedor não poderia prejudicar, mas eu preferiria lidar com isso aqui.undo-tree.el
código hoje, vi que existe um recurso de carimbo de data / hora do nó. Não tenho certeza se cada nó tem um carimbo de data / hora válido e se eles sobrevivem para a próxima sessão do Emacs (ao restaurar o histórico), mas parece que pode ser um atalho para resolver essa nova solicitação de recurso - ou seja, classificar e selecionar o anterior ou o próximo no tempo. Ainda não vi a aparência do terreno em um ponto de ramificação, mas ... esses são meus pensamentos preliminares. . . .undo-list-rebuild-from-tree
. Deve-selet
ligar a variávelbuffer-undo-list
e deixarundo-list-rebuild-from-tree
seu trabalho. Depois copie esse valor para outra variável local, digamosmy-undo-list
, e deixe olet
formulário para ligaçãobuffer-undo-list
. A variávelmy-undo-list
determina o caminho linear através doundo-tree
. Observandoundo-list-rebuild-from-tree
você, essa função também usa carimbos de data e hora. Eu pensei anteriormente em usar carimbos de data e hora. Mas tive a impressão de que essas mudanças são frequentes.Respostas:
A seguir, é apresentada uma implementação de protótipo de uma aproximação do que você deseja. Explora o fato de que novas ramificações na árvore de desfazer são adicionadas no lado esquerdo do nó atual.
A sequência de teclas C-M-_é vinculada à
undo-tree-walk
qual caminha a parte superior direita da árvore de desfazer, começando no nó atual.O comportamento difere do que você deseja se a ramificação ativa de alguma subárvore no lado direito do nó atual não for a ramificação mais à esquerda nessa subárvore.
Você pode entrar nesse estado por meio de seqüências de desfazer / refazer não equivalentes.
Tente você mesmo verificar se isso é suficiente para o seu aplicativo.
Note que eu adicionei
undo-tree-visualize
no final deundo-tree-walk
para mostrar as conseqüências de andar pela árvore desfazerundo-tree-walk
. Sinta-se livre para modificar o código de acordo com suas preferências.Observe também que eu tive que escolher essa aproximação mais simples de uma solução para o seu problema devido a restrições de tempo.
fonte
undo-tree-walk
para passar por alguns erros iniciais, talvez porque eu não tenho esse modo ativo globalmente.(when (eq buffer-undo-list t) (user-error "No undo information.")) (undo-list-transfer-to-tree)
Isso silenciou meus erros iniciais em um novo buffer ao tentar esta resposta. Minha próxima observação foi queundo-tree-walk
atinge o ponto de ramificação e depois muda para a ramificação à direita, mas apenas desce uma ramificação / nódulo antes de voltar à ramificação para o tronco. Minha configuração preferida cria um entalhe / nódulo para cada toque na tecla.undo-list-transfer-to-tree
como você propôs. Antes disso, testo seundo-tree-mode
está ativo, caso contrário,undo-list-transfer-to-tree
pode ser fatal.Agradecimentos especiais a @Tobias por escrever uma função para localizar o carimbo de data / hora seguinte / anterior no histórico de desfazer / refazer: https://emacs.stackexchange.com/a/32415/2287 ; e, também por escrever uma série de funções para copiar a árvore de desfazer: https://emacs.stackexchange.com/a/32230/2287 .
Como alguns leitores já devem saber, os garfos são aceitos pelo MELPA apenas em circunstâncias extremas. A criação de um complemento provavelmente é factível, mas não parece prática, dada a quantidade de alterações feitas pelo @lawlist - incluindo, entre outras, a adição de elementos aos vetores subjacentes da estrutura de dados e a alteração dos nomes de vários funções / variáveis que não estavam em conformidade com a
undo-tree-...
convenção de nomenclatura do prefixo etc. @lawlist já procurou o autor original (Dr. Cubitt) para oferecer esse novo recurso, além de várias correções e aprimoramentos.Se alguém estiver interessado, fique à vontade para dar uma olhada nesse novo recurso. O comentário contém um exemplo de formulário de envio de relatório de bug, a partir de
emacs -q
caso alguém tenha problemas.Código fonte: https://github.com/lawlist/undo_tree
Comentário:
fonte