From unknown Sun Jun 22 08:02:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#20096: 25.0.50; Add Font-Lock support for subr-x macros Resent-From: Tassilo Horn Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 Mar 2015 08:43:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 20096 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 20096@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.142614975523551 (code B ref -1); Thu, 12 Mar 2015 08:43:02 +0000 Received: (at submit) by debbugs.gnu.org; 12 Mar 2015 08:42:35 +0000 Received: from localhost ([127.0.0.1]:43412 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YVyhN-00067i-0F for submit@debbugs.gnu.org; Thu, 12 Mar 2015 04:42:35 -0400 Received: from eggs.gnu.org ([208.118.235.92]:34015) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YVyhI-00067P-Ll for submit@debbugs.gnu.org; Thu, 12 Mar 2015 04:42:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YVyh9-0006Rw-Qc for submit@debbugs.gnu.org; Thu, 12 Mar 2015 04:42:23 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=BAYES_50,LONGWORDS, T_RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:36442) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVyh9-0006Rr-OH for submit@debbugs.gnu.org; Thu, 12 Mar 2015 04:42:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35617) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVyh5-0001zx-UE for bug-gnu-emacs@gnu.org; Thu, 12 Mar 2015 04:42:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YVyh1-0006N1-Pl for bug-gnu-emacs@gnu.org; Thu, 12 Mar 2015 04:42:15 -0400 Received: from deliver.uni-koblenz.de ([141.26.64.15]:50647) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YVyh1-0006MH-AR for bug-gnu-emacs@gnu.org; Thu, 12 Mar 2015 04:42:11 -0400 Received: from thinkpad-t440p (dhcp27.uni-koblenz.de [141.26.71.27]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by deliver.uni-koblenz.de (Postfix) with ESMTPSA id 11FFB1A84F1 for ; Thu, 12 Mar 2015 09:42:09 +0100 (CET) From: Tassilo Horn Date: Thu, 12 Mar 2015 09:42:09 +0100 Message-ID: <87d24etxni.fsf@gnu.org> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -3.2 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.2 (---) I like the addition of if-let and when-let in subr-x.el. However, they should also be highlighted as keywords if subr-x is loaded. Is committing the following change the right thing to do? --8<---------------cut here---------------start------------->8--- diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el index 78a6dc9..687323e 100644 --- a/lisp/emacs-lisp/subr-x.el +++ b/lisp/emacs-lisp/subr-x.el @@ -139,6 +139,19 @@ to bind a single value, BINDINGS can just be a plain tuple." (declare (indent 1) (debug if-let)) (list 'if-let bindings (macroexp-progn body))) +(add-to-list 'lisp-el-font-lock-keywords-2 + `(,(concat "(" + (regexp-opt (list "thread-first" "thread-last" + "if-let" "when-let") + t) + "\\_>") + 1 'font-lock-keyword-face)) + +(dolist (buf (buffer-list)) + (with-current-buffer buf + (when (derived-mode-p 'emacs-lisp-mode) + (font-lock-refresh-defaults)))) + (defsubst hash-table-keys (hash-table) "Return a list of keys in HASH-TABLE." (let ((keys '())) --8<---------------cut here---------------end--------------->8--- It does the right thing, e.g., - emacs -Q - write (when-let ((foo 1)) (+ foo foo)) in *scratch* - (require 'subr-x) - the when-let gets immediately fontified but I'm a bit concerned about `font-lock-refresh-defaults' removing fontifications a user or some mode has added using `font-lock-add-keywords'. So maybe it would be better to add the KEYWORDS to `lisp-el-font-lock-keywords-2' (for future buffers) and then locally to existing elisp buffers using `font-lock-add-keywords'? And do whe also need a `subr-x-unload-function' which would remove KEYWORDS again if someone does (unload-feature 'subr-x)? In GNU Emacs 25.0.50.10 (x86_64-unknown-linux-gnu, GTK+ Version 3.14.9) of 2015-03-12 on thinkpad-t440p Repository revision: 2401274b239e837ec274b373ba0f2848faaea7b2 Windowing system distributor `The X.Org Foundation', version 11.0.11701000 System Description: Arch Linux Configured features: XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS NOTIFY ACL GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB Important settings: value of $LC_MONETARY: de_DE.utf8 value of $LC_NUMERIC: de_DE.utf8 value of $LC_TIME: de_DE.utf8 value of $LANG: en_US.utf8 locale-coding-system: utf-8-unix Major mode: Emacs-Lisp Minor modes in effect: diff-auto-refine-mode: t TeX-PDF-mode: t TeX-source-correlate-mode: t highlight-parentheses-mode: t global-company-mode: t company-mode: t paredit-mode: t global-aggressive-indent-mode: t aggressive-indent-mode: t highlight-symbol-mode: t global-edit-server-edit-mode: t recentf-mode: t shell-dirtrack-mode: t helm-match-plugin-mode: t outline-minor-mode: t helm-autoresize-mode: t global-subword-mode: t subword-mode: t savehist-mode: t show-paren-mode: t icomplete-mode: t minibuffer-depth-indicate-mode: t winner-mode: t electric-pair-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t Recent messages: Making completion list... [2 times] nil mwheel-scroll: End of buffer [2 times] Symbolic link to Git-controlled source file; follow link? (y or n) y Followed link to /home/horn/Repos/configs/dot-emacs.el Mark saved where search started Mark set Saving file /home/horn/Repos/el/emacs/lisp/emacs-lisp/subr-x.el... Wrote /home/horn/Repos/el/emacs/lisp/emacs-lisp/subr-x.el Load-path shadows: ~/Repos/el/auctex/lpath hides ~/Repos/el/gnus/lisp/lpath ~/Repos/el/gnus/lisp/md4 hides /home/horn/Repos/el/emacs/lisp/md4 ~/Repos/el/gnus/lisp/color hides /home/horn/Repos/el/emacs/lisp/color ~/Repos/el/gnus/lisp/format-spec hides /home/horn/Repos/el/emacs/lisp/format-spec ~/Repos/el/gnus/lisp/password-cache hides /home/horn/Repos/el/emacs/lisp/password-cache ~/Repos/el/gnus/lisp/hex-util hides /home/horn/Repos/el/emacs/lisp/hex-util ~/Repos/el/gnus/lisp/dns-mode hides /home/horn/Repos/el/emacs/lisp/textmodes/dns-mode /home/horn/.emacs.d/elpa/org-20150309/ob-plantuml hides /home/horn/Repos/el/emacs/lisp/org/ob-plantuml /home/horn/.emacs.d/elpa/org-20150309/org-archive hides /home/horn/Repos/el/emacs/lisp/org/org-archive /home/horn/.emacs.d/elpa/org-20150309/org-w3m hides /home/horn/Repos/el/emacs/lisp/org/org-w3m /home/horn/.emacs.d/elpa/org-20150309/ox-org hides /home/horn/Repos/el/emacs/lisp/org/ox-org /home/horn/.emacs.d/elpa/org-20150309/ob hides /home/horn/Repos/el/emacs/lisp/org/ob /home/horn/.emacs.d/elpa/org-20150309/org-faces hides /home/horn/Repos/el/emacs/lisp/org/org-faces /home/horn/.emacs.d/elpa/org-20150309/ob-awk hides /home/horn/Repos/el/emacs/lisp/org/ob-awk /home/horn/.emacs.d/elpa/org-20150309/org-habit hides /home/horn/Repos/el/emacs/lisp/org/org-habit /home/horn/.emacs.d/elpa/org-20150309/ob-sass hides /home/horn/Repos/el/emacs/lisp/org/ob-sass /home/horn/.emacs.d/elpa/org-20150309/org-ctags hides /home/horn/Repos/el/emacs/lisp/org/org-ctags /home/horn/.emacs.d/elpa/org-20150309/ob-screen hides /home/horn/Repos/el/emacs/lisp/org/ob-screen /home/horn/.emacs.d/elpa/org-20150309/ox-md hides /home/horn/Repos/el/emacs/lisp/org/ox-md /home/horn/.emacs.d/elpa/org-20150309/ox-beamer hides /home/horn/Repos/el/emacs/lisp/org/ox-beamer /home/horn/.emacs.d/elpa/org-20150309/org-loaddefs hides /home/horn/Repos/el/emacs/lisp/org/org-loaddefs /home/horn/.emacs.d/elpa/org-20150309/ob-perl hides /home/horn/Repos/el/emacs/lisp/org/ob-perl /home/horn/.emacs.d/elpa/org-20150309/org-rmail hides /home/horn/Repos/el/emacs/lisp/org/org-rmail /home/horn/.emacs.d/elpa/org-20150309/org-id hides /home/horn/Repos/el/emacs/lisp/org/org-id /home/horn/.emacs.d/elpa/org-20150309/ox-publish hides /home/horn/Repos/el/emacs/lisp/org/ox-publish /home/horn/.emacs.d/elpa/org-20150309/ob-maxima hides /home/horn/Repos/el/emacs/lisp/org/ob-maxima /home/horn/.emacs.d/elpa/org-20150309/org-install hides /home/horn/Repos/el/emacs/lisp/org/org-install /home/horn/.emacs.d/elpa/org-20150309/org-feed hides /home/horn/Repos/el/emacs/lisp/org/org-feed /home/horn/.emacs.d/elpa/org-20150309/ob-R hides /home/horn/Repos/el/emacs/lisp/org/ob-R /home/horn/.emacs.d/elpa/org-20150309/ox-latex hides /home/horn/Repos/el/emacs/lisp/org/ox-latex /home/horn/.emacs.d/elpa/org-20150309/org-timer hides /home/horn/Repos/el/emacs/lisp/org/org-timer /home/horn/.emacs.d/elpa/org-20150309/ob-core hides /home/horn/Repos/el/emacs/lisp/org/ob-core /home/horn/.emacs.d/elpa/org-20150309/org-datetree hides /home/horn/Repos/el/emacs/lisp/org/org-datetree /home/horn/.emacs.d/elpa/org-20150309/ob-sql hides /home/horn/Repos/el/emacs/lisp/org/ob-sql /home/horn/.emacs.d/elpa/org-20150309/ob-js hides /home/horn/Repos/el/emacs/lisp/org/ob-js /home/horn/.emacs.d/elpa/org-20150309/ob-tangle hides /home/horn/Repos/el/emacs/lisp/org/ob-tangle /home/horn/.emacs.d/elpa/org-20150309/org-capture hides /home/horn/Repos/el/emacs/lisp/org/org-capture /home/horn/.emacs.d/elpa/org-20150309/ob-haskell hides /home/horn/Repos/el/emacs/lisp/org/ob-haskell /home/horn/.emacs.d/elpa/org-20150309/ob-dot hides /home/horn/Repos/el/emacs/lisp/org/ob-dot /home/horn/.emacs.d/elpa/org-20150309/ob-exp hides /home/horn/Repos/el/emacs/lisp/org/ob-exp /home/horn/.emacs.d/elpa/org-20150309/org-info hides /home/horn/Repos/el/emacs/lisp/org/org-info /home/horn/.emacs.d/elpa/org-20150309/ob-octave hides /home/horn/Repos/el/emacs/lisp/org/ob-octave /home/horn/.emacs.d/elpa/org-20150309/org-mobile hides /home/horn/Repos/el/emacs/lisp/org/org-mobile /home/horn/.emacs.d/elpa/org-20150309/org-indent hides /home/horn/Repos/el/emacs/lisp/org/org-indent /home/horn/.emacs.d/elpa/org-20150309/org-attach hides /home/horn/Repos/el/emacs/lisp/org/org-attach /home/horn/.emacs.d/elpa/org-20150309/ob-java hides /home/horn/Repos/el/emacs/lisp/org/ob-java /home/horn/.emacs.d/elpa/org-20150309/org-mhe hides /home/horn/Repos/el/emacs/lisp/org/org-mhe /home/horn/.emacs.d/elpa/org-20150309/ob-scheme hides /home/horn/Repos/el/emacs/lisp/org/ob-scheme /home/horn/.emacs.d/elpa/org-20150309/ob-lob hides /home/horn/Repos/el/emacs/lisp/org/ob-lob /home/horn/.emacs.d/elpa/org-20150309/ob-calc hides /home/horn/Repos/el/emacs/lisp/org/ob-calc /home/horn/.emacs.d/elpa/org-20150309/org-agenda hides /home/horn/Repos/el/emacs/lisp/org/org-agenda /home/horn/.emacs.d/elpa/org-20150309/org-version hides /home/horn/Repos/el/emacs/lisp/org/org-version /home/horn/.emacs.d/elpa/org-20150309/org-clock hides /home/horn/Repos/el/emacs/lisp/org/org-clock /home/horn/.emacs.d/elpa/org-20150309/org-macro hides /home/horn/Repos/el/emacs/lisp/org/org-macro /home/horn/.emacs.d/elpa/org-20150309/ob-fortran hides /home/horn/Repos/el/emacs/lisp/org/ob-fortran /home/horn/.emacs.d/elpa/org-20150309/ob-picolisp hides /home/horn/Repos/el/emacs/lisp/org/ob-picolisp /home/horn/.emacs.d/elpa/org-20150309/ob-mscgen hides /home/horn/Repos/el/emacs/lisp/org/ob-mscgen /home/horn/.emacs.d/elpa/org-20150309/ox-texinfo hides /home/horn/Repos/el/emacs/lisp/org/ox-texinfo /home/horn/.emacs.d/elpa/org-20150309/org-table hides /home/horn/Repos/el/emacs/lisp/org/org-table /home/horn/.emacs.d/elpa/org-20150309/ob-matlab hides /home/horn/Repos/el/emacs/lisp/org/ob-matlab /home/horn/.emacs.d/elpa/org-20150309/ox-html hides /home/horn/Repos/el/emacs/lisp/org/ox-html /home/horn/.emacs.d/elpa/org-20150309/ox-icalendar hides /home/horn/Repos/el/emacs/lisp/org/ox-icalendar /home/horn/.emacs.d/elpa/org-20150309/org-bbdb hides /home/horn/Repos/el/emacs/lisp/org/org-bbdb /home/horn/.emacs.d/elpa/org-20150309/ob-asymptote hides /home/horn/Repos/el/emacs/lisp/org/ob-asymptote /home/horn/.emacs.d/elpa/org-20150309/org-eshell hides /home/horn/Repos/el/emacs/lisp/org/org-eshell /home/horn/.emacs.d/elpa/org-20150309/ob-comint hides /home/horn/Repos/el/emacs/lisp/org/ob-comint /home/horn/.emacs.d/elpa/org-20150309/org hides /home/horn/Repos/el/emacs/lisp/org/org /home/horn/.emacs.d/elpa/org-20150309/org-irc hides /home/horn/Repos/el/emacs/lisp/org/org-irc /home/horn/.emacs.d/elpa/org-20150309/ob-table hides /home/horn/Repos/el/emacs/lisp/org/ob-table /home/horn/.emacs.d/elpa/org-20150309/ob-scala hides /home/horn/Repos/el/emacs/lisp/org/ob-scala /home/horn/.emacs.d/elpa/org-20150309/ob-io hides /home/horn/Repos/el/emacs/lisp/org/ob-io /home/horn/.emacs.d/elpa/org-20150309/ox-ascii hides /home/horn/Repos/el/emacs/lisp/org/ox-ascii /home/horn/.emacs.d/elpa/org-20150309/ob-lisp hides /home/horn/Repos/el/emacs/lisp/org/ob-lisp /home/horn/.emacs.d/elpa/org-20150309/org-macs hides /home/horn/Repos/el/emacs/lisp/org/org-macs /home/horn/.emacs.d/elpa/org-20150309/ob-sqlite hides /home/horn/Repos/el/emacs/lisp/org/ob-sqlite /home/horn/.emacs.d/elpa/org-20150309/ob-latex hides /home/horn/Repos/el/emacs/lisp/org/ob-latex /home/horn/.emacs.d/elpa/org-20150309/ob-css hides /home/horn/Repos/el/emacs/lisp/org/ob-css /home/horn/.emacs.d/elpa/org-20150309/org-protocol hides /home/horn/Repos/el/emacs/lisp/org/org-protocol /home/horn/.emacs.d/elpa/org-20150309/ob-keys hides /home/horn/Repos/el/emacs/lisp/org/ob-keys /home/horn/.emacs.d/elpa/org-20150309/org-mouse hides /home/horn/Repos/el/emacs/lisp/org/org-mouse /home/horn/.emacs.d/elpa/org-20150309/ob-ruby hides /home/horn/Repos/el/emacs/lisp/org/ob-ruby /home/horn/.emacs.d/elpa/org-20150309/org-element hides /home/horn/Repos/el/emacs/lisp/org/org-element /home/horn/.emacs.d/elpa/org-20150309/org-bibtex hides /home/horn/Repos/el/emacs/lisp/org/org-bibtex /home/horn/.emacs.d/elpa/org-20150309/ob-C hides /home/horn/Repos/el/emacs/lisp/org/ob-C /home/horn/.emacs.d/elpa/org-20150309/org-src hides /home/horn/Repos/el/emacs/lisp/org/org-src /home/horn/.emacs.d/elpa/org-20150309/ob-makefile hides /home/horn/Repos/el/emacs/lisp/org/ob-makefile /home/horn/.emacs.d/elpa/org-20150309/org-colview hides /home/horn/Repos/el/emacs/lisp/org/org-colview /home/horn/.emacs.d/elpa/org-20150309/ob-ledger hides /home/horn/Repos/el/emacs/lisp/org/ob-ledger /home/horn/.emacs.d/elpa/org-20150309/org-crypt hides /home/horn/Repos/el/emacs/lisp/org/org-crypt /home/horn/.emacs.d/elpa/org-20150309/ob-shen hides /home/horn/Repos/el/emacs/lisp/org/ob-shen /home/horn/.emacs.d/elpa/org-20150309/ob-gnuplot hides /home/horn/Repos/el/emacs/lisp/org/ob-gnuplot /home/horn/.emacs.d/elpa/org-20150309/org-inlinetask hides /home/horn/Repos/el/emacs/lisp/org/org-inlinetask /home/horn/.emacs.d/elpa/org-20150309/org-gnus hides /home/horn/Repos/el/emacs/lisp/org/org-gnus /home/horn/.emacs.d/elpa/org-20150309/ob-sh hides /home/horn/Repos/el/emacs/lisp/org/ob-sh /home/horn/.emacs.d/elpa/org-20150309/org-pcomplete hides /home/horn/Repos/el/emacs/lisp/org/org-pcomplete /home/horn/.emacs.d/elpa/org-20150309/org-docview hides /home/horn/Repos/el/emacs/lisp/org/org-docview /home/horn/.emacs.d/elpa/org-20150309/ox-man hides /home/horn/Repos/el/emacs/lisp/org/ox-man /home/horn/.emacs.d/elpa/org-20150309/org-plot hides /home/horn/Repos/el/emacs/lisp/org/org-plot /home/horn/.emacs.d/elpa/org-20150309/ox hides /home/horn/Repos/el/emacs/lisp/org/ox /home/horn/.emacs.d/elpa/org-20150309/ob-python hides /home/horn/Repos/el/emacs/lisp/org/ob-python /home/horn/.emacs.d/elpa/org-20150309/ob-eval hides /home/horn/Repos/el/emacs/lisp/org/ob-eval /home/horn/.emacs.d/elpa/org-20150309/ob-clojure hides /home/horn/Repos/el/emacs/lisp/org/ob-clojure /home/horn/.emacs.d/elpa/org-20150309/ob-ocaml hides /home/horn/Repos/el/emacs/lisp/org/ob-ocaml /home/horn/.emacs.d/elpa/org-20150309/ox-odt hides /home/horn/Repos/el/emacs/lisp/org/ox-odt /home/horn/.emacs.d/elpa/org-20150309/org-compat hides /home/horn/Repos/el/emacs/lisp/org/org-compat /home/horn/.emacs.d/elpa/org-20150309/org-list hides /home/horn/Repos/el/emacs/lisp/org/org-list /home/horn/.emacs.d/elpa/org-20150309/ob-emacs-lisp hides /home/horn/Repos/el/emacs/lisp/org/ob-emacs-lisp /home/horn/.emacs.d/elpa/org-20150309/org-entities hides /home/horn/Repos/el/emacs/lisp/org/org-entities /home/horn/.emacs.d/elpa/org-20150309/ob-ref hides /home/horn/Repos/el/emacs/lisp/org/ob-ref /home/horn/.emacs.d/elpa/org-20150309/ob-ditaa hides /home/horn/Repos/el/emacs/lisp/org/ob-ditaa /home/horn/.emacs.d/elpa/org-20150309/ob-lilypond hides /home/horn/Repos/el/emacs/lisp/org/ob-lilypond /home/horn/.emacs.d/elpa/org-20150309/ob-org hides /home/horn/Repos/el/emacs/lisp/org/ob-org /home/horn/.emacs.d/elpa/org-20150309/org-footnote hides /home/horn/Repos/el/emacs/lisp/org/org-footnote ~/Repos/el/gnus/lisp/dig hides /home/horn/Repos/el/emacs/lisp/net/dig ~/Repos/el/gnus/lisp/hmac-md5 hides /home/horn/Repos/el/emacs/lisp/net/hmac-md5 ~/Repos/el/gnus/lisp/ntlm hides /home/horn/Repos/el/emacs/lisp/net/ntlm ~/Repos/el/gnus/lisp/hmac-def hides /home/horn/Repos/el/emacs/lisp/net/hmac-def ~/Repos/el/gnus/lisp/rfc2104 hides /home/horn/Repos/el/emacs/lisp/net/rfc2104 ~/Repos/el/gnus/lisp/sasl-ntlm hides /home/horn/Repos/el/emacs/lisp/net/sasl-ntlm ~/Repos/el/gnus/lisp/sasl-cram hides /home/horn/Repos/el/emacs/lisp/net/sasl-cram ~/Repos/el/gnus/lisp/dns hides /home/horn/Repos/el/emacs/lisp/net/dns ~/Repos/el/gnus/lisp/sasl hides /home/horn/Repos/el/emacs/lisp/net/sasl ~/Repos/el/gnus/lisp/tls hides /home/horn/Repos/el/emacs/lisp/net/tls ~/Repos/el/gnus/lisp/sasl-scram-rfc hides /home/horn/Repos/el/emacs/lisp/net/sasl-scram-rfc ~/Repos/el/gnus/lisp/netrc hides /home/horn/Repos/el/emacs/lisp/net/netrc ~/Repos/el/gnus/lisp/sasl-digest hides /home/horn/Repos/el/emacs/lisp/net/sasl-digest ~/Repos/el/gnus/lisp/uudecode hides /home/horn/Repos/el/emacs/lisp/mail/uudecode ~/Repos/el/gnus/lisp/binhex hides /home/horn/Repos/el/emacs/lisp/mail/binhex ~/Repos/el/gnus/lisp/hashcash hides /home/horn/Repos/el/emacs/lisp/mail/hashcash ~/Repos/el/gnus/lisp/canlock hides /home/horn/Repos/el/emacs/lisp/gnus/canlock ~/Repos/el/gnus/lisp/nneething hides /home/horn/Repos/el/emacs/lisp/gnus/nneething ~/Repos/el/gnus/lisp/mm-encode hides /home/horn/Repos/el/emacs/lisp/gnus/mm-encode ~/Repos/el/gnus/lisp/mm-util hides /home/horn/Repos/el/emacs/lisp/gnus/mm-util ~/Repos/el/gnus/lisp/rfc2047 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc2047 ~/Repos/el/gnus/lisp/nnml hides /home/horn/Repos/el/emacs/lisp/gnus/nnml ~/Repos/el/gnus/lisp/gnus-cus hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cus ~/Repos/el/gnus/lisp/gnus-range hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-range ~/Repos/el/gnus/lisp/gnus-int hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-int ~/Repos/el/gnus/lisp/gnus-cloud hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cloud ~/Repos/el/gnus/lisp/spam-stat hides /home/horn/Repos/el/emacs/lisp/gnus/spam-stat ~/Repos/el/gnus/lisp/nnmh hides /home/horn/Repos/el/emacs/lisp/gnus/nnmh ~/Repos/el/gnus/lisp/gnus-mlspl hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-mlspl ~/Repos/el/gnus/lisp/deuglify hides /home/horn/Repos/el/emacs/lisp/gnus/deuglify ~/Repos/el/gnus/lisp/gnus-gravatar hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-gravatar ~/Repos/el/gnus/lisp/nngateway hides /home/horn/Repos/el/emacs/lisp/gnus/nngateway ~/Repos/el/gnus/lisp/ietf-drums hides /home/horn/Repos/el/emacs/lisp/gnus/ietf-drums ~/Repos/el/gnus/lisp/mail-parse hides /home/horn/Repos/el/emacs/lisp/gnus/mail-parse ~/Repos/el/gnus/lisp/gnus-salt hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-salt ~/Repos/el/gnus/lisp/nnimap hides /home/horn/Repos/el/emacs/lisp/gnus/nnimap ~/Repos/el/gnus/lisp/gnus-draft hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-draft ~/Repos/el/gnus/lisp/mail-source hides /home/horn/Repos/el/emacs/lisp/gnus/mail-source ~/Repos/el/gnus/lisp/messcompat hides /home/horn/Repos/el/emacs/lisp/gnus/messcompat ~/Repos/el/gnus/lisp/pop3 hides /home/horn/Repos/el/emacs/lisp/gnus/pop3 ~/Repos/el/gnus/lisp/nnmaildir hides /home/horn/Repos/el/emacs/lisp/gnus/nnmaildir ~/Repos/el/gnus/lisp/nnheader hides /home/horn/Repos/el/emacs/lisp/gnus/nnheader ~/Repos/el/gnus/lisp/gnus-cite hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cite ~/Repos/el/gnus/lisp/nndiary hides /home/horn/Repos/el/emacs/lisp/gnus/nndiary ~/Repos/el/gnus/lisp/gnus-diary hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-diary ~/Repos/el/gnus/lisp/nnfolder hides /home/horn/Repos/el/emacs/lisp/gnus/nnfolder ~/Repos/el/gnus/lisp/gnus-art hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-art ~/Repos/el/gnus/lisp/gnus-demon hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-demon ~/Repos/el/gnus/lisp/mml-sec hides /home/horn/Repos/el/emacs/lisp/gnus/mml-sec ~/Repos/el/gnus/lisp/nnir hides /home/horn/Repos/el/emacs/lisp/gnus/nnir ~/Repos/el/gnus/lisp/mm-partial hides /home/horn/Repos/el/emacs/lisp/gnus/mm-partial ~/Repos/el/gnus/lisp/gnus-registry hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-registry ~/Repos/el/gnus/lisp/gnus-icalendar hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-icalendar ~/Repos/el/gnus/lisp/compface hides /home/horn/Repos/el/emacs/lisp/gnus/compface ~/Repos/el/gnus/lisp/gnus-fun hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-fun ~/Repos/el/gnus/lisp/gnus-start hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-start ~/Repos/el/gnus/lisp/smiley hides /home/horn/Repos/el/emacs/lisp/gnus/smiley ~/Repos/el/gnus/lisp/gnus-picon hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-picon ~/Repos/el/gnus/lisp/spam-report hides /home/horn/Repos/el/emacs/lisp/gnus/spam-report ~/Repos/el/gnus/lisp/nntp hides /home/horn/Repos/el/emacs/lisp/gnus/nntp ~/Repos/el/gnus/lisp/nnnil hides /home/horn/Repos/el/emacs/lisp/gnus/nnnil ~/Repos/el/gnus/lisp/nndir hides /home/horn/Repos/el/emacs/lisp/gnus/nndir ~/Repos/el/gnus/lisp/gnus-srvr hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-srvr ~/Repos/el/gnus/lisp/smime hides /home/horn/Repos/el/emacs/lisp/gnus/smime ~/Repos/el/gnus/lisp/nnvirtual hides /home/horn/Repos/el/emacs/lisp/gnus/nnvirtual ~/Repos/el/gnus/lisp/gnus-notifications hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-notifications ~/Repos/el/gnus/lisp/nnspool hides /home/horn/Repos/el/emacs/lisp/gnus/nnspool ~/Repos/el/gnus/lisp/gnus-group hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-group ~/Repos/el/gnus/lisp/gnus-bcklg hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-bcklg ~/Repos/el/gnus/lisp/gnus-util hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-util ~/Repos/el/gnus/lisp/gnus-sieve hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-sieve ~/Repos/el/gnus/lisp/nndraft hides /home/horn/Repos/el/emacs/lisp/gnus/nndraft ~/Repos/el/gnus/lisp/nnagent hides /home/horn/Repos/el/emacs/lisp/gnus/nnagent ~/Repos/el/gnus/lisp/gnus-spec hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-spec ~/Repos/el/gnus/lisp/gnus-bookmark hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-bookmark ~/Repos/el/gnus/lisp/mml1991 hides /home/horn/Repos/el/emacs/lisp/gnus/mml1991 ~/Repos/el/gnus/lisp/rfc2231 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc2231 ~/Repos/el/gnus/lisp/yenc hides /home/horn/Repos/el/emacs/lisp/gnus/yenc ~/Repos/el/gnus/lisp/gnus-undo hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-undo ~/Repos/el/gnus/lisp/ecomplete hides /home/horn/Repos/el/emacs/lisp/gnus/ecomplete ~/Repos/el/gnus/lisp/legacy-gnus-agent hides /home/horn/Repos/el/emacs/lisp/gnus/legacy-gnus-agent ~/Repos/el/gnus/lisp/utf7 hides /home/horn/Repos/el/emacs/lisp/gnus/utf7 ~/Repos/el/gnus/lisp/rtree hides /home/horn/Repos/el/emacs/lisp/gnus/rtree ~/Repos/el/gnus/lisp/gnus-uu hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-uu ~/Repos/el/gnus/lisp/gnus-ml hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-ml ~/Repos/el/gnus/lisp/sieve hides /home/horn/Repos/el/emacs/lisp/gnus/sieve ~/Repos/el/gnus/lisp/gnus hides /home/horn/Repos/el/emacs/lisp/gnus/gnus ~/Repos/el/gnus/lisp/mml hides /home/horn/Repos/el/emacs/lisp/gnus/mml ~/Repos/el/gnus/lisp/message hides /home/horn/Repos/el/emacs/lisp/gnus/message ~/Repos/el/gnus/lisp/mml-smime hides /home/horn/Repos/el/emacs/lisp/gnus/mml-smime ~/Repos/el/gnus/lisp/gnus-eform hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-eform ~/Repos/el/gnus/lisp/gnus-agent hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-agent ~/Repos/el/gnus/lisp/gnus-logic hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-logic ~/Repos/el/gnus/lisp/mm-extern hides /home/horn/Repos/el/emacs/lisp/gnus/mm-extern ~/Repos/el/gnus/lisp/nndoc hides /home/horn/Repos/el/emacs/lisp/gnus/nndoc ~/Repos/el/gnus/lisp/sieve-manage hides /home/horn/Repos/el/emacs/lisp/gnus/sieve-manage ~/Repos/el/gnus/lisp/mm-decode hides /home/horn/Repos/el/emacs/lisp/gnus/mm-decode ~/Repos/el/gnus/lisp/starttls hides /home/horn/Repos/el/emacs/lisp/gnus/starttls ~/Repos/el/gnus/lisp/gnus-dired hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-dired ~/Repos/el/gnus/lisp/nnbabyl hides /home/horn/Repos/el/emacs/lisp/gnus/nnbabyl ~/Repos/el/gnus/lisp/nnmbox hides /home/horn/Repos/el/emacs/lisp/gnus/nnmbox ~/Repos/el/gnus/lisp/gnus-win hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-win ~/Repos/el/gnus/lisp/gnus-async hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-async ~/Repos/el/gnus/lisp/mm-url hides /home/horn/Repos/el/emacs/lisp/gnus/mm-url ~/Repos/el/gnus/lisp/gnus-html hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-html ~/Repos/el/gnus/lisp/gssapi hides /home/horn/Repos/el/emacs/lisp/gnus/gssapi ~/Repos/el/gnus/lisp/mml2015 hides /home/horn/Repos/el/emacs/lisp/gnus/mml2015 ~/Repos/el/gnus/lisp/nnrss hides /home/horn/Repos/el/emacs/lisp/gnus/nnrss ~/Repos/el/gnus/lisp/gnus-mh hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-mh ~/Repos/el/gnus/lisp/gnus-sum hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-sum ~/Repos/el/gnus/lisp/nnweb hides /home/horn/Repos/el/emacs/lisp/gnus/nnweb ~/Repos/el/gnus/lisp/mail-prsvr hides /home/horn/Repos/el/emacs/lisp/gnus/mail-prsvr ~/Repos/el/gnus/lisp/nnmairix hides /home/horn/Repos/el/emacs/lisp/gnus/nnmairix ~/Repos/el/gnus/lisp/plstore hides /home/horn/Repos/el/emacs/lisp/gnus/plstore ~/Repos/el/gnus/lisp/rfc2045 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc2045 ~/Repos/el/gnus/lisp/gnus-msg hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-msg ~/Repos/el/gnus/lisp/spam-wash hides /home/horn/Repos/el/emacs/lisp/gnus/spam-wash ~/Repos/el/gnus/lisp/gnus-score hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-score ~/Repos/el/gnus/lisp/mm-uu hides /home/horn/Repos/el/emacs/lisp/gnus/mm-uu ~/Repos/el/gnus/lisp/spam hides /home/horn/Repos/el/emacs/lisp/gnus/spam ~/Repos/el/gnus/lisp/mm-view hides /home/horn/Repos/el/emacs/lisp/gnus/mm-view ~/Repos/el/gnus/lisp/sieve-mode hides /home/horn/Repos/el/emacs/lisp/gnus/sieve-mode ~/Repos/el/gnus/lisp/html2text hides /home/horn/Repos/el/emacs/lisp/gnus/html2text ~/Repos/el/gnus/lisp/gnus-ems hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-ems ~/Repos/el/gnus/lisp/registry hides /home/horn/Repos/el/emacs/lisp/gnus/registry ~/Repos/el/gnus/lisp/auth-source hides /home/horn/Repos/el/emacs/lisp/gnus/auth-source ~/Repos/el/gnus/lisp/gravatar hides /home/horn/Repos/el/emacs/lisp/gnus/gravatar ~/Repos/el/gnus/lisp/flow-fill hides /home/horn/Repos/el/emacs/lisp/gnus/flow-fill ~/Repos/el/gnus/lisp/gmm-utils hides /home/horn/Repos/el/emacs/lisp/gnus/gmm-utils ~/Repos/el/gnus/lisp/mailcap hides /home/horn/Repos/el/emacs/lisp/gnus/mailcap ~/Repos/el/gnus/lisp/gnus-delay hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-delay ~/Repos/el/gnus/lisp/mm-bodies hides /home/horn/Repos/el/emacs/lisp/gnus/mm-bodies ~/Repos/el/gnus/lisp/mm-archive hides /home/horn/Repos/el/emacs/lisp/gnus/mm-archive ~/Repos/el/gnus/lisp/rfc1843 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc1843 ~/Repos/el/gnus/lisp/gnus-kill hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-kill ~/Repos/el/gnus/lisp/qp hides /home/horn/Repos/el/emacs/lisp/gnus/qp ~/Repos/el/gnus/lisp/score-mode hides /home/horn/Repos/el/emacs/lisp/gnus/score-mode ~/Repos/el/gnus/lisp/gnus-topic hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-topic ~/Repos/el/gnus/lisp/gnus-cache hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cache ~/Repos/el/gnus/lisp/nnmail hides /home/horn/Repos/el/emacs/lisp/gnus/nnmail ~/Repos/el/gnus/lisp/gnus-vm hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-vm ~/Repos/el/gnus/lisp/gnus-sync hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-sync ~/Repos/el/gnus/lisp/nnoo hides /home/horn/Repos/el/emacs/lisp/gnus/nnoo ~/Repos/el/gnus/lisp/nnregistry hides /home/horn/Repos/el/emacs/lisp/gnus/nnregistry ~/Repos/el/gnus/lisp/gnus-dup hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-dup ~/Repos/el/gnus/lisp/parse-time hides /home/horn/Repos/el/emacs/lisp/calendar/parse-time ~/Repos/el/gnus/lisp/time-date hides /home/horn/Repos/el/emacs/lisp/calendar/time-date Features: (shadow emacsbug eieio-opt speedbar sb-image ezimage dframe cus-theme eieio-custom wid-browse gnus-dup hippie-exp texmathp vc vc-dispatcher vc-git diff-mode preview prv-emacs auto-dictionary flyspell ispell tex-buf reftex-dcr reftex-auc reftex reftex-vars font-latex latex tex-style tex dbus crm tex-mode latexenc filecache mailalias smtpmail sendmail misearch multi-isearch url-http url-gw url-auth sort gnus-cite smiley shr-color color shr dom mm-archive gnus-async gnus-bcklg qp gnus-ml hl-line nndraft nnmh rot13 utf-7 gnutls network-stream nsm starttls nnml nnnil gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-cache gnus-demon nntp spam spam-stat gnus-uu yenc gnus-msg gnus-gravatar mail-extr gravatar gnus-topic nnir gnus-registry registry eieio-base th-private company-files company-oddmuse company-keywords company-etags company-gtags company-dabbrev-code company-dabbrev company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-css company-nxml company-bbdb highlight-parentheses company finder-inf stratego-mode greql-mode tg-mode generic preview-latex tex-site auto-loads cider tramp-sh cider-mode cider-repl cider-eldoc cider-interaction arc-mode archive-mode cider-doc org-table cider-test cider-stacktrace cider-client nrepl-client queue cider-util ewoc etags xref clojure-mode imenu paredit aggressive-indent names edebug epa-file epa epg rdictcc ox-reveal ox-latex ox-icalendar ox-html ox-ascii ox-publish ox org-element google-contacts-message google-contacts derived url-cache google-oauth google-contacts-gnus gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source tls utf7 netrc nnoo parse-time gnus-spec gnus-int gnus-range gnus-win gnus gnus-ems gnus-compat nnheader em-term term ehelp esh-opt esh-ext esh-util highlight-symbol boxquote rect ecomplete message rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils gmm-utils mailheader edit-server server haskell-yas yasnippet help-mode cl disp-table pdf-tools cus-edit cus-start cus-load pdf-view jka-compr pdf-cache pdf-info tq pdf-util image-mode browse-kill-ring recentf tree-widget wid-edit helm-projectile helm-files image-dired tramp tramp-compat tramp-loaddefs trampver shell dired-x dired-aux ffap helm-tags helm-bookmark helm-adaptive helm-info helm-net browse-url xml url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util url-parse auth-source gnus-util mm-util mail-prsvr password-cache url-vars mailcap bookmark pp helm-external helm-buffers helm-match-plugin helm-help helm-org org org-macro org-footnote org-pcomplete pcomplete org-list org-faces org-entities noutline outline org-version ob-emacs-lisp ob ob-tangle ob-ref ob-lob ob-table ob-exp org-src ob-keys ob-comint ob-core ob-eval org-compat org-macs org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs helm-grep helm-regexp helm-plugin grep helm-elscreen helm-utils dired compile comint ansi-color helm-locate helm cl-macs helm-source eieio-compat eieio eieio-core cl-generic byte-opt gv bytecomp byte-compile cl-extra seq cconv projectile ibuf-ext ibuffer thingatpt helm-config async-bytecomp async helm-aliases easy-mmode iedit iedit-lib cap-words superword subword saveplace savehist paren icomplete mb-depth smart-mode-line-respectful-theme smart-mode-line-light-theme smart-mode-line mule-util rich-minority dash rx bs windmove winner ring elec-pair gnus-load subr-x pcase tsdh-light-theme edmacro kmacro cl-loaddefs cl-lib memory-usage-autoloads advice help-fns info easymenu package epg-config time-date tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process dbusbind gfilenotify dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs) Memory information: ((conses 16 787394 102702) (symbols 48 64420 0) (miscs 40 1765 1865) (strings 32 210627 32909) (string-bytes 1 6983073) (vectors 16 67973) (vector-slots 8 1841432 157490) (floats 8 1004 1302) (intervals 56 8197 1476) (buffers 976 85) (heap 1024 127954 9667)) From unknown Sun Jun 22 08:02:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#20096: 25.0.50; Add Font-Lock support for subr-x macros Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 Mar 2015 14:53:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 20096 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tassilo Horn Cc: 20096@debbugs.gnu.org Received: via spool by 20096-submit@debbugs.gnu.org id=B20096.142617198032604 (code B ref 20096); Thu, 12 Mar 2015 14:53:02 +0000 Received: (at 20096) by debbugs.gnu.org; 12 Mar 2015 14:53:00 +0000 Received: from localhost ([127.0.0.1]:44072 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YW4Ts-0008Tm-1S for submit@debbugs.gnu.org; Thu, 12 Mar 2015 10:53:00 -0400 Received: from ironport2-out.teksavvy.com ([206.248.154.181]:19949) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YW4Tp-0008TY-Aq for 20096@debbugs.gnu.org; Thu, 12 Mar 2015 10:52:57 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ar8TAPOG1lRFpZs2/2dsb2JhbABbgwaDX4VTvhyCSQQCAoENRAEBAQEBAXyEDQEEAVYjBQsLDiYSFBgNJIg4CM4jAQEBAQEBBAEBAQEej3gHhCoFmV+LG4R4gUUihAoignMBAQE X-IPAS-Result: Ar8TAPOG1lRFpZs2/2dsb2JhbABbgwaDX4VTvhyCSQQCAoENRAEBAQEBAXyEDQEEAVYjBQsLDiYSFBgNJIg4CM4jAQEBAQEBBAEBAQEej3gHhCoFmV+LG4R4gUUihAoignMBAQE X-IronPort-AV: E=Sophos;i="5.09,536,1418101200"; d="scan'208";a="113376469" Received: from 69-165-155-54.dsl.teksavvy.com (HELO pastel.home) ([69.165.155.54]) by ironport2-out.teksavvy.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 12 Mar 2015 10:52:51 -0400 Received: by pastel.home (Postfix, from userid 20848) id 15DC12092; Thu, 12 Mar 2015 10:52:51 -0400 (EDT) From: Stefan Monnier Message-ID: References: <87d24etxni.fsf@gnu.org> Date: Thu, 12 Mar 2015 10:52:51 -0400 In-Reply-To: <87d24etxni.fsf@gnu.org> (Tassilo Horn's message of "Thu, 12 Mar 2015 09:42:09 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) > Is committing the following change the right thing to do? On that philosophical question, I think the answer would be: not quite. Instead, The Right Thing to do, might be to change elisp-mode's font-lock rules so they check obarray for macros (i.e. use mapatoms + regexp-opt to generate a macro matching all macros, and probably update it from after-load-functions)? That should kill several birds with a single (big) stone. Stefan "damn I hate those birds!" From unknown Sun Jun 22 08:02:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#20096: 25.0.50; Add Font-Lock support for subr-x macros Resent-From: Tassilo Horn Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 14 Mar 2015 08:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 20096 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: 20096@debbugs.gnu.org Received: via spool by 20096-submit@debbugs.gnu.org id=B20096.142632158827984 (code B ref 20096); Sat, 14 Mar 2015 08:27:02 +0000 Received: (at 20096) by debbugs.gnu.org; 14 Mar 2015 08:26:28 +0000 Received: from localhost ([127.0.0.1]:45652 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YWhOt-0007HI-Nf for submit@debbugs.gnu.org; Sat, 14 Mar 2015 04:26:28 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:57831) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YWhOr-0007H7-2q for 20096@debbugs.gnu.org; Sat, 14 Mar 2015 04:26:25 -0400 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id D1F3820A16 for <20096@debbugs.gnu.org>; Sat, 14 Mar 2015 04:26:22 -0400 (EDT) Received: from frontend2 ([10.202.2.161]) by compute6.internal (MEProxy); Sat, 14 Mar 2015 04:26:24 -0400 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=x-sasl-enc:from:to:cc:subject:in-reply-to :references:date:message-id:mime-version:content-type; s= smtpout; bh=3Qk3wH0vMmiZ0DqTYxghP3vk5p0=; b=VO31dhvTdi3hHireLpJp VxqRMFXvd9RR5rhjMBcGMfytkN40B9iaqCOBWEfuBgIBjMMMF671cx+H1GM3lqqZ HIRePl/WFYB6+9UM/Fb2uVD6rV+o92xEipXV/gTZiSKxXGtD6pHHXaT1XsoSQXNf 3ENYjDXdASWJq9hqeslZKN8= X-Sasl-enc: llsYExfhuvMlNNIVPZdADqNb+BBc+oWomAm/fYni2cIj 1426321584 Received: from thinkpad-t440p (unknown [2.162.112.8]) by mail.messagingengine.com (Postfix) with ESMTPA id A9C906800F1; Sat, 14 Mar 2015 04:26:23 -0400 (EDT) From: Tassilo Horn In-Reply-To: (Stefan Monnier's message of "Thu, 12 Mar 2015 10:52:51 -0400") References: <87d24etxni.fsf@gnu.org> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/25.0.50 (gnu/linux) Date: Sat, 14 Mar 2015 09:26:21 +0100 Message-ID: <87sid8vvbm.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) Stefan Monnier writes: >> Is committing the following change the right thing to do? > > On that philosophical question, I think the answer would be: > not quite. > > Instead, The Right Thing to do, might be to change elisp-mode's > font-lock rules so they check obarray for macros (i.e. use mapatoms + > regexp-opt to generate a macro matching all macros, and probably > update it from after-load-functions)? I don't understant what you mean with generating a macro matching all macros, but the attached patch uses a regexp defconst with a matcher function for font-lock-keywords. The regex is updated by an after-load-function which also refreshes fontification in existing elisp buffers. --8<---------------cut here---------------start------------->8--- diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 5d91209..96fa403 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -181,6 +181,30 @@ nil))) res)) +(defconst lisp--el-macro-regexp nil + "A regular expression matching all loaded elisp macros. +Can be updated using `lisp--el-update-macro-regexp' after new +macros were defined.") + +(defun lisp--el-update-macro-regexp () + "Update `lisp--el-update-macro-regexp' from `obarray'." + (let (elisp-macros) + (mapatoms (lambda (a) + (when (macrop a) + (push (symbol-name a) elisp-macros)))) + (setq lisp--el-macro-regexp + (concat "(" (regexp-opt elisp-macros t) "\\_>")))) + +(defun lisp--el-update-after-load (_file) + "Update `lisp--el-macro-regexp' and adjust font-lock in existing buffers." + (lisp--el-update-macro-regexp) + (dolist (buf (buffer-list)) + (when (derived-mode-p 'emacs-lisp-mode) + (font-lock-flush)))) + +(defun lisp--el-match-macro (limit) + (re-search-forward lisp--el-macro-regexp limit t)) + (pcase-let ((`(,vdefs ,tdefs ,el-defs-re ,cl-defs-re @@ -194,7 +218,9 @@ "when" "unless" "with-output-to-string" "ignore-errors" "dotimes" "dolist" "declare")) (lisp-errs '("warn" "error" "signal")) - ;; Elisp constructs. FIXME: update dynamically from obarray. + ;; Elisp constructs. Now they are update dynamically + ;; from obarray but they are also used for setting up + ;; the keywords for Common Lisp. (el-fdefs '("define-advice" "defadvice" "defalias" "define-derived-mode" "define-minor-mode" "define-generic-mode" "define-global-minor-mode" @@ -333,7 +359,7 @@ `( ;; Regexp negated char group. ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend) ;; Control structures. Common Lisp forms. - (,(concat "(" el-kws-re "\\_>") . 1) + (lisp--el-match-macro . 1) ;; Exit/Feature symbols as constants. (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\_>" "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?") @@ -514,6 +540,9 @@ font-lock keywords will not be case sensitive." . lisp-font-lock-syntactic-face-function))) (setq-local prettify-symbols-alist lisp--prettify-symbols-alist) (when elisp + (unless lisp--el-macro-regexp + (lisp--el-update-macro-regexp)) + (add-hook 'after-load-functions #'lisp--el-update-after-load) (setq-local electric-pair-text-pairs (cons '(?\` . ?\') electric-pair-text-pairs))) (setq-local electric-pair-skip-whitespace 'chomp) --8<---------------cut here---------------end--------------->8--- Bye, Tassilo From unknown Sun Jun 22 08:02:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#20096: 25.0.50; Add Font-Lock support for subr-x macros Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 14 Mar 2015 13:57:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 20096 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Tassilo Horn Cc: 20096@debbugs.gnu.org Received: via spool by 20096-submit@debbugs.gnu.org id=B20096.1426341401436 (code B ref 20096); Sat, 14 Mar 2015 13:57:01 +0000 Received: (at 20096) by debbugs.gnu.org; 14 Mar 2015 13:56:41 +0000 Received: from localhost ([127.0.0.1]:46700 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YWmYT-00006y-1m for submit@debbugs.gnu.org; Sat, 14 Mar 2015 09:56:41 -0400 Received: from ironport2-out.teksavvy.com ([206.248.154.181]:50371) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YWmYN-00006s-Eo for 20096@debbugs.gnu.org; Sat, 14 Mar 2015 09:56:36 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ar8TAPOG1lRFxLnr/2dsb2JhbABbgwaDX4VTvhyCSQQCAoENRAEBAQEBAXyEDQEEAVYjBQsLDiYSFBgNJIg4CM4jAQEBAQEBBAEBAQEej3gHhCoFjTiMJ4sbhHiBRSKCAhyBbCKCcwEBAQ X-IPAS-Result: Ar8TAPOG1lRFxLnr/2dsb2JhbABbgwaDX4VTvhyCSQQCAoENRAEBAQEBAXyEDQEEAVYjBQsLDiYSFBgNJIg4CM4jAQEBAQEBBAEBAQEej3gHhCoFjTiMJ4sbhHiBRSKCAhyBbCKCcwEBAQ X-IronPort-AV: E=Sophos;i="5.09,536,1418101200"; d="scan'208";a="113546507" Received: from 69-196-185-235.dsl.teksavvy.com (HELO pastel.home) ([69.196.185.235]) by ironport2-out.teksavvy.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 14 Mar 2015 09:56:34 -0400 Received: by pastel.home (Postfix, from userid 20848) id EA517D40; Sat, 14 Mar 2015 09:56:33 -0400 (EDT) From: Stefan Monnier Message-ID: References: <87d24etxni.fsf@gnu.org> <87sid8vvbm.fsf@gnu.org> Date: Sat, 14 Mar 2015 09:56:33 -0400 In-Reply-To: <87sid8vvbm.fsf@gnu.org> (Tassilo Horn's message of "Sat, 14 Mar 2015 09:26:21 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) >> Instead, The Right Thing to do, might be to change elisp-mode's >> font-lock rules so they check obarray for macros (i.e. use mapatoms + >> regexp-opt to generate a regexp matching all macros, and probably >> update it from after-load-functions)? > I don't understant what you mean with generating a macro matching all > macros, That's because I said "generate a regexp matching all macros", as you can clearly see in the excerpt you quoted (see above). > but the attached patch uses a regexp defconst with a matcher > function for font-lock-keywords. Looks good. > +(defun lisp--el-update-after-load (_file) > + "Update `lisp--el-macro-regexp' and adjust font-lock in existing buffers." > + (lisp--el-update-macro-regexp) > + (dolist (buf (buffer-list)) > + (when (derived-mode-p 'emacs-lisp-mode) > + (font-lock-flush)))) I think we should only flush if the set of macros has changed. Other than that, the patch looks good. Have you tried it? Does it work well in practice? Stefan From unknown Sun Jun 22 08:02:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#20096: 25.0.50; Add Font-Lock support for subr-x macros Resent-From: Tassilo Horn Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 15 Mar 2015 08:26:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 20096 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: 20096@debbugs.gnu.org Received: via spool by 20096-submit@debbugs.gnu.org id=B20096.142640794627494 (code B ref 20096); Sun, 15 Mar 2015 08:26:02 +0000 Received: (at 20096) by debbugs.gnu.org; 15 Mar 2015 08:25:46 +0000 Received: from localhost ([127.0.0.1]:46922 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YX3rm-00079O-5E for submit@debbugs.gnu.org; Sun, 15 Mar 2015 04:25:46 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:57489) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YX3rj-00079E-C2 for 20096@debbugs.gnu.org; Sun, 15 Mar 2015 04:25:44 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id ACE38207A3 for <20096@debbugs.gnu.org>; Sun, 15 Mar 2015 04:25:40 -0400 (EDT) Received: from frontend2 ([10.202.2.161]) by compute2.internal (MEProxy); Sun, 15 Mar 2015 04:25:42 -0400 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=x-sasl-enc:from:to:cc:subject:references :date:in-reply-to:message-id:mime-version:content-type; s= smtpout; bh=iIgqaeQUyS6lH0PvOkwNbt8Ve2o=; b=Q9e2WixHFLUUSNKcJSae MGp+pue+FVx4Cy5aRgFv+43kMVFPTR9YADM7ZAV9DQ4lBIQmATlASijAogCLV96F 4igEk6TUO3BelnNst/74Ap8pjrTp4khn0PyoCZ6aksGEUidPcf0BDNNR90nI0uJ/ gNqXGoh4heiV7T98qs84uSg= X-Sasl-enc: vNUYKw+vLnIijTjbQxVpeTKQEq3j4TGLnXWLdeqBtJAW 1426407942 Received: from thinkpad-t440p (unknown [2.163.26.221]) by mail.messagingengine.com (Postfix) with ESMTPA id 996B1680109; Sun, 15 Mar 2015 04:25:41 -0400 (EDT) From: Tassilo Horn References: <87d24etxni.fsf@gnu.org> <87sid8vvbm.fsf@gnu.org> Date: Sun, 15 Mar 2015 09:25:38 +0100 In-Reply-To: (Stefan Monnier's message of "Sat, 14 Mar 2015 09:56:33 -0400") Message-ID: <87ioe2mzul.fsf@gnu.org> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.3 (/) Stefan Monnier writes: >> but the attached patch uses a regexp defconst with a matcher >> function for font-lock-keywords. > > Looks good. Committed as 51e7e463e93708a0e40688f91200e9e9869ec662 on master. >> +(defun lisp--el-update-after-load (_file) >> + "Update `lisp--el-macro-regexp' and adjust font-lock in existing buffers." >> + (lisp--el-update-macro-regexp) >> + (dolist (buf (buffer-list)) >> + (when (derived-mode-p 'emacs-lisp-mode) >> + (font-lock-flush)))) > > I think we should only flush if the set of macros has changed. Ok, I'm doing that now. > Other than that, the patch looks good. > Have you tried it? Yes, but not long enough. Some non-important special forms such as `if' and `progn' weren't highlighted anymore. So now I consider both macros and special forms. > Does it work well in practice? IMO, yes. The difference is that there are some macros which haven't been highlighted previously, e.g., `push'. Bye, Tassilo From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 17 19:47:32 2019 Received: (at control) by debbugs.gnu.org; 17 Apr 2019 23:47:32 +0000 Received: from localhost ([127.0.0.1]:41026 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hGuH5-0001xj-7s for submit@debbugs.gnu.org; Wed, 17 Apr 2019 19:47:32 -0400 Received: from mail-qt1-f175.google.com ([209.85.160.175]:40659) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hGuH3-0001xR-NJ; Wed, 17 Apr 2019 19:47:30 -0400 Received: by mail-qt1-f175.google.com with SMTP id x12so304812qts.7; Wed, 17 Apr 2019 16:47:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version; bh=IPl7vDvayykmLPMBo6JC+GnRSmBtWGo6fG2wsMO2fnQ=; b=m/b0K1P3VlTdsg8UgKv5gRrGjyWKytOvO1daAbFbUweAYQM49qazBd9usm5LXDhzlv W5QhUgFbaSLtAK059IJwpxWS9yeIcWDL3EmCU4NRQM5b/Zbun9VQRlOwB74ophGoRusL NObLF1BRFKfxYQ1kb6D3Em/zTe+85h1aSBbO5b6it/IrGn74tnGITa/NNIiwAixhFRUB 2mFmf1JyRU2BAnGEz/w5ZwUjZqBub/ZCVNd7j1G+p6VcMBNKMEFnVOzdDR9opAMQtUlq gHQMxIxNznJgTQp+ixPVOoIqLa63TOeYsx7RYVdAcn/kXCmAJApmfizGyMaPWioXnyyO HTnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=IPl7vDvayykmLPMBo6JC+GnRSmBtWGo6fG2wsMO2fnQ=; b=uAYBmOid6do6kVpVtLVINifSZvyL8ZwhVJGSygKhuIQX4w9TEuC5S6II0CdApNrAch wjh8PStCJYQOBKYQyRF5pz2giUvUx1k/j5F0oNiVfYlQhT9Vqe5X6Ym3mLQaRHhXVAl0 KyN1oD2fkZmMoRORXSi6UXg9fSSsoM9KhDc7YI4gInVyDJoZ0mahB5or4ky6l92EtIMS T6MDBE6FA45fA5o00ptpiLG+ErNBDOEHhx6x871NvQO39zvKlHSZDCDHZfeAybBF6e8X bin3iNXk4Bu24LNyWePo1boHBRIb2ux38Bm2qM+rDMdg+9esmvpQ+MACx8pAp+YCAwmi sINg== X-Gm-Message-State: APjAAAUMsPbugIKqXI7hzCgj8SVM6oVHiyHxR6+rcGtS2ziIcH7x+sip sUAEL/IUbLy6RymnnDF98f8AInDt X-Google-Smtp-Source: APXvYqzMqI0zp44lBpgEjRTMxu3Dj3fsaXXmBzI0k22q7ejDniq5MotfcTksoP6VHMwSvdjZRRlelA== X-Received: by 2002:aed:3e9b:: with SMTP id n27mr72714231qtf.192.1555544842778; Wed, 17 Apr 2019 16:47:22 -0700 (PDT) Received: from minid (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id x2sm121509qkj.59.2019.04.17.16.47.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 17 Apr 2019 16:47:21 -0700 (PDT) From: Noam Postavsky To: 20096-quiet@debbugs.gnu.org Subject: Re: bug#20096: 25.0.50; Add Font-Lock support for subr-x macros References: <87d24etxni.fsf@gnu.org> <87sid8vvbm.fsf@gnu.org> <87ioe2mzul.fsf@gnu.org> Date: Wed, 17 Apr 2019 19:47:20 -0400 In-Reply-To: <87ioe2mzul.fsf@gnu.org> (Tassilo Horn's message of "Sun, 15 Mar 2015 09:25:38 +0100") Message-ID: <87mukow5x3.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 20096 fixed close 20096 25.1 quit Tassilo Horn writes: > > Committed as 51e7e463e93708a0e40688f91200e9e9869ec662 on master. > 51e7e463e9 2015-03-15T09:20:13+01:00 "Font-lock elisp macros/special forms dynamically" https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=51e7e463e93708a0e40688f91200e9e9869ec662