A continuación se muestra una función (probada, pero no exhaustiva) que cumple con su primer requisito: mata el búfer actual cuando cierra un marco A MENOS QUE el búfer también sea visible en otro marco.
(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)
No estoy claro sobre el segundo requisito:
Por más de un buffer de muestra en el marco , es lo que significa el marco tiene a) dos o más ventanas, y b) las ventanas tienen diferentes tampones se muestra en ellas?
Por no hacer nada , ¿quiere decir a) eliminar el marco pero no eliminar el búfer actual, o b) realmente no hacer nada en absoluto: no eliminar el marco o eliminar el búfer actual?
Hola dan La idea es que si se muestra más de un búfer en un marco, a través de múltiples ventanas en ese marco, entonces no se eliminará ningún búfer, pero el marco aún se eliminará.
dharmatech
Pero pude ver que otros comportamientos son útiles. Es decir, eliminar todos los buffers mostrados, siempre que no se muestren en otros cuadros.
Respuestas:
Si he entendido la pregunta, aquí hay una función que hace lo que quieres:
Puede agregarlo como un gancho que se llama cada vez que se cierra un marco usando:
fuente
A continuación se muestra una función (probada, pero no exhaustiva) que cumple con su primer requisito: mata el búfer actual cuando cierra un marco A MENOS QUE el búfer también sea visible en otro marco.
No estoy claro sobre el segundo requisito:
fuente
Aquí hay un enfoque simple:
Sin embargo, matará un búfer incluso si está abierto en otro marco.
fuente