From: Yuri Khan <yuri.v.khan@gmail.com>
To: Jean Louis <bugs@gnu.support>
Cc: Help GNU Emacs <help-gnu-emacs@gnu.org>
Subject: Re: Is there way to read function invoked and its parameters?
Date: Mon, 28 Dec 2020 02:11:12 +0700 [thread overview]
Message-ID: <CAP_d_8UE_oFxTsrCVD4FVUrwwyGnBrivGHnD-4Lcd8sWtkAPqQ@mail.gmail.com> (raw)
In-Reply-To: <courier.000000005FE8CA54.00006BFB@stw1.rcdrun.com>
On Mon, 28 Dec 2020 at 00:55, Jean Louis <bugs@gnu.support> wrote:
> Would this concept be possible in Emacs Lisp:
>
> (defun my-function (arg &optional arg-1 arg-2)
> (call-other-function (this-function-called parameters-to-this-function)))
>
> Then the other function would receive something like
>
> (my-function ARGUMENTS)
>
> Purpose of this is for `tabulated-list-mode' to know how to refresh
> it. As the mode could be called by plethora of various ways. It would
> be best if I could detect how function was called, with which
> parameters and record the fact so that by the key the same function
> may be called again.
Firstly, ‘tabulated-list-mode’ should probably never be “called” as
such. Instead, modes should be derived from it. (In OOP terms,
‘tabulated-list-mode’ should be treated as an abstract base class.)
‘tabulated-list-mode’ is derived from ‘special-mode’ which binds the
‘g’ key to ‘revert-buffer’. The behavior of ‘revert-buffer’ is
customized by setting ‘revert-buffer-function’ locally.
‘tabulated-list-mode’ sets ‘revert-buffer-function’ to
‘tabulated-list-revert’. The behavior of ‘tabulated-list-revert’ is
customized by adding to ‘tabulated-list-revert-hook’.
> Problem is not when there is one function or one report, I have
> dynamic reports and varieties of reports invoked by variety of
> functions and arguments.
>
> Or maybe there is other way of doing that?
>
> Should I just use local variables to remember the function and its
> arguments so that I may invoke it from the report page?
That is the way, I think.
Be aware that setting a major mode kills all local variables. So you
might want to structure your report mode and functions like this:
(defvar-local my-report--context …
"…documentation…")
(defun my-report--revert ()
"…documentation…"
(setq tabulated-list-entries …something computed from
my-report--context…))
(define-derived-mode my-report-mode tabulated-list-mode "…"
"…documentation…"
(add-hook 'tabulated-list-revert #'my-report--revert))
(defun my-report (…args…)
"…documentation…"
(with-current-buffer (…generate a buffer name…)
(my-report-mode)
(setq-local my-report--context …some context built from args…)
(revert-buffer)))
next prev parent reply other threads:[~2020-12-27 19:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-27 17:54 Is there way to read function invoked and its parameters? Jean Louis
2020-12-27 18:04 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-27 19:11 ` Yuri Khan [this message]
2020-12-28 7:07 ` Jean Louis
2020-12-28 9:04 ` Yuri Khan
[not found] <<courier.000000005FE8CA54.00006BFB@stw1.rcdrun.com>
2020-12-27 18:20 ` Drew Adams
2020-12-27 18:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-28 6:57 ` Jean Louis
2020-12-28 16:40 ` Drew Adams
2020-12-28 19:58 ` Jean Louis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAP_d_8UE_oFxTsrCVD4FVUrwwyGnBrivGHnD-4Lcd8sWtkAPqQ@mail.gmail.com \
--to=yuri.v.khan@gmail.com \
--cc=bugs@gnu.support \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).