[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Simple and fast way to access interactive functions associated with
From: |
Eduardo Ochs |
Subject: |
Re: Simple and fast way to access interactive functions associated with a package |
Date: |
Mon, 15 Aug 2022 21:20:07 -0300 |
On Mon, 15 Aug 2022 at 18:40, uzibalqa via Users list for the GNU
Emacs text editor <help-gnu-emacs@gnu.org> wrote:
>
> I am using M-x protoc to show me the interactive functions provided by the
> package protoc. Is it possible
>
> to have a shortcut for displaying protoc related functions without having to
> write protoc TAB after calling M-x?
>
> For instance, the following fails
>
> (global-set-key (kbd "H-x") (kbd "M-x protoc"))
>
> As I understand, there exists no association between functions (or variables)
> and the packages they were defined in,
>
> nor are packages even first–class objects. There is just the global
> environment and whatever functions (and variables)
>
> that have been defined therein.
>
> By convention one names the functions and variables defined in a package with
> a prefix that contains or is at least
>
> similar to the package name. Perhaps one could manage the list of known
> symbols using mapatoms, searching for
>
> those that are fboundp and have the prefix one are looking for.
>
> But I do not know how an actual implementation could look like. Or whether it
> is a good plan.
Hi Uzibalqa,
are you looking for hints on how to write these functions yourself?
If yes, then:
1. You can define something like this:
(global-set-key (kbd "H-x")
(lambda () (interactive (insert "protoc-"))))
and then type `M-x H-x' to get the effect of `M-x protoc-';
2. Hyperbole seems to have a way of simulating keypresses that is
much better - for some value of "much better", of course - than
this:
(execute-kbd-macro (read-kbd-macro "M-x protoc-"))
I _guess_ that a Hyperbole button like {M-x protoc-} may do what
you need - so we only need someone who knows how call the innards
of Hyperbole from Lisp, and who can show us how to write an elisp
function that would behave as if the user had typed `M-x protoc-'.
All my attempts to learn how the inner parts of Hyperbole work
have failed VERY miserably, so I'm burnt out and I can't help you
with that, but I would love to see a solution.
3. Try to pretty-print the results of:
(apropos-internal "^protoc-.*$" 'commandp)
(mapcar 'car load-history)
(assoc (symbol-file 'find-file 'defun) load-history)
Eev has some functions to inspect the global obarray that are
based on the three sexps above, but most people consider eev too
weird.
Cheers,
Eduardo Ochs
http://angg.twu.net/#eev