aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Kangas2023-01-11 06:30:12 +0100
committerStefan Kangas2023-01-11 06:30:12 +0100
commit033f2cc6140d03e78403f37689b9f54b64bded01 (patch)
tree9e4c355a0f082cb048d45810dbcd8a1fb5f88408
parent60240f54e5fed16a0522fb766ffef073db596f1f (diff)
parent1cbc22b9c7f836f5b3311213dca8afa853513442 (diff)
downloademacs-033f2cc6140d03e78403f37689b9f54b64bded01.tar.gz
emacs-033f2cc6140d03e78403f37689b9f54b64bded01.zip
Merge from origin/emacs-29
1cbc22b9c7f CC Mode: partially revert commit from 2022-10-04 136c0272215 Fix reftex-citation docstring (bug#60710) 64fe6bdb618 Improve 'describe-char-fold-equivalences' docstring fda1ad4a9ec Remove obsolete server buffers on MOTD in erc-track bb98666d03f ; Fix wrong type in erc-ignore hide-list options c267cd01517 ; Kill some stray buffers left behind by ERC tests f31e65694ca Fix completion-auto-help docstring (bug#60709)
-rw-r--r--lisp/char-fold.el18
-rw-r--r--lisp/erc/erc-networks.el6
-rw-r--r--lisp/erc/erc-track.el12
-rw-r--r--lisp/erc/erc.el6
-rw-r--r--lisp/minibuffer.el2
-rw-r--r--lisp/progmodes/cc-fonts.el4
-rw-r--r--lisp/textmodes/reftex-cite.el2
-rw-r--r--test/lisp/erc/erc-scenarios-base-association.el49
-rw-r--r--test/lisp/erc/erc-services-tests.el9
-rw-r--r--test/lisp/erc/resources/erc-d/erc-d-t.el2
-rw-r--r--test/lisp/erc/resources/networks/merge-server/track.eld44
11 files changed, 141 insertions, 13 deletions
diff --git a/lisp/char-fold.el b/lisp/char-fold.el
index eff2f5558b3..6da2dae8471 100644
--- a/lisp/char-fold.el
+++ b/lisp/char-fold.el
@@ -436,7 +436,23 @@ specify the character). With no input, i.e. when CHAR is nil,
436describe all available character equivalences of `char-fold-to-regexp'. 436describe all available character equivalences of `char-fold-to-regexp'.
437Optional argument LAX (interactively, the prefix argument), if 437Optional argument LAX (interactively, the prefix argument), if
438non-nil, means also include partially matching ligatures and 438non-nil, means also include partially matching ligatures and
439non-canonical equivalences." 439non-canonical equivalences.
440
441Each line of the display shows the equivalences in two different
442ways separated by a colon:
443
444 - as the literal character or sequence
445 - using an ASCII-only escape syntax
446
447For example, for the letter \\='r\\=', the first line is
448
449 r: ?\\N{LATIN SMALL LETTER R}
450
451which is for the requested character itself, and a later line has
452
453 ṟ: ?\\N{LATIN SMALL LETTER R}?\\N{COMBINING MACRON BELOW}
454
455which clearly shows what the constituent characters are."
440 (interactive (list (ignore-errors 456 (interactive (list (ignore-errors
441 (read-char-by-name 457 (read-char-by-name
442 (format-prompt "Unicode name, single char, or hex" 458 (format-prompt "Unicode name, single char, or hex"
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
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 6315d5aa482..ba7db15cf8c 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -323,7 +323,8 @@ A typical value would be \((\"Libera.Chat\" \"MODE\")
323 \(\"OFTC\" \"JOIN\" \"QUIT\"))." 323 \(\"OFTC\" \"JOIN\" \"QUIT\"))."
324 :version "25.1" 324 :version "25.1"
325 :group 'erc-ignore 325 :group 'erc-ignore
326 :type 'erc-message-type) 326 :type '(alist :key-type string :value-type erc-message-type
327 :options ("Libera.Chat")))
327 328
328(defcustom erc-channel-hide-list nil 329(defcustom erc-channel-hide-list nil
329 "A list of IRC channels to hide message types from. 330 "A list of IRC channels to hide message types from.
@@ -331,7 +332,8 @@ A typical value would be \((\"#emacs\" \"QUIT\" \"JOIN\")
331 \(\"#erc\" \"NICK\")." 332 \(\"#erc\" \"NICK\")."
332 :version "25.1" 333 :version "25.1"
333 :group 'erc-ignore 334 :group 'erc-ignore
334 :type 'erc-message-type) 335 :type '(alist :key-type string :value-type erc-message-type
336 :options ("#emacs")))
335 337
336(defcustom erc-disconnected-hook nil 338(defcustom erc-disconnected-hook nil
337 "Run this hook with arguments (NICK IP REASON) when disconnected. 339 "Run this hook with arguments (NICK IP REASON) when disconnected.
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index f47299bd0da..21d4607e7cf 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -986,7 +986,7 @@ already visible.
986If the value is `visible', the *Completions* buffer is displayed 986If the value is `visible', the *Completions* buffer is displayed
987whenever completion is requested but cannot be done for the first time, 987whenever completion is requested but cannot be done for the first time,
988but remains visible thereafter, and the list of completions in it is 988but remains visible thereafter, and the list of completions in it is
989updated for subsequent attempts to complete.." 989updated for subsequent attempts to complete."
990 :type '(choice (const :tag "Don't show" nil) 990 :type '(choice (const :tag "Don't show" nil)
991 (const :tag "Show only when cannot complete" t) 991 (const :tag "Show only when cannot complete" t)
992 (const :tag "Show after second failed completion attempt" lazy) 992 (const :tag "Show after second failed completion attempt" lazy)
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index d84c4f8ad8a..4dcc3e0ade9 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -2530,8 +2530,8 @@ higher."
2530 (get-text-property (match-beginning 0) 'fontified) 2530 (get-text-property (match-beginning 0) 'fontified)
2531 (not (memq (c-get-char-property (match-beginning 0) 'face) 2531 (not (memq (c-get-char-property (match-beginning 0) 'face)
2532 c-literal-faces))) 2532 c-literal-faces)))
2533 (c-put-font-lock-face (match-beginning 0) (match-end 0) 2533 (put-text-property (match-beginning 0) (match-end 0)
2534 font-lock-type-face)) 2534 'fontified nil))
2535 (dolist (win-boundary window-boundaries) 2535 (dolist (win-boundary window-boundaries)
2536 (when (and (< (match-beginning 0) (cdr win-boundary)) 2536 (when (and (< (match-beginning 0) (cdr win-boundary))
2537 (> (match-end 0) (car win-boundary)) 2537 (> (match-end 0) (car win-boundary))
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index 77373707d65..6beae816257 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -636,7 +636,7 @@ command, it will add another key, ignoring the value of
636 636
637The regular expression uses an expanded syntax: && is interpreted as `and'. 637The regular expression uses an expanded syntax: && is interpreted as `and'.
638Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'. 638Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'.
639While entering the regexp, completion on knows citation keys is possible. 639While entering the regexp, completion on known citation keys is possible.
640`=' is a good regular expression to match all entries in all files." 640`=' is a good regular expression to match all entries in all files."
641 (interactive) 641 (interactive)
642 642
diff --git a/test/lisp/erc/erc-scenarios-base-association.el b/test/lisp/erc/erc-scenarios-base-association.el
index 1e280d0fdd7..a40a4cb7550 100644
--- a/test/lisp/erc/erc-scenarios-base-association.el
+++ b/test/lisp/erc/erc-scenarios-base-association.el
@@ -26,7 +26,9 @@
26 26
27(declare-function erc-network-name "erc-networks") 27(declare-function erc-network-name "erc-networks")
28(declare-function erc-network "erc-networks") 28(declare-function erc-network "erc-networks")
29(declare-function erc-track-get-active-buffer "erc-track" (arg))
29(defvar erc-autojoin-channels-alist) 30(defvar erc-autojoin-channels-alist)
31(defvar erc-track-mode)
30(defvar erc-network) 32(defvar erc-network)
31 33
32;; Two networks, same channel name, no confusion (no bouncer). Some 34;; Two networks, same channel name, no confusion (no bouncer). Some
@@ -190,4 +192,51 @@
190 (with-current-buffer "#chan@barnet" 192 (with-current-buffer "#chan@barnet"
191 (erc-d-t-search-for 10 "I'll bid adieu"))))) 193 (erc-d-t-search-for 10 "I'll bid adieu")))))
192 194
195;; Some modules may need to perform housekeeping when a newly
196;; connected server buffer is deemed a duplicate after its persistent
197;; network context is discovered on MOTD end. One such module is
198;; `track', which needs to rid its list of modified channels of the
199;; buffer being killed. Without this, a user may encounter an
200;; "Attempt to display deleted buffer" error when they try switching
201;; to it.
202
203(ert-deftest erc-scenarios-networks-merge-server-track ()
204 :tags '(:expensive-test)
205 (erc-scenarios-common-with-cleanup
206 ((erc-scenarios-common-dialog "networks/merge-server")
207 (dumb-server (erc-d-run "localhost" t 'track 'track))
208 (port (process-contact dumb-server :service))
209 (erc-server-flood-penalty 0.1)
210 (expect (erc-d-t-make-expecter)))
211
212 (ert-info ("Connect")
213 (with-current-buffer (erc :server "127.0.0.1"
214 :port port
215 :nick "tester")
216 (should (string= (buffer-name) (format "127.0.0.1:%d" port)))
217 (should erc-track-mode)
218 (funcall expect 5 "changed mode for tester")
219 (erc-cmd-JOIN "#chan")))
220
221 (ert-info ("Join channel and quit")
222 (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "#chan"))
223 (funcall expect 5 "The hour that fools should ask")
224 (erc-cmd-QUIT ""))
225 (with-current-buffer "FooNet"
226 (funcall expect 5 "finished")))
227
228 (ert-info ("Reconnect")
229 (with-current-buffer (erc :server "127.0.0.1"
230 :port port
231 :nick "tester")
232 (should (string= (buffer-name) (format "127.0.0.1:%d" port)))
233 (funcall expect 5 "changed mode for tester")))
234
235 (with-current-buffer "#chan"
236 (funcall expect 5 "The hour that fools should ask")
237 ;; Simulate the old `erc-track-switch-buffer'
238 (switch-to-buffer (erc-track-get-active-buffer 1))
239 (erc-d-t-wait-for 10 (eq (get-buffer "FooNet") (current-buffer)))
240 (erc-cmd-QUIT ""))))
241
193;;; erc-scenarios-base-association.el ends here 242;;; erc-scenarios-base-association.el ends here
diff --git a/test/lisp/erc/erc-services-tests.el b/test/lisp/erc/erc-services-tests.el
index b1d36d868eb..9181a47ee3b 100644
--- a/test/lisp/erc/erc-services-tests.el
+++ b/test/lisp/erc/erc-services-tests.el
@@ -248,7 +248,8 @@
248 (let ((auth-sources (list plstore-file)) 248 (let ((auth-sources (list plstore-file))
249 (auth-source-do-cache nil)) 249 (auth-source-do-cache nil))
250 (erc-services-tests--auth-source-standard 250 (erc-services-tests--auth-source-standard
251 #'erc-services-test--call-with-plstore)))) 251 #'erc-services-test--call-with-plstore))
252 (kill-buffer (get-file-buffer plstore-file))))
252 253
253(ert-deftest erc--auth-source-search--plstore-announced () 254(ert-deftest erc--auth-source-search--plstore-announced ()
254 (ert-with-temp-file plstore-file 255 (ert-with-temp-file plstore-file
@@ -264,7 +265,8 @@
264 (let ((auth-sources (list plstore-file)) 265 (let ((auth-sources (list plstore-file))
265 (auth-source-do-cache nil)) 266 (auth-source-do-cache nil))
266 (erc-services-tests--auth-source-announced 267 (erc-services-tests--auth-source-announced
267 #'erc-services-test--call-with-plstore)))) 268 #'erc-services-test--call-with-plstore))
269 (kill-buffer (get-file-buffer plstore-file))))
268 270
269(ert-deftest erc--auth-source-search--plstore-overrides () 271(ert-deftest erc--auth-source-search--plstore-overrides ()
270 (ert-with-temp-file plstore-file 272 (ert-with-temp-file plstore-file
@@ -296,7 +298,8 @@
296 (let ((auth-sources (list plstore-file)) 298 (let ((auth-sources (list plstore-file))
297 (auth-source-do-cache nil)) 299 (auth-source-do-cache nil))
298 (erc-services-tests--auth-source-overrides 300 (erc-services-tests--auth-source-overrides
299 #'erc-services-test--call-with-plstore)))) 301 #'erc-services-test--call-with-plstore))
302 (kill-buffer (get-file-buffer plstore-file))))
300 303
301;; auth-source JSON backend 304;; auth-source JSON backend
302 305
diff --git a/test/lisp/erc/resources/erc-d/erc-d-t.el b/test/lisp/erc/resources/erc-d/erc-d-t.el
index 282c193b707..7b2adf4f07b 100644
--- a/test/lisp/erc/resources/erc-d/erc-d-t.el
+++ b/test/lisp/erc/resources/erc-d/erc-d-t.el
@@ -32,7 +32,7 @@
32 (dolist (buf (buffer-list)) 32 (dolist (buf (buffer-list))
33 (with-current-buffer buf 33 (with-current-buffer buf
34 (when (or erc-d-u--process-buffer 34 (when (or erc-d-u--process-buffer
35 (derived-mode-p 'erc-mode)) 35 (derived-mode-p 'erc-mode 'erc-dcc-chat-mode))
36 (push buf buflist)))) 36 (push buf buflist))))
37 (dolist (buf buflist) 37 (dolist (buf buflist)
38 (when (and (boundp 'erc-server-flood-timer) 38 (when (and (boundp 'erc-server-flood-timer)
diff --git a/test/lisp/erc/resources/networks/merge-server/track.eld b/test/lisp/erc/resources/networks/merge-server/track.eld
new file mode 100644
index 00000000000..4a97f92f722
--- /dev/null
+++ b/test/lisp/erc/resources/networks/merge-server/track.eld
@@ -0,0 +1,44 @@
1;; -*- mode: lisp-data; -*-
2((nick 10 "NICK tester"))
3((user 10 "USER user 0 * :unknown")
4 (0.00 ":irc.example.net NOTICE * :*** Looking up your hostname...")
5 (0.01 ":irc.example.net NOTICE tester :*** Could not resolve your hostname: Domain not found; using your IP address (10.0.2.100) instead.")
6 (0.10 ":irc.example.net 001 tester :Welcome to the FooNet IRC Network tester!user@10.0.2.100")
7 (0.02 ":irc.example.net 002 tester :Your host is irc.example.net, running version InspIRCd-3")
8 (0.02 ":irc.example.net 003 tester :This server was created 05:58:57 Jan 04 2023")
9 (0.01 ":irc.example.net 004 tester irc.example.net InspIRCd-3 BIRcgikorsw ACHIKMORTXabcefghijklmnopqrstvz :HIXabefghjkloqv")
10 (0.00 ":irc.example.net 005 tester ACCEPT=30 AWAYLEN=200 BOT=B CALLERID=g CASEMAPPING=ascii CHANLIMIT=#:20 CHANMODES=IXbeg,k,Hfjl,ACKMORTcimnprstz CHANNELLEN=64 CHANTYPES=# ELIST=CMNTU ESILENCE=CcdiNnPpTtx EXCEPTS=e :are supported by this server")
11 (0.02 ":irc.example.net 005 tester EXTBAN=,ACORTUacjrwz HOSTLEN=64 INVEX=I KEYLEN=32 KICKLEN=255 LINELEN=512 MAXLIST=I:100,X:100,b:100,e:100,g:100 MAXTARGETS=20 MODES=20 MONITOR=30 NAMELEN=128 NAMESX NETWORK=FooNet :are supported by this server")
12 (0.01 ":irc.example.net 005 tester NICKLEN=30 PREFIX=(qaohv)~&@%+ SAFELIST SILENCE=32 STATUSMSG=~&@%+ TOPICLEN=307 UHNAMES USERIP USERLEN=10 USERMODES=,,s,BIRcgikorw WHOX :are supported by this server")
13 (0.01 ":irc.example.net 251 tester :There are 2 users and 0 invisible on 2 servers")
14 (0.01 ":irc.example.net 253 tester 1 :unknown connections")
15 (0.01 ":irc.example.net 254 tester 1 :channels formed")
16 (0.00 ":irc.example.net 255 tester :I have 2 clients and 1 servers")
17 (0.00 ":irc.example.net 265 tester :Current local users: 2 Max: 3")
18 (0.00 ":irc.example.net 266 tester :Current global users: 2 Max: 3")
19 (0.00 ":irc.example.net 375 tester :irc.example.net message of the day")
20 (0.00 ":irc.example.net 372 tester : Have fun with the image!")
21 (0.00 ":irc.example.net 376 tester :End of message of the day."))
22
23((mode 10 "MODE tester +i")
24 (0.00 ":irc.example.net 501 tester x :is not a recognised user mode.")
25 (0.00 ":NickServ!NickServ@services.int NOTICE tester :Welcome to FooNet, tester! Here on FooNet, we provide services to enable the registration of nicknames and channels! For details, type \2/msg NickServ help\2 and \2/msg ChanServ help\2.")
26 (0.02 ":tester!user@10.0.2.100 MODE tester :+i"))
27
28((join 10 "JOIN #chan")
29 (0.01 ":tester!user@10.0.2.100 JOIN :#chan"))
30
31((mode 10 "MODE #chan")
32 (0.01 ":irc.example.net 353 tester = #chan :@alice bob tester")
33 (0.01 ":irc.example.net 366 tester #chan :End of /NAMES list.")
34 (0.00 ":alice!alice@0::1 PRIVMSG #chan :tester, welcome!")
35 (0.02 ":bob!bob@0::1 PRIVMSG #chan :tester, welcome!")
36 (0.02 ":irc.example.net 324 tester #chan :+nt")
37 (0.01 ":irc.example.net 329 tester #chan :1672811954")
38 (0.07 ":alice!alice@0::1 PRIVMSG #chan :bob: This afternoon, sir ? well, she shall be there.")
39 (0.05 ":bob!bob@0::1 PRIVMSG #chan :alice: The hour that fools should ask."))
40
41((quit 10 "QUIT :\2ERC\2")
42 (0.04 "ERROR :Closing link: (user@10.0.2.100) [Quit: \2ERC\2]"))
43
44((drop 1 DROP))