Subject: bug#58875: 29.0.50; emoji-insert triggers a Lisp error

From: Kévin Le Gouguec <[email-masked]>
Date: Sat, 29 Oct 2022 22:28:46 +0200

$ emacs -Q
M-x toggle-debug-on-error
C-x 8 e e

⇒

> Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p vector)
>   apply(debug (error (wrong-type-argument number-or-marker-p vector)))
>   transient--exit-and-debug(error (wrong-type-argument number-or-marker-p vector))
>   transient--use-level-p(vector)
>   transient--init-suffix(nil (vector 1 'transient-columns (list :description "Emoji") (list (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "r" :description "Recent " :command 'transient:emoji--command-Emoji:Recent\ )) (list 1 'transient-suffix (list :key "s" :description "Smileys 😀🥰😋🤗🤐😌😷🤠😎😕😤" :command 'emoji--command-Emoji\ >\ Smileys)) (list 1 'transient-suffix (list :key "e" :description "Emotion 💋💯💢💥💫💦💨🕳️💬👁️‍🗨️🗨️" :command 'emoji--command-Emoji\ >\ Emotion)) (list 1 'transient-suffix (list :key "b" :description "Body 👋👌👈👍✍️👏💪🤚🤌👉👎💅🙌" :command 'emoji--command-Emoji\ >\ Body)) (list 1 'transient-suffix (list :key "p" :description "People 🧑🙍🫅🧜💆🤺🧘🧑‍🤝‍🧑🫂🧓🙎👳" :command 'emoji--command-Emoji\ >\ People)) (list 1 'transient-suffix (list :key "a" :description "Animals & Nature 🐵🦃🐸🐊🐳🐌💐" :command 'emoji--command-Emoji\ >\ Animals\ &\ Nature)))) (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "f" :description "Food & Drink 🍇🥑🍞🍱🦀🍦🍼🥢🍈" :command 'emoji--command-Emoji\ >\ Food\ &\ Drink)) (list 1 'transient-suffix (list :key "t" :description "Travel & Places 🌍🏔️🏟️⛪⛲🚂⚓" :command 'emoji--command-Emoji\ >\ Travel\ &\ Places)) (list 1 'transient-suffix (list :key "c" :description "Activities 🎃🎖️⚽🎯🎭🎄🏆⚾🪀🖼️" :command 'emoji--command-Emoji\ >\ Activities)) (list 1 'transient-suffix (list :key "o" :description "Objects 👓🔇🎼🎷📱🔋🎥📔💰✉️✏️" :command 'emoji--command-Emoji\ >\ Objects)) (list 1 'transient-suffix (list :key "y" :description "Symbols 🏧⚠️⬆️🛐♈🔀♀️✖️‼️💱⚕️" :command 'emoji--command-Emoji\ >\ Symbols)) (list 1 'transient-suffix (list :key "l" :description "Flags 🏁🇦🇨🏴󠁧󠁢󠁥󠁮󠁧󠁿🚩🇦🇩🏴󠁧󠁢󠁳󠁣󠁴󠁿🎌🇦🇪🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴🇦🇫🏳️" :command 'emoji--command-Emoji\ >\ Flags)))))))
>   transient--init-child(nil (vector 1 'transient-columns (list :description "Emoji") (list (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "r" :description "Recent " :command 'transient:emoji--command-Emoji:Recent\ )) (list 1 'transient-suffix (list :key "s" :description "Smileys 😀🥰😋🤗🤐😌😷🤠😎😕😤" :command 'emoji--command-Emoji\ >\ Smileys)) (list 1 'transient-suffix (list :key "e" :description "Emotion 💋💯💢💥💫💦💨🕳️💬👁️‍🗨️🗨️" :command 'emoji--command-Emoji\ >\ Emotion)) (list 1 'transient-suffix (list :key "b" :description "Body 👋👌👈👍✍️👏💪🤚🤌👉👎💅🙌" :command 'emoji--command-Emoji\ >\ Body)) (list 1 'transient-suffix (list :key "p" :description "People 🧑🙍🫅🧜💆🤺🧘🧑‍🤝‍🧑🫂🧓🙎👳" :command 'emoji--command-Emoji\ >\ People)) (list 1 'transient-suffix (list :key "a" :description "Animals & Nature 🐵🦃🐸🐊🐳🐌💐" :command 'emoji--command-Emoji\ >\ Animals\ &\ Nature)))) (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "f" :description "Food & Drink 🍇🥑🍞🍱🦀🍦🍼🥢🍈" :command 'emoji--command-Emoji\ >\ Food\ &\ Drink)) (list 1 'transient-suffix (list :key "t" :description "Travel & Places 🌍🏔️🏟️⛪⛲🚂⚓" :command 'emoji--command-Emoji\ >\ Travel\ &\ Places)) (list 1 'transient-suffix (list :key "c" :description "Activities 🎃🎖️⚽🎯🎭🎄🏆⚾🪀🖼️" :command 'emoji--command-Emoji\ >\ Activities)) (list 1 'transient-suffix (list :key "o" :description "Objects 👓🔇🎼🎷📱🔋🎥📔💰✉️✏️" :command 'emoji--command-Emoji\ >\ Objects)) (list 1 'transient-suffix (list :key "y" :description "Symbols 🏧⚠️⬆️🛐♈🔀♀️✖️‼️💱⚕️" :command 'emoji--command-Emoji\ >\ Symbols)) (list 1 'transient-suffix (list :key "l" :description "Flags 🏁🇦🇨🏴󠁧󠁢󠁥󠁮󠁧󠁿🚩🇦🇩🏴󠁧󠁢󠁳󠁣󠁴󠁿🎌🇦🇪🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴🇦🇫🏳️" :command 'emoji--command-Emoji\ >\ Flags)))))))
>   #f(compiled-function (c) #<bytecode -0x142f01508458fb8e>)((vector 1 'transient-columns (list :description "Emoji") (list (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "r" :description "Recent " :command 'transient:emoji--command-Emoji:Recent\ )) (list 1 'transient-suffix (list :key "s" :description "Smileys 😀🥰😋🤗🤐😌😷🤠😎😕😤" :command 'emoji--command-Emoji\ >\ Smileys)) (list 1 'transient-suffix (list :key "e" :description "Emotion 💋💯💢💥💫💦💨🕳️💬👁️‍🗨️🗨️" :command 'emoji--command-Emoji\ >\ Emotion)) (list 1 'transient-suffix (list :key "b" :description "Body 👋👌👈👍✍️👏💪🤚🤌👉👎💅🙌" :command 'emoji--command-Emoji\ >\ Body)) (list 1 'transient-suffix (list :key "p" :description "People 🧑🙍🫅🧜💆🤺🧘🧑‍🤝‍🧑🫂🧓🙎👳" :command 'emoji--command-Emoji\ >\ People)) (list 1 'transient-suffix (list :key "a" :description "Animals & Nature 🐵🦃🐸🐊🐳🐌💐" :command 'emoji--command-Emoji\ >\ Animals\ &\ Nature)))) (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "f" :description "Food & Drink 🍇🥑🍞🍱🦀🍦🍼🥢🍈" :command 'emoji--command-Emoji\ >\ Food\ &\ Drink)) (list 1 'transient-suffix (list :key "t" :description "Travel & Places 🌍🏔️🏟️⛪⛲🚂⚓" :command 'emoji--command-Emoji\ >\ Travel\ &\ Places)) (list 1 'transient-suffix (list :key "c" :description "Activities 🎃🎖️⚽🎯🎭🎄🏆⚾🪀🖼️" :command 'emoji--command-Emoji\ >\ Activities)) (list 1 'transient-suffix (list :key "o" :description "Objects 👓🔇🎼🎷📱🔋🎥📔💰✉️✏️" :command 'emoji--command-Emoji\ >\ Objects)) (list 1 'transient-suffix (list :key "y" :description "Symbols 🏧⚠️⬆️🛐♈🔀♀️✖️‼️💱⚕️" :command 'emoji--command-Emoji\ >\ Symbols)) (list 1 'transient-suffix (list :key "l" :description "Flags 🏁🇦🇨🏴󠁧󠁢󠁥󠁮󠁧󠁿🚩🇦🇩🏴󠁧󠁢󠁳󠁣󠁴󠁿🎌🇦🇪🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴🇦🇫🏳️" :command 'emoji--command-Emoji\ >\ Flags)))))))
>   mapcan(#f(compiled-function (c) #<bytecode -0x142f01508458fb8e>) ((vector 1 'transient-columns (list :description "Emoji") (list (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "r" :description "Recent " :command ...)) (list 1 'transient-suffix (list :key "s" :description "Smileys 😀🥰😋🤗🤐😌😷🤠😎😕😤" :command ...)) (list 1 'transient-suffix (list :key "e" :description "Emotion 💋💯💢💥💫💦💨🕳️💬👁️‍🗨️🗨️" :command ...)) (list 1 'transient-suffix (list :key "b" :description "Body 👋👌👈👍✍️👏💪🤚🤌👉👎💅🙌" :command ...)) (list 1 'transient-suffix (list :key "p" :description "People 🧑🙍🫅🧜💆🤺🧘🧑‍🤝‍🧑🫂🧓🙎👳" :command ...)) (list 1 'transient-suffix (list :key "a" :description "Animals & Nature 🐵🦃🐸🐊🐳🐌💐" :command ...)))) (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "f" :description "Food & Drink 🍇🥑🍞🍱🦀🍦🍼🥢🍈" :command ...)) (list 1 'transient-suffix (list :key "t" :description "Travel & Places 🌍🏔️🏟️⛪⛲🚂⚓" :command ...)) (list 1 'transient-suffix (list :key "c" :description "Activities 🎃🎖️⚽🎯🎭🎄🏆⚾🪀🖼️" :command ...)) (list 1 'transient-suffix (list :key "o" :description "Objects 👓🔇🎼🎷📱🔋🎥📔💰✉️✏️" :command ...)) (list 1 'transient-suffix (list :key "y" :description "Symbols 🏧⚠️⬆️🛐♈🔀♀️✖️‼️💱⚕️" :command ...)) (list 1 'transient-suffix (list :key "l" :description "Flags 🏁🇦🇨🏴󠁧󠁢󠁥󠁮󠁧󠁿🚩🇦🇩🏴󠁧󠁢󠁳󠁣󠁴󠁿🎌🇦🇪🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴🇦🇫🏳️" :command ...)))))) [1 transient-columns (:hide #f(compiled-function () #<bytecode 0x173b9ba52e4fa3e2>)) ([1 transient-column (:description "Value commands") ((1 transient-suffix (:key "C-x s  " :description "Set" :command transient-set)) (1 transient-suffix (:key "C-x C-s" :description "Save" :command transient-save)) (1 transient-suffix (:key "C-x C-k" :description "Reset" :command transient-reset)) (1 transient-suffix (:key "C-x p  " :description "Previous value" :command transient-history-prev)) (1 transient-suffix (:key "C-x n  " :description "Next value" :command transient-history-next)))] [1 transient-column (:description "Sticky commands") ((1 transient-suffix (:key "C-g" :description "Quit prefix or transient" :command transient-quit-one)) (1 transient-suffix (:key "C-q" :description "Quit transient stack" :command transient-quit-all)) (1 transient-suffix (:key "C-z" :description "Suspend transient stack" :command transient-suspend)))] [1 transient-column (:description "Customize") ((1 transient-suffix (:key "C-x t" :command transient-toggle-common :description #f(compiled-function () #<bytecode 0x1e0d3e4688a317b5>))) (1 transient-suffix (:key "C-x l" :description "Show/hide suffixes" :command transient-set-level)))])]))
>   cl-mapcan(#f(compiled-function (c) #<bytecode -0x142f01508458fb8e>) ((vector 1 'transient-columns (list :description "Emoji") (list (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "r" :description "Recent " :command ...)) (list 1 'transient-suffix (list :key "s" :description "Smileys 😀🥰😋🤗🤐😌😷🤠😎😕😤" :command ...)) (list 1 'transient-suffix (list :key "e" :description "Emotion 💋💯💢💥💫💦💨🕳️💬👁️‍🗨️🗨️" :command ...)) (list 1 'transient-suffix (list :key "b" :description "Body 👋👌👈👍✍️👏💪🤚🤌👉👎💅🙌" :command ...)) (list 1 'transient-suffix (list :key "p" :description "People 🧑🙍🫅🧜💆🤺🧘🧑‍🤝‍🧑🫂🧓🙎👳" :command ...)) (list 1 'transient-suffix (list :key "a" :description "Animals & Nature 🐵🦃🐸🐊🐳🐌💐" :command ...)))) (vector 1 'transient-column nil (list (list 1 'transient-suffix (list :key "f" :description "Food & Drink 🍇🥑🍞🍱🦀🍦🍼🥢🍈" :command ...)) (list 1 'transient-suffix (list :key "t" :description "Travel & Places 🌍🏔️🏟️⛪⛲🚂⚓" :command ...)) (list 1 'transient-suffix (list :key "c" :description "Activities 🎃🎖️⚽🎯🎭🎄🏆⚾🪀🖼️" :command ...)) (list 1 'transient-suffix (list :key "o" :description "Objects 👓🔇🎼🎷📱🔋🎥📔💰✉️✏️" :command ...)) (list 1 'transient-suffix (list :key "y" :description "Symbols 🏧⚠️⬆️🛐♈🔀♀️✖️‼️💱⚕️" :command ...)) (list 1 'transient-suffix (list :key "l" :description "Flags 🏁🇦🇨🏴󠁧󠁢󠁥󠁮󠁧󠁿🚩🇦🇩🏴󠁧󠁢󠁳󠁣󠁴󠁿🎌🇦🇪🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴🇦🇫🏳️" :command ...)))))) [1 transient-columns (:hide #f(compiled-function () #<bytecode 0x173b9ba52e4fa3e2>)) ([1 transient-column (:description "Value commands") ((1 transient-suffix (:key "C-x s  " :description "Set" :command transient-set)) (1 transient-suffix (:key "C-x C-s" :description "Save" :command transient-save)) (1 transient-suffix (:key "C-x C-k" :description "Reset" :command transient-reset)) (1 transient-suffix (:key "C-x p  " :description "Previous value" :command transient-history-prev)) (1 transient-suffix (:key "C-x n  " :description "Next value" :command transient-history-next)))] [1 transient-column (:description "Sticky commands") ((1 transient-suffix (:key "C-g" :description "Quit prefix or transient" :command transient-quit-one)) (1 transient-suffix (:key "C-q" :description "Quit transient stack" :command transient-quit-all)) (1 transient-suffix (:key "C-z" :description "Suspend transient stack" :command transient-suspend)))] [1 transient-column (:description "Customize") ((1 transient-suffix (:key "C-x t" :command transient-toggle-common :description #f(compiled-function () #<bytecode 0x1e0d3e4688a317b5>))) (1 transient-suffix (:key "C-x l" :description "Show/hide suffixes" :command transient-set-level)))])]))
>   transient--init-suffixes(emoji--command-Emoji)
>   transient--init-objects(emoji--command-Emoji nil nil)
>   transient-setup(emoji--command-Emoji)
>   emoji--command-Emoji()
>   emoji-insert()
>   funcall-interactively(emoji-insert)
>   call-interactively(emoji-insert nil nil)
>   command-execute(emoji-insert)

If I revert 2022-10-28 "* lisp/transient.el: Update to package version
v0.3.7-173-g81b29ca" (de5a3fa1e5), then I no longer get an error.

Haven't dug deeper yet.  FWIW it's not clear to me if the fault lies on
the side of transient.el or emoji.el: Magit and rg.el's transients work
fine AFAICT.

Thanks for your time.

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.34, cairo version 1.17.6) of 2022-10-29 built on amdahl30
Repository revision: 44f1b1edcf74de3be7251780f058b29ccd038150
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101004
System Description: openSUSE Tumbleweed

Configured using:
 'configure --with-cairo --with-gconf --with-sqlite3 --with-xinput2'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=local
  locale-coding-system: utf-8-unix