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