From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "J.P." Newsgroups: gmane.emacs.bugs Subject: bug#67677: 30.0.50; ERC 5.6: Use templates for formatting chat messages Date: Mon, 18 Dec 2023 06:50:25 -0800 Message-ID: <87v88vftu6.fsf__41785.2453467035$1702911079$gmane$org@neverwas.me> References: <87jzpq7apw.fsf@neverwas.me> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="9443"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: emacs-erc@gnu.org To: 67677@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Dec 18 15:51:11 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rFExb-0002El-EP for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 18 Dec 2023 15:51:11 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rFExS-00066r-Pr; Mon, 18 Dec 2023 09:51:02 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rFExR-00065T-GP for bug-gnu-emacs@gnu.org; Mon, 18 Dec 2023 09:51:01 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rFExR-0004zX-7l for bug-gnu-emacs@gnu.org; Mon, 18 Dec 2023 09:51:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rFExS-00016O-KV for bug-gnu-emacs@gnu.org; Mon, 18 Dec 2023 09:51:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: "J.P." Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Dec 2023 14:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 67677 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 67677-submit@debbugs.gnu.org id=B67677.17029110394159 (code B ref 67677); Mon, 18 Dec 2023 14:51:02 +0000 Original-Received: (at 67677) by debbugs.gnu.org; 18 Dec 2023 14:50:39 +0000 Original-Received: from localhost ([127.0.0.1]:59700 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rFEx4-00014z-VO for submit@debbugs.gnu.org; Mon, 18 Dec 2023 09:50:39 -0500 Original-Received: from mail-108-mta81.mxroute.com ([136.175.108.81]:37023) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rFEx2-00014j-7z for 67677@debbugs.gnu.org; Mon, 18 Dec 2023 09:50:37 -0500 Original-Received: from filter006.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta81.mxroute.com (ZoneMTA) with ESMTPSA id 18c7d682cce00065b4.001 for <67677@debbugs.gnu.org> (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384); Mon, 18 Dec 2023 14:50:28 +0000 X-Zone-Loop: cfee8abf31b2487c5b4f6c5fffb9ce5b5a1688c9b570 X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=UltxKCpmjJR9iY4ceByoocGcndaeC+WydfLb8FyRb9Q=; b=d5qR7Oz/HLy0cZ3SbnLw+JHQMo jZ7s62Dy1nKazGvk9eeh9dcF3DXhQc/foI6Zk5neQ1DpYqP0MqXRmOsO8hDByUgGfiVPb53G5MFLh LP0xCLW8ALU6911upe7XgNOXxn6yhV/Qx1BEkJdcnRzqZtSy4UKfBvyrAhFvj0dsdGchJTROilfGc l0uU73SVpeEblXz3aUZKHsFBSk0nuhdfRcyRrbfaVWtWatdSdojgJm6F6h5FCf2cQLHmUEyGFUIGk gq2P1B+/yFyAHAkxlw7WzBcvZzQcFFmdoQRGmJkY+Z6VjiWJlvyJnxWTtvm7QtnZaZxZ9hs3bs/J8 yw8PPkxQ==; In-Reply-To: <87jzpq7apw.fsf@neverwas.me> (J. P.'s message of "Wed, 06 Dec 2023 23:06:35 -0800") X-Authenticated-Id: masked@neverwas.me X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:276462 Archived-At: --=-=-= Content-Type: text/plain A version of these changes has been installed as 49bfea4386f * Use templates for formatting chat messages in ERC Unfortunately, they included a somewhat glaring omission involving CTCP replies that's hopefully addressed by the attached patch. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-5.6-Populate-erc-msg-prop-overrides-for-CTCP-replies.patch >From ad93b795ae3ed3f0b91acdf5806703e32b3ef074 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Sun, 17 Dec 2023 21:49:13 -0800 Subject: [PATCH] [5.6] Populate erc--msg-prop-overrides for CTCP replies * lisp/erc/erc-backend.el (erc-server-PRIVMSG): Don't set string intended for insertion to the undefined return value of `erc-process-ctcp-reply' and `erc-process-ctcp-query'. Rework control flow slightly for clarity. * lisp/erc/erc.el (erc-process-ctcp-reply): Bind `erc--msg-prop-overrides' and populate with `erc--ctcp' and `erc--cmd' "msg props" for the benefit of `erc-display-message' calls made by CTCP reply handlers. (Bug#67677) --- lisp/erc/erc-backend.el | 53 +++++++++++++++++++---------------------- lisp/erc/erc.el | 10 ++++++-- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 0c336540483..6d30409e156 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -1996,8 +1996,8 @@ erc--speaker-status-prefix-wanted-p (erc--msg-prop-overrides `((erc--tmp) ,@erc--msg-prop-overrides)) (erc--speaker-status-prefix-wanted-p nil) (erc-current-message-catalog erc--message-speaker-catalog) - s buffer statusmsg cmem-prefix - fnick) + ;; + buffer statusmsg cmem-prefix fnick) (setq buffer (erc-get-buffer (if privp nick tgt) proc)) ;; Even worth checking for empty target here? (invalid anyway) (unless (or buffer noticep (string-empty-p tgt) (eq ?$ (aref tgt 0)) @@ -2042,36 +2042,31 @@ erc--speaker-status-prefix-wanted-p erc-show-speaker-membership-status inputp) (cdr cdata)))))) - (cond - ((erc-is-message-ctcp-p msg) - ;; FIXME explain undefined return values being assigned to `s'. - (setq s (if-let ((parsed - (erc--ctcp-response-from-parsed - :parsed parsed :buffer buffer :statusmsg statusmsg - :prefix cmem-prefix :dispname fnick)) - (msgp)) - (erc-process-ctcp-query proc parsed nick login host) - (erc-process-ctcp-reply proc parsed nick login host - (match-string 1 msg))))) - (t + (if (erc-is-message-ctcp-p msg) + (if noticep + (erc-process-ctcp-reply proc parsed nick login host + (match-string 1 msg)) + (setq parsed (erc--ctcp-response-from-parsed + :parsed parsed :buffer buffer :statusmsg statusmsg + :prefix cmem-prefix :dispname fnick)) + (erc-process-ctcp-query proc parsed nick login host)) (setq erc-server-last-peers (cons nick (cdr erc-server-last-peers))) (with-current-buffer (or buffer (current-buffer)) ;; Re-bind in case either buffer has a local value. - (let ((erc-current-message-catalog erc--message-speaker-catalog)) - (setq s (erc--determine-speaker-message-format-args - nick msg privp msgp inputp statusmsg - cmem-prefix fnick)))))) - (when s - (if (and noticep privp) - (progn - (push (cons 'erc--msg (car s)) erc--msg-prop-overrides) - (setq s (apply #'erc-format-message s)) - (run-hook-with-args 'erc-echo-notice-always-hook - s parsed buffer nick) - (run-hook-with-args-until-success - 'erc-echo-notice-hook s parsed buffer nick)) - (apply #'erc-display-message parsed nil buffer - (ensure-list s)))))))) + (let ((erc-current-message-catalog erc--message-speaker-catalog) + (msg-args (erc--determine-speaker-message-format-args + nick msg privp msgp inputp statusmsg + cmem-prefix fnick))) + (if (or msgp (not privp)) + ;; This is a PRIVMSG or a NOTICE to a channel. + (apply #'erc-display-message parsed nil buffer msg-args) + ;; This is a NOTICE directed at the client's current nick. + (push (cons 'erc--msg (car msg-args)) erc--msg-prop-overrides) + (let ((fmtmsg (apply #'erc-format-message msg-args))) + (run-hook-with-args 'erc-echo-notice-always-hook + fmtmsg parsed buffer nick) + (run-hook-with-args-until-success + 'erc-echo-notice-hook fmtmsg parsed buffer nick)))))))))) (define-erc-response-handler (QUIT) "Another user has quit IRC." nil diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index faa2cbefd1b..37e47591d73 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -6525,8 +6525,14 @@ erc-ctcp-query-VERSION (defun erc-process-ctcp-reply (proc parsed nick login host msg) "Process MSG as a CTCP reply." (let* ((type (car (split-string msg))) - (hook (intern (concat "erc-ctcp-reply-" type "-hook")))) - (if (boundp hook) + (hook (intern-soft (concat "erc-ctcp-reply-" type "-hook"))) + ;; Help `erc-display-message' by ensuring subsequent + ;; insertions retain the necessary props. + (cmd (erc--get-eq-comparable-cmd (erc-response.command parsed))) + (erc--msg-prop-overrides `((erc--ctcp . ,(and hook (intern type))) + (erc--cmd . ,cmd) + ,@erc--msg-prop-overrides))) + (if (and hook (boundp hook)) (run-hook-with-args-until-success hook proc nick login host (car (erc-response.command-args parsed)) msg) -- 2.42.0 --=-=-=--