Fix erc nick trimming
* lisp/erc/erc.el (erc-lurker-maybe-trim): Prevent warning from showing up in third-party code using this function by autoloading rx.el when needed. Remove trailing chars appended for uniquifying purposes when a nick is already taken. Special thanks to Mattias Engdegård for making this more respectable (Bug#50005). * test/lisp/erc/erc-tests.el: Add tests for the above and require erc-networks.
This commit is contained in:
parent
492fd05ac2
commit
fb2971e18e
2 changed files with 87 additions and 17 deletions
|
@ -1732,20 +1732,11 @@ FORMS will be evaluated in all buffers having the process PROCESS and
|
|||
where PRED matches or in all buffers of the server process if PRED is
|
||||
nil."
|
||||
(declare (indent 1) (debug (form form body)))
|
||||
;; Make the evaluation have the correct order
|
||||
(let ((pre (make-symbol "pre"))
|
||||
(pro (make-symbol "pro")))
|
||||
`(let* ((,pro ,process)
|
||||
(,pre ,pred)
|
||||
(res (mapcar (lambda (buffer)
|
||||
(with-current-buffer buffer
|
||||
,@forms))
|
||||
(erc-buffer-list ,pre
|
||||
,pro))))
|
||||
;; Silence the byte-compiler by binding the result of mapcar to
|
||||
;; a variable.
|
||||
(ignore res)
|
||||
res)))
|
||||
(macroexp-let2 nil pred pred
|
||||
`(erc-buffer-filter (lambda ()
|
||||
(when (or (not ,pred) (funcall ,pred))
|
||||
,@forms))
|
||||
,process)))
|
||||
|
||||
(define-obsolete-function-alias 'erc-iswitchb #'erc-switch-to-buffer "25.1")
|
||||
(defun erc--switch-to-buffer (&optional arg)
|
||||
|
@ -2583,9 +2574,8 @@ See also `erc-lurker-trim-nicks'."
|
|||
Returns NICK unmodified unless `erc-lurker-trim-nicks' is
|
||||
non-nil."
|
||||
(if erc-lurker-trim-nicks
|
||||
(replace-regexp-in-string
|
||||
(regexp-opt-charset (string-to-list erc-lurker-ignore-chars))
|
||||
"" nick)
|
||||
(string-trim-right
|
||||
nick (rx-to-string `(+ (in ,@(string-to-list erc-lurker-ignore-chars)))))
|
||||
nick))
|
||||
|
||||
(defcustom erc-lurker-hide-list nil
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
(require 'ert)
|
||||
(require 'erc)
|
||||
(require 'erc-ring)
|
||||
(require 'erc-networks)
|
||||
|
||||
(ert-deftest erc--read-time-period ()
|
||||
(cl-letf (((symbol-function 'read-string) (lambda (&rest _) "")))
|
||||
|
@ -47,6 +48,85 @@
|
|||
(cl-letf (((symbol-function 'read-string) (lambda (&rest _) "1d")))
|
||||
(should (equal (erc--read-time-period "foo: ") 86400))))
|
||||
|
||||
(ert-deftest erc-with-all-buffers-of-server ()
|
||||
(let (proc-exnet
|
||||
proc-onet
|
||||
erc-kill-channel-hook erc-kill-server-hook erc-kill-buffer-hook)
|
||||
|
||||
(with-current-buffer (get-buffer-create "OtherNet")
|
||||
(erc-mode)
|
||||
(setq proc-onet (start-process "sleep" (current-buffer) "sleep" "1")
|
||||
erc-server-process proc-onet
|
||||
erc-network 'OtherNet)
|
||||
(set-process-query-on-exit-flag erc-server-process nil))
|
||||
|
||||
(with-current-buffer (get-buffer-create "ExampleNet")
|
||||
(erc-mode)
|
||||
(setq proc-exnet (start-process "sleep" (current-buffer) "sleep" "1")
|
||||
erc-server-process proc-exnet
|
||||
erc-network 'ExampleNet)
|
||||
(set-process-query-on-exit-flag erc-server-process nil))
|
||||
|
||||
(with-current-buffer (get-buffer-create "#foo")
|
||||
(erc-mode)
|
||||
(setq erc-server-process proc-exnet)
|
||||
(setq erc-default-recipients '("#foo")))
|
||||
|
||||
(with-current-buffer (get-buffer-create "#spam")
|
||||
(erc-mode)
|
||||
(setq erc-server-process proc-onet)
|
||||
(setq erc-default-recipients '("#spam")))
|
||||
|
||||
(with-current-buffer (get-buffer-create "#bar")
|
||||
(erc-mode)
|
||||
(setq erc-server-process proc-onet)
|
||||
(setq erc-default-recipients '("#bar")))
|
||||
|
||||
(with-current-buffer (get-buffer-create "#baz")
|
||||
(erc-mode)
|
||||
(setq erc-server-process proc-exnet)
|
||||
(setq erc-default-recipients '("#baz")))
|
||||
|
||||
(should (eq (get-buffer-process "ExampleNet") proc-exnet))
|
||||
(erc-with-all-buffers-of-server (get-buffer-process "ExampleNet")
|
||||
nil
|
||||
(kill-buffer))
|
||||
|
||||
(should-not (get-buffer "ExampleNet"))
|
||||
(should-not (get-buffer "#foo"))
|
||||
(should-not (get-buffer "#baz"))
|
||||
(should (get-buffer "OtherNet"))
|
||||
(should (get-buffer "#bar"))
|
||||
(should (get-buffer "#spam"))
|
||||
|
||||
(let* ((test (lambda () (not (string= (buffer-name) "#spam"))))
|
||||
(calls 0)
|
||||
(get-test (lambda () (cl-incf calls) test)))
|
||||
|
||||
(erc-with-all-buffers-of-server proc-onet
|
||||
(funcall get-test)
|
||||
(kill-buffer))
|
||||
|
||||
(should (= calls 1)))
|
||||
|
||||
(should-not (get-buffer "OtherNet"))
|
||||
(should-not (get-buffer "#bar"))
|
||||
(should (get-buffer "#spam"))
|
||||
(kill-buffer "#spam")))
|
||||
|
||||
(ert-deftest erc-lurker-maybe-trim ()
|
||||
(let (erc-lurker-trim-nicks
|
||||
(erc-lurker-ignore-chars "_`"))
|
||||
|
||||
(should (string= "nick`" (erc-lurker-maybe-trim "nick`")))
|
||||
|
||||
(setq erc-lurker-trim-nicks t)
|
||||
(should (string= "nick" (erc-lurker-maybe-trim "nick`")))
|
||||
(should (string= "ni`_ck" (erc-lurker-maybe-trim "ni`_ck__``")))
|
||||
|
||||
(setq erc-lurker-ignore-chars "_-`") ; set of chars, not character alts
|
||||
(should (string= "nick" (erc-lurker-maybe-trim "nick-_`")))))
|
||||
|
||||
(ert-deftest erc-ring-previous-command-base-case ()
|
||||
(ert-info ("Create ring when nonexistent and do nothing")
|
||||
(let (erc-input-ring
|
||||
|
|
Loading…
Add table
Reference in a new issue