Abaixo está uma função (testada, mas não extensivamente) que atende ao seu primeiro requisito: ela mata o buffer atual quando você fecha um quadro, A menos que o buffer também seja visível em outro quadro.
(defun kill-buffer-when-frame-delete-dwim (frame)
"Kill current buffer unless it's visible in another frame
besides current FRAME."
(unless (delq nil (mapcar #'(lambda (x)
(memq (current-buffer)
(mapcar #'window-buffer x)))
(mapcar #'window-list
(delq frame (frame-list)))))
(kill-buffer (current-buffer))))
(add-hook 'delete-frame-functions 'kill-buffer-when-frame-delete-dwim)
Não estou claro sobre o segundo requisito:
Por mais de um tampão exibido no quadro , você quer dizer o quadro tem a) duas ou mais janelas, e b) as janelas têm diferentes tampões exibidos neles?
Por não fazer nada , você quer dizer a) excluir o quadro, mas não matar o buffer atual, ou b) realmente não fazer nada: não excluir o quadro ou matar o buffer atual?
Oi Dan. A idéia é que, se mais de um buffer for mostrado em um quadro, através de várias janelas nesse quadro, nenhum buffer será eliminado, mas o quadro ainda será excluído.
Dharmatech
Mas pude ver outros comportamentos sendo úteis. Ou seja, mate todos os buffers mostrados, desde que não sejam mostrados em outros quadros.
Respostas:
Se eu entendi a pergunta, aqui está uma função que faz o que você deseja:
Você pode adicioná-lo como um gancho que é chamado sempre que um quadro é fechado usando:
fonte
Abaixo está uma função (testada, mas não extensivamente) que atende ao seu primeiro requisito: ela mata o buffer atual quando você fecha um quadro, A menos que o buffer também seja visível em outro quadro.
Não estou claro sobre o segundo requisito:
fonte
Aqui está uma abordagem simples:
No entanto, ele mata um buffer, mesmo que seja aberto em outro quadro.
fonte