Subject: bug#79142: 30.1.90; calc: need to allow retrieving a user-defined function that does not have an assigned key

From: Christopher Howard <[email-masked]>
Date: Fri, 01 Aug 2025 14:15:33 -0800

Hi. Calc has the great feature that you can define a new function with the command calc-user-define-formula (G F). In the prompts that follow, Emacs will ask you what single key-press you want to assign to the function. However, if you do not want a key-press, i.e., you only want the long form name to be defined, then you can instead type M-x, and it will instead ask you for the long name. Personally, I only like to use the long names for my own functions.

Calc has another feature whereby you can retrieve the function and drop it on the stack, which is handy if you just want to look at the formula for the function. The command for this is calc-user-define-get-defn (Z G). if you run this command, Emacs will proceed to ask you to press a key, thus indicating by your single key-press what function you want to retrieve. But if you did not define a key-press, then unfortunately you have no recourse. Intuitively, you would think that pressing M-x would allow you to enter the long name, like it does with the original defining command, but this does not work.

In GNU Emacs 30.1.90 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.43, cairo version 1.18.4) of 2025-06-23 built on theoden
Repository revision: a2bfce5d2a7d046a45c25364f3c69b3d8a776081
Repository branch: emacs-30
Windowing system distributor 'The X.Org Foundation', version 11.0.12401006
System Description: Guix System

Configured using:
 'configure --prefix=/home/christopher/local'

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

Important settings:
  value of $EMACSLOADPATH: /home/christopher/local/share/emacs/30.1.90/lisp
  value of $EMACSNATIVELOADPATH: /home/christopher/.guix-home/profile/lib/emacs/native-site-lisp:/home/christopher/.guix-home/profile/lib/emacs/native-site-lisp:/home/christopher/.guix-home/profile/lib/emacs/native-site-lisp:/home/christopher/.guix-home/profile/lib/emacs/native-site-lisp
  value of $LANG: en_US.utf8
  locale-coding-system: utf-8-unix

Major mode: ELisp/d

Minor modes in effect:
  override-global-mode: t
  ready-player-mode: t
  repeat-mode: t
  pdf-occur-global-minor-mode: t
  engine-mode: t
  rcirc-track-minor-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  server-mode: t
  helm-mode: t
  helm-minibuffer-history-mode: t
  winner-mode: t
  minibuffer-depth-indicate-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  column-number-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/christopher/.emacs.d/elpa/helm-4.0.4/helm-packages hides /home/christopher/.emacs.d/elpa/helm-core-4.0.4/helm-packages
/home/christopher/.emacs.d/elpa/helm-4.0.4/helm-x-icons hides /home/christopher/.emacs.d/elpa/helm-core-4.0.4/helm-x-icons
/home/christopher/.emacs.d/elpa/magit-4.3.6/magit-dired hides /home/christopher/.emacs.d/elpa/magit-section-4.3.6/magit-dired
/home/christopher/.emacs.d/elpa/magit-4.3.6/magit-autorevert hides /home/christopher/.emacs.d/elpa/magit-section-4.3.6/magit-autorevert
/home/christopher/.emacs.d/elpa/transient-0.9.2/transient hides /home/christopher/local/share/emacs/30.1.90/lisp/transient

