Package: emacs;
Reported by: Aaron Jensen <aaronjensen <at> gmail.com>
Date: Sat, 23 Dec 2023 14:53:02 UTC
Severity: normal
Found in version 30.0.50
To reply to this bug, email your comments to 67991 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sat, 23 Dec 2023 14:53:02 GMT) Full text and rfc822 format available.Aaron Jensen <aaronjensen <at> gmail.com>
:bug-gnu-emacs <at> gnu.org
.
(Sat, 23 Dec 2023 14:53:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Aaron Jensen <aaronjensen <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Cc: monnier <at> iro.umontreal.ca Subject: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sat, 23 Dec 2023 09:51:50 -0500
After commits: 0fde935b66e43e4d7ec137ba6195de993168587a a63b206fbde2ead91f1053d80a275f8850e5ffce boundp returns nil here, rather than t, like it used to: (format-mode-line '(:eval (let* ((some-var "some-value") (_ (message "Bound: %S" (boundp 'some-var)))) (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) This has an impact on a particular package I use for my modeline, which can be worked around if this behavior is expected. It seemed a significant chagne, so I wanted to report it, in case it was not expected. In GNU Emacs 30.0.50 (build 1, aarch64-apple-darwin23.1.0, NS appkit-2487.20 Version 14.1.1 (Build 23B2082)) of 2023-11-17 built on Aarons-MacBook-Pro.local Windowing system distributor 'Apple', version 10.3.2487 System Description: macOS 14.2.1 Configured using: 'configure --disable-dependency-tracking --disable-silent-rules --enable-locallisppath=/opt/homebrew/share/emacs/site-lisp --infodir=/opt/homebrew/Cellar/emacs-plus <at> 30/30.0.50/share/info/emacs --prefix=/opt/homebrew/Cellar/emacs-plus <at> 30/30.0.50 --with-xml2 --with-gnutls --with-native-compilation --without-compress-install --without-dbus --without-imagemagick --with-modules --with-rsvg --with-webp --with-ns --disable-ns-self-contained 'CFLAGS=-Os -w -pipe -mmacosx-version-min=14 -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT' 'CPPFLAGS=-I/opt/homebrew/opt/zlib/include -I/opt/homebrew/opt/jpeg/include -I/opt/homebrew/opt/icu4c/include -isystem/opt/homebrew/include -F/opt/homebrew/Frameworks -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk' 'LDFLAGS=-L/opt/homebrew/opt/zlib/lib -L/opt/homebrew/opt/jpeg/lib -L/opt/homebrew/opt/icu4c/lib -L/opt/homebrew/lib -F/opt/homebrew/Frameworks -Wl,-headerpad_max_install_names -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -L/opt/homebrew/opt/libgccjit/lib'' Configured features: ACL GIF GLIB GMP GNUTLS JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM ZLIB Important settings: value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Org Minor modes in effect: windmove-mode: t global-flycheck-mode: t flycheck-mode: t global-evil-mc-mode: t evil-mc-mode: t global-git-commit-mode: t transient-posframe-mode: t corfu-prescient-mode: t corfu-history-mode: t eval-sexp-fu-flash-mode: t eros-mode: t speed-of-thought-mode: t global-evil-surround-mode: t evil-surround-mode: t tabspaces-mode: t flyspell-mode: t org-indent-mode: t org-appear-mode: t orgonomic-mode: t org-superstar-mode: t form-feed-mode: t org-roam-db-autosync-mode: t evil-org-mode: t undo-fu-session-global-mode: t undo-fu-session-mode: t ws-butler-global-mode: t ws-butler-mode: t yas-global-mode: t yas-minor-mode: t vertico-prescient-mode: t prescient-persist-mode: t vertico-mouse-mode: t vertico-mode: t mini-frame-mode: t better-jumper-mode: t better-jumper-local-mode: t ns-auto-titlebar-mode: t global-anzu-mode: t anzu-mode: t which-key-posframe-mode: t which-key-mode: t gcmh-mode: t xterm-mouse-mode: t global-auto-revert-mode: t save-place-mode: t winner-mode: t savehist-mode: t delete-selection-mode: t recentf-mode: t repeat-mode: t +popup-mode: t evil-mode: t evil-local-mode: t server-mode: t leader-key-leader-override-mode: t global-leader-key-leader-override-mode: t elpaca-use-package-mode: t override-global-mode: t global-display-line-numbers-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t prettify-symbols-mode: t tab-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t window-divider-mode: t minibuffer-regexp-mode: t line-number-mode: t auto-fill-function: #[128 \304\300\301%3#\207 [yas--auto-fill org-auto-fill-function :around nil apply] 5 advice] transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t abbrev-mode: t Load-path shadows: /Users/aaronjensen/.emacs.d/elpaca/builds/lispy/elpa hides /Users/aaronjensen/.emacs.d/elpaca/builds/ivy/elpa Features: (shadow sort mail-extr emacsbug evil-matchit-simple evil-matchit-prog evil-matchit evil-matchit-sdk semantic/lex semantic/fw evil-collection-help hippie-exp evil-collection-helpful helpful cc-langs cc-vars cc-defs trace info-look elisp-refs hide-mode-line info magit-patch magit-subtree magit-gitignore magit-ediff evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util magit-extras vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs log-view bug-reference elpaca-log elpaca-ui popup-mode-core windmove evil-terminal-cursor-changer color executable flycheck evil-mc evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars evil-mc-known-commands evil-mc-common magit-delta xterm-color evil-collection-magit magit-submodule magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit package url-handlers magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff git-commit log-edit pcvs-util add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor magit-mode transient-posframe transient magit-git magit-base crm vertico-directory cape corfu-prescient corfu-history corfu dtrt-indent eval-sexp-fu eros lispyville lispy lispy-inline avy etags fileloop evil-collection-edebug edebug lispy-tags mode-local zoutline elisp-def ert ewoc evil-collection-xref xref f f-shortdoc sotlisp skeleton elec-pair envrc inheritenv evil-surround evil-matchit-evil-setup tabspaces dired-x vc vc-git diff-mode vc-dispatcher flyspell ispell org-indent org-appear orgonomic org-superstar form-feed oc-basic ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg dom browse-url gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time gnus-spec gnus-int gnus-range message sendmail yank-media rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util mail-utils range ol-docview doc-view jka-compr image-mode exif dired dired-loaddefs ol-bibtex bibtex iso8601 ol-bbdb ol-w3m ol-doi org-link-doi org-download url-http url url-proxy url-privacy url-expand url-methods url-history mailcap url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-cookie generate-lisp-file url-domsuf url-util url-gw nsm puny async vulpea vulpea-meta vulpea-select vulpea-buffer vulpea-db s vulpea-utils vulpea-note org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node org-roam-db emacsql-sqlite-builtin sqlite org-roam-utils org-roam-compat org-roam org-mac-link org-goto org-capture org-attach emacsql-sqlite emacsql-sqlite-common emacsql emacsql-compiler magit-section cursor-sensor dash evil-org-agenda evil-org imenu ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda ox-ascii ox-gfm ox-md ox-html table ox-publish ox org-element org-persist xdg org-id org-refile avl-tree generator org-tempo tempo ob-shell shell org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete pcomplete org-list org-footnote org-faces org-entities noutline outline ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs cal-menu calendar cal-loaddefs org-version org-compat org-macs format-spec undo-fu-session ws-butler yasnippet vertico-prescient prescient char-fold vertico-mouse vertico mini-frame better-jumper ns-auto-titlebar evil-anzu anzu which-key-posframe posframe evil-collection-which-key which-key gcmh help-fns radix-tree cl-print xt-mouse autorevert filenotify saveplace winner hl-line evil-collection-ibuffer ibuffer ibuffer-loaddefs savehist delsel popup-mode-hacks evil-collection-debug debug backtrace find-func recentf tree-widget repeat orderless popup-mode popup-mode-settings evil-collection annalist evil-little-word cus-edit cus-start cus-load wid-edit pp evil evil-integration evil-maps evil-commands reveal evil-jumps evil-command-window evil-types evil-search evil-ex evil-macros evil-repeat evil-states evil-core project advice evil-common thingatpt rect evil-vars memoize nano-modeline nano-light-theme face-remap nano-theme disp-table gcmh-autoloads copy-as-format-autoloads pdf-tools-autoloads tablist-autoloads restclient-autoloads vterm-autoloads dumb-jump-autoloads popup-autoloads haml-mode-autoloads emmet-mode-autoloads terraform-mode-autoloads hcl-mode-autoloads dockerfile-mode-autoloads yaml-mode-autoloads json-mode-autoloads json-snatcher-autoloads grip-mode-autoloads lua-mode-autoloads bundler-autoloads inf-ruby-autoloads ruby-refactor-autoloads evil-ruby-text-objects-autoloads sotlisp-autoloads elisp-def-autoloads lispyville-autoloads lispy-autoloads iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads eros-autoloads eval-sexp-fu-autoloads web-mode-autoloads ripgrep-capf-autoloads git-link-autoloads consult-git-commit-autoloads git-timemachine-autoloads magit-delta-autoloads xterm-color-autoloads prettier-autoloads iter2-autoloads nvm-autoloads editorconfig-autoloads flycheck-autoloads pkg-info-autoloads epl-autoloads lsp-ui-autoloads lsp-mode-autoloads spinner-autoloads markdown-mode-autoloads denote-autoloads imenu-list-autoloads org-superstar-autoloads ox-gfm-autoloads org-pandoc-import-autoloads gnuplot-autoloads org-download-autoloads async-autoloads org-journal-autoloads vulpea-autoloads org-roam-autoloads emacsql-autoloads orgonomic-autoloads org-drill-autoloads persist-autoloads org-appear-autoloads org-mac-link-autoloads evil-org-autoloads evil-terminal-cursor-changer-autoloads transient-posframe-autoloads better-jumper-autoloads buffer-move-autoloads rotate-autoloads mini-frame-autoloads embark-consult-autoloads embark-autoloads consult-autoloads orderless-autoloads cape-autoloads corfu-prescient-autoloads corfu-autoloads vertico-prescient-autoloads vertico-autoloads prescient-autoloads tabspaces-autoloads which-key-posframe-autoloads which-key-autoloads popup-mode-autoloads hide-mode-line-autoloads evil-anzu-autoloads anzu-autoloads titlecase-autoloads wgrep-autoloads yasnippet-autoloads form-feed-autoloads drag-stuff-autoloads dtrt-indent-autoloads ws-butler-autoloads evil-collection-autoloads annalist-autoloads evil-mc-autoloads evil-numbers-autoloads speeddating-autoloads evil-little-word-autoloads evil-matchit-autoloads evil-nerd-commenter-autoloads evil-visualstar-autoloads evil-surround-autoloads vundo-autoloads undo-fu-session-autoloads ztree-autoloads dwim-shell-command-autoloads treemacs-tab-bar-autoloads treemacs-magit-autoloads magit-autoloads git-commit-autoloads magit-section-autoloads with-editor-autoloads treemacs-evil-autoloads evil-autoloads goto-chg-autoloads treemacs-autoloads ace-window-autoloads avy-autoloads pfuture-autoloads ht-autoloads cfrs-autoloads all-the-icons-autoloads rainbow-mode-autoloads posframe-autoloads ns-auto-titlebar-autoloads nano-modeline-autoloads nano-theme-autoloads memoize-autoloads envrc-autoloads inheritenv-autoloads helpful-autoloads f-autoloads elisp-refs-autoloads s-autoloads dired-subtree-autoloads dired-hacks-utils-autoloads dash-autoloads server pcase hydra lv url-parse auth-source eieio eieio-core password-cache json map url-vars edmacro kmacro byte-opt compdef derived leader-key bind-map no-littering compat compdef-autoloads hydra-autoloads lv-autoloads leader-key-autoloads bind-map-autoloads no-littering-autoloads compat-autoloads elpaca-use-package use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core elpaca-use-package-autoloads compile text-property-search comint ansi-osc ansi-color ring time-date comp-run cl-macs elpaca elpaca-process elpaca-autoloads comp cl-seq comp-cstr comp-common warnings subr-x rx gv bytecomp byte-compile cl-extra help-mode icons cl-loaddefs cl-lib display-line-numbers rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win touch-screen tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads kqueue cocoa ns lcms2 multi-tty make-network-process native-compile emacs) Memory information: ((conses 16 1715062 1710222) (symbols 48 59369 9) (strings 32 463445 162848) (string-bytes 1 12748013) (vectors 16 187678) (vector-slots 8 3436760 1120751) (floats 8 1816 4805) (intervals 56 40244 7368) (buffers 992 34))
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sat, 23 Dec 2023 15:11:01 GMT) Full text and rfc822 format available.Message #8 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Aaron Jensen <aaronjensen <at> gmail.com> Cc: monnier <at> iro.umontreal.ca, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sat, 23 Dec 2023 17:09:40 +0200
> Cc: monnier <at> iro.umontreal.ca > From: Aaron Jensen <aaronjensen <at> gmail.com> > Date: Sat, 23 Dec 2023 09:51:50 -0500 > > > After commits: > > 0fde935b66e43e4d7ec137ba6195de993168587a > a63b206fbde2ead91f1053d80a275f8850e5ffce > > boundp returns nil here, rather than t, like it used to: > > (format-mode-line > '(:eval (let* ((some-var "some-value") > (_ (message "Bound: %S" (boundp 'some-var)))) > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) If I evaluate this: (let* ((some-var "some-value") (_ (message "Bound: %S" (boundp 'some-var)))) (message "Var: %S, Bound: %S" some-var (boundp 'some-var))) in *scratch*, I also get nil and nil, both in Emacs 29 and with the latest master branch. So why would you expect to see t when you evaluate this as part of format-mode-line? Or what am I missing?
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sat, 23 Dec 2023 15:22:01 GMT) Full text and rfc822 format available.Message #11 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Gerd Möllmann <gerd.moellmann <at> gmail.com> To: Aaron Jensen <aaronjensen <at> gmail.com> Cc: monnier <at> iro.umontreal.ca, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sat, 23 Dec 2023 16:21:44 +0100
Aaron Jensen <aaronjensen <at> gmail.com> writes: > After commits: > > 0fde935b66e43e4d7ec137ba6195de993168587a > a63b206fbde2ead91f1053d80a275f8850e5ffce > > boundp returns nil here, rather than t, like it used to: > > (format-mode-line > '(:eval (let* ((some-var "some-value") > (_ (message "Bound: %S" (boundp 'some-var)))) > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) > > This has an impact on a particular package I use for my modeline, which > can be worked around if this behavior is expected. It seemed a > significant chagne, so I wanted to report it, in case it was not expected. I don't know why that would have changed things with Stefan's commit, but are your sure that some-var is declared special (has a defvar, for instance)? When it is, boundp returns t here.
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sat, 23 Dec 2023 15:53:01 GMT) Full text and rfc822 format available.Message #14 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Aaron Jensen <aaronjensen <at> gmail.com> To: Gerd Möllmann <gerd.moellmann <at> gmail.com> Cc: monnier <at> iro.umontreal.ca, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sat, 23 Dec 2023 10:52:22 -0500
On Sat, Dec 23, 2023 at 10:21 AM Gerd Möllmann <gerd.moellmann <at> gmail.com> wrote: > > Aaron Jensen <aaronjensen <at> gmail.com> writes: > > > After commits: > > > > 0fde935b66e43e4d7ec137ba6195de993168587a > > a63b206fbde2ead91f1053d80a275f8850e5ffce > > > > boundp returns nil here, rather than t, like it used to: > > > > (format-mode-line > > '(:eval (let* ((some-var "some-value") > > (_ (message "Bound: %S" (boundp 'some-var)))) > > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) > > > > This has an impact on a particular package I use for my modeline, which > > can be worked around if this behavior is expected. It seemed a > > significant chagne, so I wanted to report it, in case it was not expected. > > I don't know why that would have changed things with Stefan's commit, > but are your sure that some-var is declared special (has a defvar, for > instance)? When it is, boundp returns t here. It's not in the package in question. But even if I defvar w/o giving it a value, it does not return t: (defvar some-var) (let* ((some-var "some-value") (_ (message "Bound: %S" (boundp 'some-var)))) (message "Var: %S, Bound: %S" some-var (boundp 'some-var))) (format-mode-line '(:eval (let* ((some-var "some-value") (_ (message "Bound: %S" (boundp 'some-var)))) (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) The first returns t, the second does not. As to your question, Eli, I don't know. If it shouldn't return nil then I can report that downstream and they can fix it there. Aaron
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sat, 23 Dec 2023 16:14:02 GMT) Full text and rfc822 format available.Message #17 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Gerd Möllmann <gerd.moellmann <at> gmail.com> To: Aaron Jensen <aaronjensen <at> gmail.com> Cc: monnier <at> iro.umontreal.ca, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sat, 23 Dec 2023 17:13:18 +0100
Aaron Jensen <aaronjensen <at> gmail.com> writes: > On Sat, Dec 23, 2023 at 10:21 AM Gerd Möllmann <gerd.moellmann <at> gmail.com> wrote: >> >> Aaron Jensen <aaronjensen <at> gmail.com> writes: >> >> > After commits: >> > >> > 0fde935b66e43e4d7ec137ba6195de993168587a >> > a63b206fbde2ead91f1053d80a275f8850e5ffce >> > >> > boundp returns nil here, rather than t, like it used to: >> > >> > (format-mode-line >> > '(:eval (let* ((some-var "some-value") >> > (_ (message "Bound: %S" (boundp 'some-var)))) >> > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) >> > >> > This has an impact on a particular package I use for my modeline, which >> > can be worked around if this behavior is expected. It seemed a >> > significant chagne, so I wanted to report it, in case it was not expected. >> >> I don't know why that would have changed things with Stefan's commit, >> but are your sure that some-var is declared special (has a defvar, for >> instance)? When it is, boundp returns t here. > > It's not in the package in question. It should have a defvar, to make sure that the binding of some-var in the let* behaves as expected also when lexical-binding it t, which it is in lisp-interaction-mode, for example. > But even if I defvar w/o giving > it a value, it does not return t: That's strange, indeed: (defvar some-var2) => some-var2 (special-variable-p 'some-var2) => nil (defvar some-var3 nil) => some-var3 (special-variable-p 'some-var3) => t Does someone know if that's intended for some reason? Looks like a bug to me.
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sat, 23 Dec 2023 16:43:01 GMT) Full text and rfc822 format available.Message #20 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Aaron Jensen <aaronjensen <at> gmail.com> Cc: gerd.moellmann <at> gmail.com, monnier <at> iro.umontreal.ca, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sat, 23 Dec 2023 18:42:26 +0200
> Cc: monnier <at> iro.umontreal.ca, 67991 <at> debbugs.gnu.org > From: Aaron Jensen <aaronjensen <at> gmail.com> > Date: Sat, 23 Dec 2023 10:52:22 -0500 > > On Sat, Dec 23, 2023 at 10:21 AM Gerd Möllmann <gerd.moellmann <at> gmail.com> wrote: > > > > Aaron Jensen <aaronjensen <at> gmail.com> writes: > > > > > After commits: > > > > > > 0fde935b66e43e4d7ec137ba6195de993168587a > > > a63b206fbde2ead91f1053d80a275f8850e5ffce > > > > > > boundp returns nil here, rather than t, like it used to: > > > > > > (format-mode-line > > > '(:eval (let* ((some-var "some-value") > > > (_ (message "Bound: %S" (boundp 'some-var)))) > > > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) > > > > > > This has an impact on a particular package I use for my modeline, which > > > can be worked around if this behavior is expected. It seemed a > > > significant chagne, so I wanted to report it, in case it was not expected. > > > > I don't know why that would have changed things with Stefan's commit, > > but are your sure that some-var is declared special (has a defvar, for > > instance)? When it is, boundp returns t here. > > It's not in the package in question. But even if I defvar w/o giving > it a value, it does not return t: > > (defvar some-var) > > (let* ((some-var "some-value") > (_ (message "Bound: %S" (boundp 'some-var)))) > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))) > > (format-mode-line > '(:eval (let* ((some-var "some-value") > (_ (message "Bound: %S" (boundp 'some-var)))) > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))) > > The first returns t, the second does not. This one will return t: (format-mode-line '(:eval (progn (defvar some-var) (let* ((some-var "some-value") (_ (message "Bound: %S" (boundp 'some-var)))) (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))) > As to your question, Eli, I don't know. If it shouldn't return nil > then I can report that downstream and they can fix it there. Let's wait for Stefan to chime in, he made the change you blamed.
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sun, 24 Dec 2023 07:14:01 GMT) Full text and rfc822 format available.Message #23 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Gerd Möllmann <gerd.moellmann <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: monnier <at> iro.umontreal.ca, Aaron Jensen <aaronjensen <at> gmail.com>, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sun, 24 Dec 2023 08:13:39 +0100
Eli Zaretskii <eliz <at> gnu.org> writes: > This one will return t: > > (format-mode-line > '(:eval (progn > (defvar some-var) > (let* ((some-var "some-value") > (_ (message "Bound: %S" (boundp 'some-var)))) > (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))) > Indeed. Looking at Fdefvar, one can see that a "(defvar foo)" does this when lexical-binding is t /* A simple (defvar foo) with lexical scoping does "nothing" except declare that var to be dynamically scoped *locally* (i.e. within the current file or let-block). */ while it does nothing at all if lexical-binding is nil. Maybe defvar's doc string could give some hint to that. This sentence at least is not true for "(defvar SYMBOL)": The ‘defvar’ form also declares the variable as "special", so that it is always dynamically bound even if ‘lexical-binding’ is t.
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sun, 24 Dec 2023 07:47:01 GMT) Full text and rfc822 format available.Message #26 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Gerd Möllmann <gerd.moellmann <at> gmail.com> Cc: monnier <at> iro.umontreal.ca, aaronjensen <at> gmail.com, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sun, 24 Dec 2023 09:45:41 +0200
> From: Gerd Möllmann <gerd.moellmann <at> gmail.com> > Cc: Aaron Jensen <aaronjensen <at> gmail.com>, monnier <at> iro.umontreal.ca, > 67991 <at> debbugs.gnu.org > Date: Sun, 24 Dec 2023 08:13:39 +0100 > > Eli Zaretskii <eliz <at> gnu.org> writes: > > > This one will return t: > > > > (format-mode-line > > '(:eval (progn > > (defvar some-var) > > (let* ((some-var "some-value") > > (_ (message "Bound: %S" (boundp 'some-var)))) > > (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))) > > > > Indeed. Looking at Fdefvar, one can see that a "(defvar foo)" does this > when lexical-binding is t > > /* A simple (defvar foo) with lexical scoping does "nothing" except > declare that var to be dynamically scoped *locally* (i.e. within > the current file or let-block). */ > > while it does nothing at all if lexical-binding is nil. Maybe defvar's > doc string could give some hint to that. This sentence at least is not > true for "(defvar SYMBOL)": > > The ‘defvar’ form also declares the variable as "special", > so that it is always dynamically bound even if ‘lexical-binding’ is t. Thanks, I hope I clarified the doc string now.
bug-gnu-emacs <at> gnu.org
:bug#67991
; Package emacs
.
(Sun, 24 Dec 2023 08:06:02 GMT) Full text and rfc822 format available.Message #29 received at 67991 <at> debbugs.gnu.org (full text, mbox):
From: Gerd Möllmann <gerd.moellmann <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: monnier <at> iro.umontreal.ca, aaronjensen <at> gmail.com, 67991 <at> debbugs.gnu.org Subject: Re: bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Date: Sun, 24 Dec 2023 09:05:38 +0100
Eli Zaretskii <eliz <at> gnu.org> writes: > Thanks, I hope I clarified the doc string now. LGTM. Thanks!
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.