unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
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)))



  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).