From: Lars Ingebrigtsen Date: Fri, 14 Jun 2019 12:56:04 +0000 (+0200) Subject: Adjust erc functions after previous erc-pre-send-function change X-Git-Tag: emacs-27.0.90~2545 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=37a61055ffdfcd3b00bc9e972556e8c18262d781;p=emacs.git Adjust erc functions after previous erc-pre-send-function change * lisp/erc/erc-goodies.el (noncommands): Use erc-pre-send-functions instead of the hook. (erc-send-distinguish-noncommands): Adjust function to new interface. * lisp/erc/erc-ring.el (ring): Ditto. (erc-add-to-input-ring): Ditto. * lisp/erc/erc.el (erc-send-this): Really make obsolete. (erc-pre-send-functions): Change to a list of functions to allow erc-goodies and erc-ring to work as before. --- diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el index 884c594b9ed..41083829bac 100644 --- a/lisp/erc/erc-goodies.el +++ b/lisp/erc/erc-goodies.el @@ -177,18 +177,21 @@ does not appear in the ERC buffer after the user presses ENTER.") "This mode distinguishes non-commands. Commands listed in `erc-insert-this' know how to display themselves." - ((add-hook 'erc-send-pre-hook 'erc-send-distinguish-noncommands)) - ((remove-hook 'erc-send-pre-hook 'erc-send-distinguish-noncommands))) + ((push 'erc-send-distinguish-noncommands erc-pre-send-functions)) + ((setq erc-pre-send-functions (delq 'erc-send-distinguish-noncommands + erc-pre-send-functions)))) (defun erc-send-distinguish-noncommands (str) "If STR is an ERC non-command, set `erc-insert-this' to nil." (let* ((command (erc-extract-command-from-line str)) (cmd-fun (and command (car command)))) - (when (and cmd-fun - (not (string-match "\n.+$" str)) - (memq cmd-fun erc-noncommands-list)) - (setq erc-insert-this nil)))) + (if (and cmd-fun + (not (string-match "\n.+$" str)) + (memq cmd-fun erc-noncommands-list)) + ;; Inhibit sending this string. + nil + str))) ;;; IRC control character processing. (defgroup erc-control-characters nil diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el index 5459d8b01e5..2ee78f4d46d 100644 --- a/lisp/erc/erc-ring.el +++ b/lisp/erc/erc-ring.el @@ -46,10 +46,11 @@ (define-erc-module ring nil "Stores input in a ring so that previous commands and messages can be recalled using M-p and M-n." - ((add-hook 'erc-send-pre-hook 'erc-add-to-input-ring) + ((push 'erc-add-to-input-ring erc-pre-send-functions) (define-key erc-mode-map "\M-p" 'erc-previous-command) (define-key erc-mode-map "\M-n" 'erc-next-command)) - ((remove-hook 'erc-send-pre-hook 'erc-add-to-input-ring) + ((setq erc-pre-send-functions (delq 'erc-add-to-input-ring + erc-pre-send-functions)) (define-key erc-mode-map "\M-p" 'undefined) (define-key erc-mode-map "\M-n" 'undefined))) @@ -75,7 +76,8 @@ Call this function when setting up the mode." "Add string S to the input ring and reset history position." (unless erc-input-ring (erc-input-ring-setup)) (ring-insert erc-input-ring s) - (setq erc-input-ring-index nil)) + (setq erc-input-ring-index nil) + s) (defun erc-clear-input-ring () "Remove all entries from the input ring, then call garbage-collect. diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 82360a66f98..0165f2c4703 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1051,16 +1051,17 @@ Note that it's useless to set `erc-send-this' to nil and anyway." :group 'erc-hooks :type 'hook) -(make-obsolete-variable 'erc-send-pre-hook 'erc-pre-send-function "27.1") +(make-obsolete-variable 'erc-send-pre-hook 'erc-pre-send-functions "27.1") -(defcustom erc-pre-send-function nil - "Function called to possibly alter the string that is sent. -It's called with one argument, the string, and should return a -string. +(defcustom erc-pre-send-functions nil + "List of functions called to possibly alter the string that is sent. +The functions are called with one argument, the string, and +should return a string. -To suppress the string completely, return nil." +To suppress the string completely, one of the functions should +return nil." :group 'erc - :type 'function + :type '(repeat function) :version "27.1") (defvar erc-insert-this t @@ -1072,7 +1073,7 @@ if they wish to avoid insertion of a particular string.") "Send the text to the target or not. Functions on `erc-send-pre-hook' can set this variable to nil if they wish to avoid sending of a particular string.") -(make-obsolete-variable 'erc-send-pre-hook 'erc-pre-send-function "27.1") +(make-obsolete-variable 'erc-insert-this 'erc-pre-send-functions "27.1") (defcustom erc-insert-modify-hook () "Insertion hook for functions that will change the text's appearance. @@ -5462,11 +5463,13 @@ This returns non-nil only if we actually send anything." ;; The calling convention of `erc-send-pre-hook' is that it ;; should change the dynamic variable `str' or set ;; `erc-send-this' to nil. This has now been deprecated: - ;; Instead `erc-pre-send-function' is used as a filter to do + ;; Instead `erc-pre-send-functions' is used as a filter to do ;; allow both changing and suppressing the string. (run-hook-with-args 'erc-send-pre-hook input) - (when erc-pre-send-function - (setq str (funcall erc-pre-send-function str))) + (dolist (func erc-pre-send-functions) + ;; The functions can return nil to inhibit sending. + (when str + (setq str (funcall func str)))) (when (and erc-send-this str) (if (or (string-match "\n" str)