aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/erc
diff options
context:
space:
mode:
authorF. Jason Park2024-01-05 07:20:34 -0800
committerF. Jason Park2024-01-07 15:11:26 -0800
commit50f430ebcd87b77207013f97e6e5d1b8fe93f990 (patch)
treed294497a2a37a760f546299f0398b4dc5602dba0 /lisp/erc
parent37e87bc3eeb8e62e2900d73cf4dd9fc9e942d66d (diff)
downloademacs-50f430ebcd87b77207013f97e6e5d1b8fe93f990.tar.gz
emacs-50f430ebcd87b77207013f97e6e5d1b8fe93f990.zip
Clarify purpose of module aliases in ERC
* doc/misc/erc.texi: Mention that aliases should not be defined for new modules. * lisp/erc/erc-common.el (define-erc-module): Refactor slightly for readability. (erc-with-all-buffers-of-server): Redo doc string. * lisp/erc/erc-pcomplete.el: Declare `completion' module's feature and group as being `erc-pcomplete'. * test/lisp/erc/erc-tests.el (erc--find-group--real): Assert group lookup works for "normalized" module name `completion' of `erc-pcomplete-mode'.
Diffstat (limited to 'lisp/erc')
-rw-r--r--lisp/erc/erc-common.el31
-rw-r--r--lisp/erc/erc-pcomplete.el2
2 files changed, 19 insertions, 14 deletions
diff --git a/lisp/erc/erc-common.el b/lisp/erc/erc-common.el
index 2581e40f850..28ab6aad466 100644
--- a/lisp/erc/erc-common.el
+++ b/lisp/erc/erc-common.el
@@ -333,6 +333,7 @@ instead of a `set' state, which precludes any actual saving."
333 (read (current-buffer)))) 333 (read (current-buffer))))
334 334
335(defmacro erc--find-feature (name alias) 335(defmacro erc--find-feature (name alias)
336 ;; Don't use this outside of the file that defines NAME.
336 `(pcase (erc--find-group ',name ,(and alias (list 'quote alias))) 337 `(pcase (erc--find-group ',name ,(and alias (list 'quote alias)))
337 ('erc (and-let* ((file (or (macroexp-file-name) buffer-file-name))) 338 ('erc (and-let* ((file (or (macroexp-file-name) buffer-file-name)))
338 (intern (file-name-base file)))) 339 (intern (file-name-base file))))
@@ -350,8 +351,12 @@ See Info node `(elisp) Defining Minor Modes' for more.")
350(defmacro define-erc-module (name alias doc enable-body disable-body 351(defmacro define-erc-module (name alias doc enable-body disable-body
351 &optional local-p) 352 &optional local-p)
352 "Define a new minor mode using ERC conventions. 353 "Define a new minor mode using ERC conventions.
353Symbol NAME is the name of the module. 354Expect NAME to be the module's name and ALIAS, when non-nil, to
354Symbol ALIAS is the alias to use, or nil. 355be a retired name used only for compatibility purposes. In new
356code, assume NAME is the same symbol users should specify when
357customizing `erc-modules' (see info node `(erc) Module Loading'
358for more on naming).
359
355DOC is the documentation string to use for the minor mode. 360DOC is the documentation string to use for the minor mode.
356ENABLE-BODY is a list of expressions used to enable the mode. 361ENABLE-BODY is a list of expressions used to enable the mode.
357DISABLE-BODY is a list of expressions used to disable the mode. 362DISABLE-BODY is a list of expressions used to disable the mode.
@@ -382,7 +387,10 @@ Example:
382 (let* ((sn (symbol-name name)) 387 (let* ((sn (symbol-name name))
383 (mode (intern (format "erc-%s-mode" (downcase sn)))) 388 (mode (intern (format "erc-%s-mode" (downcase sn))))
384 (enable (intern (format "erc-%s-enable" (downcase sn)))) 389 (enable (intern (format "erc-%s-enable" (downcase sn))))
385 (disable (intern (format "erc-%s-disable" (downcase sn))))) 390 (disable (intern (format "erc-%s-disable" (downcase sn))))
391 (nmodule (erc--normalize-module-symbol name))
392 (amod (and alias (intern (format "erc-%s-mode"
393 (downcase (symbol-name alias)))))))
386 `(progn 394 `(progn
387 (define-minor-mode 395 (define-minor-mode
388 ,mode 396 ,mode
@@ -399,13 +407,9 @@ if ARG is omitted or nil.
399 (if ,mode (,enable) (,disable)))) 407 (if ,mode (,enable) (,disable))))
400 ,(erc--assemble-toggle local-p name enable mode t enable-body) 408 ,(erc--assemble-toggle local-p name enable mode t enable-body)
401 ,(erc--assemble-toggle local-p name disable mode nil disable-body) 409 ,(erc--assemble-toggle local-p name disable mode nil disable-body)
402 ,@(and-let* ((alias) 410 ,@(and amod `((defalias ',amod #',mode)
403 ((not (eq name alias))) 411 (put ',amod 'erc-module ',nmodule)))
404 (aname (intern (format "erc-%s-mode" 412 (put ',mode 'erc-module ',nmodule)
405 (downcase (symbol-name alias))))))
406 `((defalias ',aname #',mode)
407 (put ',aname 'erc-module ',(erc--normalize-module-symbol name))))
408 (put ',mode 'erc-module ',(erc--normalize-module-symbol name))
409 ;; For find-function and find-variable. 413 ;; For find-function and find-variable.
410 (put ',mode 'definition-name ',name) 414 (put ',mode 'definition-name ',name)
411 (put ',enable 'definition-name ',name) 415 (put ',enable 'definition-name ',name)
@@ -462,10 +466,9 @@ If no server buffer exists, return nil."
462 ,@body))))) 466 ,@body)))))
463 467
464(defmacro erc-with-all-buffers-of-server (process pred &rest forms) 468(defmacro erc-with-all-buffers-of-server (process pred &rest forms)
465 "Execute FORMS in all buffers which have same process as this server. 469 "Evaluate FORMS in all buffers of PROCESS in which PRED returns non-nil.
466FORMS will be evaluated in all buffers having the process PROCESS and 470When PROCESS is nil, do so in all ERC buffers. When PRED is nil,
467where PRED matches or in all buffers of the server process if PRED is 471run FORMS unconditionally."
468nil."
469 (declare (indent 2) (debug (form form body))) 472 (declare (indent 2) (debug (form form body)))
470 (macroexp-let2 nil pred pred 473 (macroexp-let2 nil pred pred
471 `(erc-buffer-filter (lambda () 474 `(erc-buffer-filter (lambda ()
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 52ebdc83e5e..05cbaf3872f 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -58,7 +58,9 @@ add this string to nicks completed."
58 58
59;;;###autoload(put 'Completion 'erc--module 'completion) 59;;;###autoload(put 'Completion 'erc--module 'completion)
60;;;###autoload(put 'pcomplete 'erc--module 'completion) 60;;;###autoload(put 'pcomplete 'erc--module 'completion)
61;;;###autoload(put 'completion 'erc--feature 'erc-pcomplete)
61;;;###autoload(autoload 'erc-completion-mode "erc-pcomplete" nil t) 62;;;###autoload(autoload 'erc-completion-mode "erc-pcomplete" nil t)
63(put 'completion 'erc-group 'erc-pcomplete)
62(define-erc-module pcomplete Completion 64(define-erc-module pcomplete Completion
63 "In ERC Completion mode, the TAB key does completion whenever possible." 65 "In ERC Completion mode, the TAB key does completion whenever possible."
64 ((add-hook 'erc-mode-hook #'pcomplete-erc-setup) 66 ((add-hook 'erc-mode-hook #'pcomplete-erc-setup)