Poniżej znajduje się funkcja (przetestowana, ale nie wyczerpująca), która spełnia twoje pierwsze wymaganie: zabija bieżący bufor, gdy zamykasz ramkę, JEŻELI bufor jest również widoczny w innej ramce.
(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)
Nie jestem pewien co do drugiego wymogu:
Przez więcej niż jeden bufor wyświetlana w ramce , to znaczy rama ma a) dwóch lub więcej okien, oraz b) okna mają różne bufory wyświetlane w nich?
Przez nic nie rozumiesz , czy masz na myśli a) usunięcie ramki, ale nie zabijanie bieżącego bufora, lub b) naprawdę nic nie rób: nie usuwaj ramki ani nie zabijaj bieżącego bufora?
Cześć Dan. Chodzi o to, że jeśli więcej niż jeden bufor jest wyświetlany w ramce, przez wiele okien w tej ramce, wówczas żaden bufor nie zostanie zabity, ale ramka nadal zostanie usunięta.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.