From: Ihor Radchenko <yantar92@posteo.net>
To: "Tor-björn Claesson" <tclaesson@gmail.com>
Cc: Jonas Bernoulli <jonas@bernoul.li>, emacs-orgmode@gnu.org
Subject: Re: Org-cite: Replace basic follow-processor with transient menu?
Date: Mon, 11 Nov 2024 15:52:03 +0000 [thread overview]
Message-ID: <87jzd9ojj0.fsf@localhost> (raw)
In-Reply-To: <CAO0k7006goK-AfhG+3PVwhz=4QU_DMm+5edmATZpjdRHkj61Bg@mail.gmail.com>
Tor-björn Claesson <tclaesson@gmail.com> writes:
> Here is my first attempt.
> I have read the commit guidelines, but it is very possible that I have
> misunderstood or just missed something, so I'm grateful for any
> feedback!
Thanks for the patch!
See my comments below.
> * lisp/oc-basic.el (require 'transient): Pull in transient.
Technically, we still support Emacs 27, which does not have
transient. But accounting for this would be a pain and Emacs 30 is
probably going to be released some time around the beginning of the next
year. So, let's not worry about this and accept that Org 9.8-pre (next
release) no longer supports Emacs 27.
If you are a user of Emacs 27 + Org main branch, and have strong
objections, please chime in.
> +*** Menu for choosing how to follow citations
> +If invoked with a prefix of C-- C-u, following citations with
> +the org-cite-basic citation backend will no present a transient menu,
> +offering choices for how to follow citations.
I imagine C-- C-u more as a toggle - if `org-cite-basic-follow-ask' is
t, it disables the menu; enables otherwise.
> +(defcustom org-cite-basic-follow-ask nil
> + "Should `org-cite-basic' ask how to follow citations?
> +
> +When this option is nil, `org-cite-basic-follow' opens the bibliography entry.
> +Otherwise, `org-cite-basic-follow' will display a transient menu prompting the
> +user for an action. The contents of this menu can be customized in
> +`org-cite-basic-follow-actions'."
Note: our convention is to use double space between sentences.
There are also typos, but that's a minor thing I can fix myself before
merging.
> +(defcustom org-cite-basic-follow-actions
> + '[["Open"
> + ("b" "bibliography entry" (org-cite-basic-goto !citation !prefix))]]
> + "Actions in the `org-cite-basic-follow' transient menu.
> +
> +This option uses the same syntax as `transient-define-prefix', see Info node
> +`(transient)Binding Suffix and Infix Commands'. In addition, it is possible
> +to specify a function call for the COMMAND part, where !citation,
> +!prefix, and !citation-key can be used to access those values.
> +
> +If COMMAND is a lambda form, it can access the citation and prefix like this:
> +
> + (lambda (citation prefix)
> + (interactive (transient-scope))
> + ...)"
Could we make !prefix, and !citation work in lambdas? We should be able
to.
> +(transient-define-prefix org-cite-basic-follow (citation &optional prefix)
> + "Follow citation.
> +
> +This transient is invoked through `org-open-at-point'.
> +When `org-open-at-point' is invoked
It should not matter for this command where it is called from.
You can simply drop references to `org-open-at-point'
We can even make the prefix work as a standalone command. Simply using
interactive spec.
(interactive
(list (let ((obj (org-element-context)))
(pcase (org-element-type obj)
((or citation citation-reference) obj)
(_ (user-error "No citation at point"))))))
> ... with a negative prefix, +or `org-cite-basic-follow-ask' is
> non-nil, it will present +a transient menu prompting the user for an
> action. Otherwise, +it will open the bibliography entry for the
> citation at point.
> +Suffixes can not be added to this transient menu using the ordinary
> +`transient-append-suffix' or `transient-insert-suffix', instead, the
> +contents of the menu are defined in the variable
> +`org-cite-basic-follow-actions'."
Suffixes can be added. Try
(transient-append-suffix 'org-cite-basic-follow nil
'[["Other" ("t" "test" (lambda () (interactive) (message "Hello!")))]])
> +(defun org-cite-basic-follow--parse-suffix-specification (specification)
> + (pcase specification
Please, add the docstring.
> + ((and val `(,key ,desc (,fn . ,fn-args) . ,other))
> + (if (eq fn 'lambda) val
> + `(,key ,desc
> + (lambda ()
> + (interactive)
> + (let ((!citation (car (transient-scope)))
> + (!prefix (cadr (transient-scope)))
> + (!citation-key
> + (org-element-property :key (car (transient-scope)))))
`org-open-at-point' may be called with point at citation rather than
citation reference. Citation object does not have :key property.
I think that we should drop !citation-key spec and instead specify that
the command may be called with citation or citation-reference object in !citation.
> +(defun org-cite-basic-follow--setup (_)
> + (transient-parse-suffixes
Docstring here as well.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
next prev parent reply other threads:[~2024-11-11 15:51 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-14 12:36 Org-cite: Replace basic follow-processor with transient menu? Tor-björn Claesson
2024-09-15 14:36 ` Ihor Radchenko
2024-09-17 12:18 ` Tor-björn Claesson
2024-09-22 12:50 ` Ihor Radchenko
2024-09-24 10:07 ` Tor-björn Claesson
2024-10-12 17:31 ` Ihor Radchenko
2024-10-22 7:23 ` Tor-björn Claesson
2024-10-22 17:58 ` Ihor Radchenko
2024-10-24 14:18 ` Jonas Bernoulli
2024-10-24 17:32 ` Ihor Radchenko
2024-10-26 11:45 ` Jonas Bernoulli
2024-10-27 8:09 ` Ihor Radchenko
2024-10-27 9:17 ` Tor-björn Claesson
2024-10-29 4:58 ` Tor-björn Claesson
2024-10-29 18:55 ` Ihor Radchenko
2024-10-30 5:37 ` Tor-björn Claesson
2024-10-30 18:43 ` Ihor Radchenko
2024-10-31 18:55 ` Tor-björn Claesson
2024-10-31 19:05 ` Ihor Radchenko
2024-10-31 20:47 ` Tor-björn Claesson
2024-11-01 8:27 ` Tor-björn Claesson
2024-11-01 17:08 ` Ihor Radchenko
2024-11-02 19:04 ` Tor-björn Claesson
2024-11-02 19:21 ` Ihor Radchenko
2024-11-02 21:37 ` Tor-björn Claesson
2024-11-03 7:40 ` Ihor Radchenko
2024-11-05 10:07 ` Tor-björn Claesson
2024-11-09 14:08 ` Ihor Radchenko
2024-11-10 16:33 ` Tor-björn Claesson
2024-11-10 16:41 ` Ihor Radchenko
2024-11-11 10:03 ` Tor-björn Claesson
2024-11-11 15:52 ` Ihor Radchenko [this message]
2024-11-12 9:26 ` Tor-björn Claesson
2024-11-12 18:03 ` Ihor Radchenko
[not found] ` <CAO0k703a5SCv4Eaogjs-14zgmTi-pK5qqG=8VzB8+7h-kcC8yg@mail.gmail.com>
[not found] ` <87wmh8s358.fsf@localhost>
[not found] ` <87y11nwp9z.fsf@gmail.com>
2024-11-17 9:30 ` Fwd: " Tor-björn Claesson
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.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87jzd9ojj0.fsf@localhost \
--to=yantar92@posteo.net \
--cc=emacs-orgmode@gnu.org \
--cc=jonas@bernoul.li \
--cc=tclaesson@gmail.com \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
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).