Package: emacs;
Reported by: Philip Kaludercic <philipk <at> posteo.net>
Date: Fri, 15 Sep 2023 07:21:02 UTC
Severity: normal
Found in version 30.0.50
Fixed in version 30.1
Done: Stefan Kangas <stefankangas <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 65987 in the body.
You can then email your comments to 65987 AT debbugs.gnu.org in the normal way.
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#65987
; Package emacs
.
(Fri, 15 Sep 2023 07:21:02 GMT) Full text and rfc822 format available.Philip Kaludercic <philipk <at> posteo.net>
:bug-gnu-emacs <at> gnu.org
.
(Fri, 15 Sep 2023 07:21:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Philip Kaludercic <philipk <at> posteo.net> To: bug-gnu-emacs <at> gnu.org Subject: 30.0.50; Packages without a maintainer Email address cannot be described Date: Fri, 15 Sep 2023 07:19:57 +0000
[Message part 1 (text/plain, inline)]
C-h P raises an error when the maintainer does not give an email address. For example, C-h P gtags-mode RET triggers this stack trace: --8<---------------cut here---------------start------------->8--- Debugger entered--Lisp error: (wrong-type-argument listp "Jimmy Aguilar Mena") car("Jimmy Aguilar Mena") (if (car recipient) (progn (insert (car recipient)))) package--print-email-button("Jimmy Aguilar Mena") (let ((maintainer (car tail))) (if (bolp) (progn (insert (make-string 13 32)))) (package--print-email-button maintainer) (setq tail (cdr tail))) (while tail (let ((maintainer (car tail))) (if (bolp) (progn (insert (make-string 13 32)))) (package--print-email-button maintainer) (setq tail (cdr tail)))) (let ((tail maintainers)) (while tail (let ((maintainer (car tail))) (if (bolp) (progn (insert (make-string 13 32)))) (package--print-email-button maintainer) (setq tail (cdr tail))))) (progn (if (proper-list-p maintainers) nil (setq maintainers (list maintainers))) (package--print-help-section (if (cdr maintainers) "Maintainers" "Maintainer")) (let ((tail maintainers)) (while tail (let ((maintainer (car tail))) (if (bolp) (progn (insert (make-string 13 32)))) (package--print-email-button maintainer) (setq tail (cdr tail)))))) (if maintainers (progn (if (proper-list-p maintainers) nil (setq maintainers (list maintainers))) (package--print-help-section (if (cdr maintainers) "Maintainers" "Maintainer")) (let ((tail maintainers)) (while tail (let ((maintainer (car tail))) (if (bolp) (progn (insert ...))) (package--print-email-button maintainer) (setq tail (cdr tail))))))) (let* ((desc (or (if (let* ... ...) pkg) (car (cdr ...)) (let (...) (if built-in ... ...)))) (name (if desc (let* (...) (progn ... ...)) pkg)) (pkg-dir (if desc (let* (...) (progn ... ...)))) (reqs (if desc (let* (...) (progn ... ...)))) (required-by (if desc (package--used-elsewhere-p desc nil 'all))) (version (if desc (let* (...) (progn ... ...)))) (archive (if desc (let* (...) (progn ... ...)))) (extras (and desc (let* (...) (progn ... ...)))) (website (cdr (assoc :url extras))) (commit (cdr (assoc :commit extras))) (keywords (if desc (package-desc--keywords desc))) (built-in (eq pkg-dir 'builtin)) (installable (and archive (not built-in))) (status (if desc (package-desc-status desc) "orphan")) (incompatible-reason (package--incompatible-p desc)) (signed (if desc (let* (...) (progn ... ...)))) (maintainers (or (cdr (assoc :maintainers extras)) (cdr (assoc :maintainer extras)))) (authors (cdr (assoc :authors extras))) (news (let* ((pkg-dir ...) (s ...) (file ...) (s ...) (s ...)) (if s (progn file))))) (if (string= status "avail-obso") (progn (setq status "available obsolete"))) (if incompatible-reason (progn (setq status "incompatible"))) (princ (format "Package %S is %s.\n\n" name status)) (package--print-help-section "Status") (cond (built-in (insert (propertize (capitalize status) 'font-lock-face 'package-status-built-in) ".")) (pkg-dir (insert (propertize (if ... "Installed" ...) 'font-lock-face 'package-status-built-in)) (insert (substitute-command-keys " in `")) (let ((dir ...)) (help-insert-xref-button dir 'help-package-def pkg-dir)) (if (and (package-built-in-p name) (not ...)) (insert (substitute-command-keys "',\n shadowing a ") (propertize "built-in package" ... ...)) (insert (substitute-quotes "'"))) (if signed (insert ".") (insert " (unsigned).")) (if (and (let* ... ...) (not required-by) (member status ...)) (progn (insert " ") (package-make-button "Delete" ... ... ... desc)))) (incompatible-reason (insert (propertize "Incompatible" 'font-lock-face font-lock-warning-face) " because it depends on ") (if (stringp incompatible-reason) (insert "Emacs " incompatible-reason ".") (insert "uninstallable packages."))) (installable (insert (capitalize status)) (insert " from " (format "%s" archive)) (insert " -- ") (package-make-button "Install" 'action 'package-install-button-action 'package-desc desc)) (t (insert (capitalize status) "."))) (insert "\n") (if (and pkg-dir (not archive)) nil (package--print-help-section "Archive" (or archive "n/a"))) (and version (package--print-help-section "Version" (package-version-join version))) (if commit (progn (package--print-help-section "Commit" commit))) (if desc (progn (package--print-help-section "Summary" (let* (...) (progn ... ...))))) (setq reqs (if desc (let* ((cl-x desc)) (progn (or ... ...) (aref cl-x 4))))) (if reqs (progn (package--print-help-section "Requires") (let ((first t)) (let (...) (while tail ...)) (insert "\n")))) (if required-by (progn (package--print-help-section "Required by") (let ((first t)) (let (...) (while tail ...)) (insert "\n")))) (if website (progn (if (string-match-p "^http://\\(?:\\(?:elpa\\|git\\|www\\)\\.\\)?\\..." website) (progn (let ... ...))) (package--print-help-section "Website") (help-insert-xref-button website 'help-url website) (insert "\n"))) (if keywords (progn (package--print-help-section "Keywords") (let ((tail keywords)) (while tail (let ... ... ... ...))) (insert "\n"))) (if maintainers (progn (if (proper-list-p maintainers) nil (setq maintainers (list maintainers))) (package--print-help-section (if (cdr maintainers) "Maintainers" "Maintainer")) (let ((tail maintainers)) (while tail (let ... ... ... ...))))) (if authors (progn (package--print-help-section (if (cdr authors) "Authors" "Author")) (let ((tail authors)) (while tail (let ... ... ... ...))))) (let* ((all-pkgs (append (cdr ...) (cdr ...) (let ... ...))) (other-pkgs (delete desc all-pkgs))) (if other-pkgs (progn (package--print-help-section "Other versions" (mapconcat ... other-pkgs ", ") ".")))) (insert "\n") (let ((start-of-description (point))) (if built-in (insert (or (lm-commentary ...) "")) (if (package-installed-p desc) (insert (package--get-description desc)) (let* (... readme-string) (package--with-response-buffer-1 ... ... :file basename :async nil :error-function ... :noerror t) (insert ...)))) (if news (progn (insert "\n" (make-separator-line) "\n" (propertize "* News" ... ...) "\n\n") (insert-file-contents news))) (goto-char start-of-description) (package--describe-add-library-links) (goto-char start-of-description) (browse-url-add-buttons))) describe-package-1(gtags-mode) (save-current-buffer (set-buffer standard-output) (describe-package-1 package)) (closure ((package . gtags-mode)) nil (save-current-buffer (set-buffer standard-output) (describe-package-1 package)))() help--window-setup("*Help*" (closure ((package . gtags-mode)) nil (save-current-buffer (set-buffer standard-output) (describe-package-1 package)))) (if (not (or (let* ((cl-x package)) (progn (and (memq (type-of cl-x) cl-struct-package-desc-tags) t))) (and package (symbolp package)))) (message "No package specified") (help-setup-xref (list #'describe-package package) (called-interactively-p 'interactive)) (help--window-setup (help-buffer) #'(lambda nil (save-current-buffer (set-buffer standard-output) (describe-package-1 package))))) describe-package(gtags-mode) funcall-interactively(describe-package gtags-mode) command-execute(describe-package) --8<---------------cut here---------------end--------------->8--- A simple solution would be
[Message part 2 (text/plain, inline)]
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 02691ff7aa5..b784b0b0434 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -3089,6 +3090,8 @@ package--print-email-button "Insert a button whose action will send an email to RECIPIENT. NAME should have the form (FULLNAME . EMAIL) where FULLNAME is either a full name or nil, and EMAIL is a valid email address." + (when (stringp recipient) + (setq recipient (cons recipient "unknown <at> email.addr"))) (when (car recipient) (insert (car recipient))) (when (and (car recipient) (cdr recipient))
[Message part 3 (text/plain, inline)]
or perhaps not render any button at all? In GNU Emacs 30.0.50 (build 7, x86_64-pc-linux-gnu, GTK+ Version 3.24.37, cairo version 1.16.0) of 2023-09-13 built on quetzal Repository revision: a8959f1b245540a2d0d158621dedf244ac133849 Repository branch: master System Description: Debian GNU/Linux 12 (bookworm) Configured using: 'configure --with-pgtk --with-native-compilation --with-imagemagick --with-tree-sitter' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ IMAGEMAGICK JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB Important settings: value of $EMACSLOADPATH: value of $LC_MONETARY: en_US.UTF-8 value of $LC_NUMERIC: en_US.UTF-8 value of $LC_TIME: en_US.UTF-8 value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: ELisp/l Minor modes in effect: bug-reference-prog-mode: t gtags-mode: t flyspell-mode: t flymake-mode: t outline-minor-mode: t yas-minor-mode: t editorconfig-mode: t repeat-mode: t display-battery-mode: t display-time-mode: t diff-hl-flydiff-mode: t diff-hl-mode: t winner-mode: t windmove-mode: t electric-pair-mode: t recentf-mode: t save-place-mode: t savehist-mode: t pixel-scroll-precision-mode: t pixel-scroll-mode: t xterm-mouse-mode: t which-function-mode: t package-autosuggest-mode: message tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tab-bar-mode: t file-name-shadow-mode: t context-menu-mode: t global-font-lock-mode: t font-lock-mode: t minibuffer-regexp-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/philip/.config/emacs/site-lisp/company-coq/.auto-site hides ~/.config/emacs/site-lisp/.auto-site /home/philip/.config/emacs/site-lisp/flymake-proselint/flymake-proselint hides /home/philip/.config/emacs/elpa/flymake-proselint-0.3.0/flymake-proselint /home/philip/.config/emacs/site-lisp/shell-command+/shell-command+ hides /home/philip/.config/emacs/elpa/shell-command+/shell-command+ /home/philip/.config/emacs/site-lisp/shell-command+/shell-command+-tests hides /home/philip/.config/emacs/elpa/shell-command+/shell-command+-tests /home/philip/.config/emacs/site-lisp/vc-backup/vc-backup hides /home/philip/.config/emacs/elpa/vc-backup-1.1.0/vc-backup /home/philip/.config/emacs/elpa/transient-0.4.3/transient hides /home/philip/Source/emacs/lisp/transient /home/philip/.config/emacs/elpa/sweeprolog/theme-loaddefs hides /home/philip/Source/emacs/lisp/theme-loaddefs /home/philip/.config/emacs/elpa/compat-29.1.4.2/compat hides /home/philip/Source/emacs/lisp/emacs-lisp/compat Features: (shadow emacsbug apropos avy vc-annotate edebug whitespace bug-reference help-fns cl-print finder cus-start gtags-mode gtags-mode-autoloads url-cache url-http url-auth url-gw package-vc bash-completion flymake-proselint markdown-mode do-at-point hi-lock help-at-pt eglot jsonrpc ert debug backtrace find-func make-mode add-log vc-fossil vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs char-fold misearch multi-isearch doc-view jka-compr image-mode exif flymake-cc pulse cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs grep xref typo vc-git dired-aux autorevert filenotify gnus-dired vc-backup copyright buffer-env compat autocrypt-message writegood-mode ecomplete dictionary external-completion dictionary-connection ffap shr-color color qp ietf-drums-date mule-util sort smiley gnus-cite flow-fill mm-archive mail-extr textsec uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check gnus-async gnus-bcklg gnus-ml disp-table autocrypt-gnus autocrypt nndraft nnmh utf-7 nnfolder epa-file network-stream nsm gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig nntp gnus-cache gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range message yank-media puny dired-x dired dired-loaddefs rfc822 mml mml-sec epa mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader gnus-win flyspell ispell checkdoc flymake-proc flymake yasnippet-snippets yasnippet noutline outline editorconfig editorconfig-core editorconfig-core-handle editorconfig-fnmatch init repeat project battery dbus comp comp-cstr warnings xml shell-command+ thingatpt time sendmail rfc2047 rfc2045 ietf-drums gnus nnheader gnus-util mail-utils range mm-util mail-prsvr diff-hl-flydiff diff diff-hl log-view pcvs-util vc-dir ewoc vc vc-dispatcher diff-mode hippie-exp winner windmove elec-pair tramp-cache time-stamp recentf tree-widget saveplace tramp-sh tramp trampver tramp-integration files-x tramp-message tramp-compat xdg shell pcomplete parse-time iso8601 time-date format-spec tramp-loaddefs savehist pixel-scroll cua-base xt-mouse cus-edit pp wid-edit which-func imenu cus-load .auto-site compile text-property-search comint ansi-osc ansi-color ring loaddefs-gen lisp-mnt radix-tree site-lisp setup finder-inf auctex-autoloads tex-site autocrypt-autoloads avy-autoloads bash-completion-autoloads buffer-env-autoloads cdlatex-autoloads comint-mime-autoloads crdt-autoloads debbugs-autoloads diff-hl-autoloads do-at-point-autoloads editorconfig-autoloads flymake-proselint-autoloads focus-autoloads geiser-chez-autoloads geiser-guile-autoloads geiser-kawa-autoloads geiser-mit-autoloads geiser-racket-autoloads geiser-autoloads gnu-apl-mode-autoloads go-mode-autoloads haskell-mode-autoloads htmlize-autoloads magit-autoloads git-commit-autoloads magit-section-autoloads dash-autoloads markdown-mode-autoloads proof-general-autoloads proof-site proof-autoloads rmsbolt-autoloads shell-command+-autoloads site-lisp-autoloads sly-autoloads sml-mode-autoloads sweeprolog-autoloads transient-autoloads tuareg-autoloads caml-autoloads typo-autoloads vc-backup-autoloads vc-fossil-autoloads visual-fill-column-autoloads with-editor-autoloads info compat-autoloads writegood-mode-autoloads xr-autoloads yasnippet-snippets-autoloads yasnippet-autoloads package easy-mmode let-alist derived rx pcase browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json map byte-opt gv bytecomp byte-compile url-vars inline epg rfc6068 epg-config subr-x cl-extra help-mode icons cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win pgtk-dnd 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 dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo gtk pgtk lcms2 multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 804204 147061) (symbols 48 35153 17) (strings 32 155109 11051) (string-bytes 1 4499390) (vectors 16 94170) (vector-slots 8 2386053 223181) (floats 8 739 4529) (intervals 56 26957 5731) (buffers 992 47))
Stefan Kangas <stefankangas <at> gmail.com>
:Philip Kaludercic <philipk <at> posteo.net>
:Message #10 received at 65987-done <at> debbugs.gnu.org (full text, mbox):
From: Stefan Kangas <stefankangas <at> gmail.com> To: Philip Kaludercic <philipk <at> posteo.net>, 65987-done <at> debbugs.gnu.org Subject: Re: bug#65987: 30.0.50; Packages without a maintainer Email address cannot be described Date: Fri, 15 Sep 2023 00:57:59 -0700
Version: 30.1 Philip Kaludercic <philipk <at> posteo.net> writes: > C-h P raises an error when the maintainer does not give an email > address. For example, C-h P gtags-mode RET triggers this stack trace: Thanks, this should now be fixed on master (commit 826d383c92a). Please test that it works for you.
bug-gnu-emacs <at> gnu.org
:bug#65987
; Package emacs
.
(Fri, 15 Sep 2023 08:51:02 GMT) Full text and rfc822 format available.Message #13 received at 65987-done <at> debbugs.gnu.org (full text, mbox):
From: Philip Kaludercic <philipk <at> posteo.net> To: Stefan Kangas <stefankangas <at> gmail.com> Cc: 65987-done <at> debbugs.gnu.org Subject: Re: bug#65987: 30.0.50; Packages without a maintainer Email address cannot be described Date: Fri, 15 Sep 2023 08:50:26 +0000
Stefan Kangas <stefankangas <at> gmail.com> writes: > Version: 30.1 > > Philip Kaludercic <philipk <at> posteo.net> writes: > >> C-h P raises an error when the maintainer does not give an email >> address. For example, C-h P gtags-mode RET triggers this stack trace: > > Thanks, this should now be fixed on master (commit 826d383c92a). > > Please test that it works for you. It does, thanks.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Fri, 13 Oct 2023 11:24:16 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.