diff options
| author | F. Jason Park | 2023-01-03 23:10:53 -0800 |
|---|---|---|
| committer | F. Jason Park | 2023-01-10 06:34:01 -0800 |
| commit | fda1ad4a9ec030d013fc16c92d8494bc755b3763 (patch) | |
| tree | 9e6daeef1f2ecc1f4c4e1b0128142147d9d1910d /lisp | |
| parent | bb98666d03f2898f52f8b03f6056f8f8c9368131 (diff) | |
| download | emacs-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.el | 6 | ||||
| -rw-r--r-- | lisp/erc/erc-track.el | 12 |
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. | ||
| 1371 | Passed the existing buffer to be killed, whose contents have | ||
| 1372 | already 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. |
| 1371 | Must be called from the replacement buffer." | 1376 | Must 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 |