Sim, há uma maneira de fazer isso, mas não acho que seja fácil. Uma rápida olhada nas funções e variáveis relacionadas ao frame confirmou minha crença de que não há uma solução fácil aqui. O problema é que o Emacs não saberia o que fazer, uma vez que esses quadros são os únicos quadros restantes, e algo precisava ser feito para / com eles.
Acho que seria possível codificar um pacote que avisasse todas as funções de manipulação de quadros de baixo nível, de modo que alguns quadros ficassem intocados por qualquer operação, mas isso exigiria identificar e interpretar cada uma dessas funções de baixo nível. . Eu acho que uma abordagem melhor (a menos que você seja um assistente elisp) seria identificar as funções que você usa que o incomodam dessa maneira, e ver se há uma função comum ou grupo de funções que eles usam para determinar qual quadro exibir sua saída, e então partiu para mudar esse comportamento.
Eu provavelmente usaria um parâmetro de quadro ( frame-parameter
e modify-frame-parameters
) para armazenar se um determinado quadro era ou não inviolável. Isso pode ser definido manualmente por você, ou talvez no final da função que preenche o quadro com qualquer dado (através do uso de uma função de wrapper ou (mais provavelmente) defadvice). Em seguida, encontre uma função que altere uma delas e observe sua origem. Que função (s) chamou para determinar qual quadro usar? Modifique e / ou avise essas funções (ou talvez algo chamado por essas funções) para não considerar quadros com este determinado conjunto de parâmetros. Como um caso especial, se não houver outros frames disponíveis, crie um novo frame e devolva-o.
Você também pode ter várias classes de quadros (por exemplo, quadro de origem, quadro de compilação / erros) e permitir que alguns deles sejam reutilizados por certas funções, mas não por outras. Quão complexo você consegue, realmente, depende de você e da sua imaginação.
De qualquer forma, parece à primeira vista ser muito factível, mas não trivial.
Agora, tendo dito tudo isso, há um pacote que pode ajudá-lo a se aproximar do que você quer: One- on-One Emacs . Não sei se ele protege os quadros da maneira que você quer, no entanto. E a partir da descrição, parece que ele redefine várias funções principais, em vez de avisá-las, o que poderia torná-las extremamente específicas à versão (isso é apenas uma sensação de que eu li a descrição dele; não olhei o código para veja se é isso que realmente está acontecendo).
Boa sorte!