Features:
(shadow emacsbug calc-cplx gnus-kill vc-hg vc-bzr tramp-cmds canlock tmm
apropos calc-prog calc-undo gnus-fun org-attach gnus-bookmark
helm-external helm-net ffap rmailsum rmail dired-aux image-file
image-converter shr-color color flow-fill org-capture org-clock
mailalias smtpmail dabbrev sort smiley textsec uni-scripts idna-mapping
ucs-normalize uni-confusable textsec-check gnus-bcklg nndoc gnus-dup
calc-lang calccomp calc-arith calc-aent shortdoc comp-common calc-alg
calc-ext calc-misc calc-menu cal-move org-duration view cal-china lunar
solar cal-dst cal-bahai cal-islam cal-hebrew holidays holiday-loaddefs
diary-lib diary-loaddefs cal-iso oc-basic ol-eww eww url-queue ol-rmail
ol-mhe ol-irc ol-info ol-gnus nnselect ol-docview doc-view ol-bibtex
bibtex ol-bbdb ol-w3m ol-doi org-link-doi org-agenda org-element
org-persist org-id org-element-ast inline avl-tree org-refile net-utils
em-xtra em-unix em-tramp em-term term ehelp em-smart em-script em-prompt
em-pred em-ls em-hist em-glob em-extpipe em-elecslash em-cmpl em-dirs
em-basic em-banner em-alias esh-mode esh-var eshell esh-cmd cl-print
tabify cus-start help-fns radix-tree vc-git vc-dispatcher tramp-cache
tramp-sh misearch multi-isearch mule-util gnus-cite bbdb-message
mail-extr flyspell ispell face-remap gnus-async gnus-ml disp-table qp
mm-archive nndraft nnmh nnatom nnfeed nnrss mm-url nnfolder utf-7
bbdb-gnus bbdb-mua bbdb-com network-stream gnus-agent gnus-srvr
gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view
mml-smime smime dig nntp gnus-cache tramp-archive tramp-gvfs
helm-command helm-elisp helm-eval edebug debug backtrace helm-info socks
gnutls elpher use-package-bind-key bind-key gemini-mode time-stamp vundo
mastodon mastodon-transient tp mastodon-search mastodon-widget
mastodon-tl url-cache mastodon-toot facemenu mastodon-iso persist
mastodon-http math-preview s dash calc calc-loaddefs calc-macs
ready-player repeat transducers p-search-x-pdfinfo
p-search-x-package-list p-search-x-info p-search-x-filesplit
p-search-x-elisp p-search-x-denote p-search-x-bibtex p-search
p-search-query p-search-transient project heap generator cl debbugs-gnu
debbugs soap-client url-http url-auth url-gw nsm warnings rng-xsd rng-dt
rng-util xsd-regexp debbugs-compat bookmark+ bookmark+-key dired-x
bookmark+-1 gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group
gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail
mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win gnus
nnheader range bookmark+-bmu org ob ob-tangle ob-ref ob-lob ob-table
ob-exp org-macro org-src sh-script smie treesit executable ob-comint
org-pcomplete org-list org-footnote org-faces org-entities noutline
outline org-version ob-emacs-lisp ob-core ob-eval org-cycle org-table ol
org-fold org-fold-core org-keys oc org-loaddefs thingatpt cal-menu
calendar cal-loaddefs org-compat org-macs bookmark+-lit bookmark+-mac
uniline rect hydra lv pdf-occur ibuf-ext ibuffer ibuffer-loaddefs
tablist advice tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local find-func cedet
pdf-isearch let-alist pdf-misc pdf-tools compile cus-edit wid-edit
pdf-view magit-bookmark bookmark jka-compr pdf-cache pdf-info tq
pdf-util pdf-macs engine-mode annotate rcirc bbdb bbdb-site timezone
printing ps-print ps-print-loaddefs lpr esh-ext esh-proc esh-opt esh-io
esh-arg esh-module esh-module-loaddefs esh-util 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 magit-repos
magit-apply magit-wip magit-log which-func imenu magit-diff smerge-mode
diff diff-mode track-changes git-commit log-edit message sendmail
yank-media puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config
gnus-util text-property-search mm-decode mm-bodies mm-encode mail-parse
rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev
mail-utils gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert autorevert magit-margin magit-transient magit-process
with-editor magit-mode transient pp benchmark magit-git magit-base
magit-section cursor-sensor crm llama compat server helm-mode helm-misc
helm-files image-dired image-dired-tags image-dired-external
image-dired-util image-mode dired dired-loaddefs exif filenotify tramp
rx trampver tramp-integration files-x tramp-message tramp-compat xdg
shell pcomplete comint ansi-osc parse-time iso8601 time-date
tramp-loaddefs helm-buffers helm-x-icons helm-occur helm-tags
helm-locate helm-grep helm-regexp format-spec ansi-color helm-utils
helm-help helm-types helm helm-global-bindings helm-easymenu edmacro
kmacro helm-core easy-mmode helm-source helm-multi-match helm-lib async
cl-extra help-mode use-package-ensure use-package-core
green-phosphor-theme winner ring mb-depth display-line-numbers cus-load
finder-inf annotate-autoloads bbdb-autoloads dash-autoloads
engine-mode-autoloads helm-autoloads helm-core-autoloads async-autoloads
hydra-autoloads lv-autoloads magit-autoloads pcase
magit-section-autoloads llama-autoloads mastodon-autoloads
pdf-tools-autoloads persist-autoloads tablist-autoloads tp-autoloads
transient-autoloads vundo-autoloads wfnames-autoloads info
with-editor-autoloads package 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 icons password-cache json subr-x map byte-opt
gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-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 lcms2 dynamic-setting system-font-setting
font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process emacs)

Memory information:
((conses 16 2730305 721875) (symbols 48 60913 42)
 (strings 32 386999 79086) (string-bytes 1 34570808)
 (vectors 16 185594) (vector-slots 8 2820062 495017)
 (floats 8 2545 22138) (intervals 56 198865 23734) (buffers 992 151))

-- 
Christopher Howard
gemini://gem.librehacker.com
https://geminiprotocol.net/

בראשית ברא אלהים את השמים ואת הארץ