aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorF. Jason Park2023-01-03 23:10:53 -0800
committerF. Jason Park2023-01-10 06:34:01 -0800
commitfda1ad4a9ec030d013fc16c92d8494bc755b3763 (patch)
tree9e6daeef1f2ecc1f4c4e1b0128142147d9d1910d /lisp
parentbb98666d03f2898f52f8b03f6056f8f8c9368131 (diff)
downloademacs-fda1ad4a9ec030d013fc16c92d8494bc755b3763.tar.gz
emacs-fda1ad4a9ec030d013fc16c92d8494bc755b3763.zip
Remove obsolete server buffers on MOTD in erc-track
* lisp/erc/erc-networks.el (erc-networks--copy-server-buffer-functions): New internal hook through which modules can perform housekeeping when server buffers belonging to the same network context are merged. (erc-networks--copy-over-server-buffer-contents): Run new internal hook `erc-networks--copy-server-buffer-functions'. * lisp/erc/erc-track.el (erc-track-enable, erc-track-disable): Manage membership in `erc-networks--copy-server-buffer-functions' hook. (erc-track--replace-killed-buffer): New function to replace server buffer being killed in `erc-modified-channels-alist'. * test/lisp/erc/erc-scenarios-base-association.el (erc-scenarios-networks-merge-server-track): New test. * test/lisp/erc/resources/networks/merge-server/track.eld: New test data. (Bug#60560.)
Diffstat (limited to 'lisp')
-rw-r--r--lisp/erc/erc-networks.el6
-rw-r--r--lisp/erc/erc-track.el12
2 files changed, 16 insertions, 2 deletions
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 4044be08f92..95fd8990c99 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -1366,6 +1366,11 @@ ANNOUNCED is the server's reported host name."
1366 erc-server-connected t 1366 erc-server-connected t
1367 erc-networks--id nid)))))) 1367 erc-networks--id nid))))))
1368 1368
1369(defvar erc-networks--copy-server-buffer-functions nil
1370 "Abnormal hook run in new server buffers when deduping.
1371Passed the existing buffer to be killed, whose contents have
1372already been copied over to the current, replacement buffer.")
1373
1369(defun erc-networks--copy-over-server-buffer-contents (existing name) 1374(defun erc-networks--copy-over-server-buffer-contents (existing name)
1370 "Kill off existing server buffer after copying its contents. 1375 "Kill off existing server buffer after copying its contents.
1371Must be called from the replacement buffer." 1376Must be called from the replacement buffer."
@@ -1386,6 +1391,7 @@ Must be called from the replacement buffer."
1386 erc-kill-server-hook 1391 erc-kill-server-hook
1387 erc-kill-buffer-hook) 1392 erc-kill-buffer-hook)
1388 (erc-networks--insert-transplanted-content text) 1393 (erc-networks--insert-transplanted-content text)
1394 (run-hook-with-args 'erc-networks--copy-server-buffer-functions existing)
1389 (kill-buffer name))) 1395 (kill-buffer name)))
1390 1396
1391;; This stands alone for testing purposes 1397;; This stands alone for testing purposes
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index 61c0c66abfb..7fd7b53602e 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -521,7 +521,9 @@ keybindings will not do anything useful."
521 (add-hook 'erc-disconnected-hook #'erc-modified-channels-update)) 521 (add-hook 'erc-disconnected-hook #'erc-modified-channels-update))
522 ;; enable the tracking keybindings 522 ;; enable the tracking keybindings
523 (add-hook 'erc-connect-pre-hook #'erc-track-minor-mode-maybe) 523 (add-hook 'erc-connect-pre-hook #'erc-track-minor-mode-maybe)
524 (erc-track-minor-mode-maybe))) 524 (erc-track-minor-mode-maybe))
525 (add-hook 'erc-networks--copy-server-buffer-functions
526 #'erc-track--replace-killed-buffer))
525 ;; Disable: 527 ;; Disable:
526 ((when (boundp 'erc-track-when-inactive) 528 ((when (boundp 'erc-track-when-inactive)
527 (erc-track-remove-from-mode-line) 529 (erc-track-remove-from-mode-line)
@@ -539,7 +541,9 @@ keybindings will not do anything useful."
539 ;; disable the tracking keybindings 541 ;; disable the tracking keybindings
540 (remove-hook 'erc-connect-pre-hook #'erc-track-minor-mode-maybe) 542 (remove-hook 'erc-connect-pre-hook #'erc-track-minor-mode-maybe)
541 (when erc-track-minor-mode 543 (when erc-track-minor-mode
542 (erc-track-minor-mode -1))))) 544 (erc-track-minor-mode -1)))
545 (remove-hook 'erc-networks--copy-server-buffer-functions
546 #'erc-track--replace-killed-buffer)))
543 547
544(defcustom erc-track-when-inactive nil 548(defcustom erc-track-when-inactive nil
545 "Enable channel tracking even for visible buffers, if you are inactive." 549 "Enable channel tracking even for visible buffers, if you are inactive."
@@ -942,6 +946,10 @@ reverse it."
942 (interactive "p") 946 (interactive "p")
943 (erc-track--switch-buffer 'switch-to-buffer-other-window arg)) 947 (erc-track--switch-buffer 'switch-to-buffer-other-window arg))
944 948
949(defun erc-track--replace-killed-buffer (existing)
950 (when-let ((found (assq existing erc-modified-channels-alist)))
951 (setcar found (current-buffer))))
952
945(provide 'erc-track) 953(provide 'erc-track)
946 954
947;;; erc-track.el ends here 955;;; erc-track.el ends here