~bzg/emacsfr

1

Re: org-capture headline

Details
Message ID
<8735frgvlm.fsf@gnu.re>
DKIM signature
pass
Download raw message
Merci beaucoup,

je continue d'apprendre ;-)


Le dim. 26 juin 2022 à 15:21, Edgar Vincent <e-v@posteo.net> à écrit:

> Matthias David <darkbuffalo@gnu.re> writes:
>
>> ,—-
>> | (defun add-org-capture-templates (capture-templates)
>> | 	“Add capture from CAPTURE-TEMPLATES.”
>> |   (setq org-capture-templates
>> | 				(append org-capture-templates
>> | 								capture-templates)))
>> |
>> | (defun capt-f ()
>> | 	“Define capture file.”
>> | 	(expand-file-name “notes.org” org-verse-directory))
>> |
>> | (add-org-capture-templates
>> |  (doct ’((“mon groupe de capture” :keys “v”
>> | 					:file capt-f
>> | 					:headline (with-current-buffer (org-capture-get :original-buffer) mavariable)
>> | 					:type entry
>> | 					:children ((“ma capture” :keys “n”
>> | 											:template (“* %?”)))
>> | 					))))
>> `—-
>>
>> je testé comme ceci :
>>
>> ,—-
>> | (defun add-org-capture-templates (capture-templates)
>> | 	“Add capture from CAPTURE-TEMPLATES.”
>> |   (setq org-capture-templates
>> | 				(append org-capture-templates
>> | 								capture-templates)))
>> |
>> | (defun capt-f ()
>> | 	“Define capture file.”
>> | 	(expand-file-name “notes.org” org-verse-directory))
>> |
>> | (defvar ma/variable “mavariable”)
>> |
>> | (add-org-capture-templates
>> |  (doct ’((“mon groupe de capture” :keys “v”
>> | 					:file capt-f
>> | 					:headline ,ma/variable
>> | 					:type entry
>> | 					:children ((“ma capture” :keys “n”
>> | 											:template (“* %?”)))
>> | 					))))
>> `—-
>
> NB : ce message, contrairement au précédent, est écrit avec la syntaxe d’org-mode (orgdown ?).
>
> Justement, dans ton exemple, la liste qui est envoyée comme argument à `(doct)' est
> précédée de `'' plutôt que de ``'.
>
> Comme ceci, cela fonctionne :
>
> ┌────
> │ ;; DEBUG start
> │ (setq org-capture-templates nil)
> │ (setq org-verse-directory "~")
> │ (makunbound 'ma/variable)
> │ (shell-command "touch ~/notes.org")
> │ ;; DEBUG end
> │ 
> │ (defun add-org-capture-templates (capture-templates)
> │    "Add capture from CAPTURE-TEMPLATES."
> │    (setq org-capture-templates
> │                (append org-capture-templates
> │                                capture-templates)))
> │ 
> │  (defun capt-f ()
> │    "Return capture file."
> │    (expand-file-name "notes.org" org-verse-directory))
> │ 
> │  (defvar ma/variable "mavariable")
> │ 
> │  (add-org-capture-templates
> │   (doct `(("mon groupe de capture" :keys "v"
> │                    :file capt-f
> │                    :headline ,ma/variable
> │                    :type entry
> │                    :children (("ma capture" :keys "n"
> │                                            :template ("* %?")))))))
> └────

en effet ça fonctionne
>
> Dans ton premier exemple :
>
> ┌────
> │ (add-org-capture-templates
> │  (doct '(("mon groupe de capture" :keys "v"
> │           :file capt-f
> │           :headline (with-current-buffer (org-capture-get :original-buffer) mavariable)
> │           :type entry
> │           :children (("ma capture" :keys "n"
> │                       template ("* %?")))
> │           ))))
> └────
>
> D’après la documentation de `doct', si `:file' peut prendre comme
> valeur le symbole d’une fonction appelée sans argument - ici `capt-f'
> -, ce n’est pas le cas de `:headline' (dont la fonction - en
> l’occurrence une macro - associée est ici appelée avec un argument).

je comprend mieux pense que je vais lâcher DOCT et lire les manuels!

> Par ailleurs, en le précédent d’une virgule (et en faisant précéder la
> liste qui le contient de ``', le `(with-current-buffer ...)' sera
> évalué au moment où `add-org-capture-templates' sera appelé, ce qui,
> je l’imagine, n’est pas ce que tu cherches à faire.

Du coup si je  souhaite que ce soit évalué au moment  de la capture il
me faut les enlever ?

> Par ailleurs, je ne comprends pas bien ce que tu veux faire avec `mavariable'. Est-ce une variable `buffer-local' ?

oui

>
> Je ne connaissais pas `doct' avant de lire ton message, mais si c’est le cas, peut-être peux-tu essayer quelque chose comme ceci :
>
> ┌────
> │ (defun my/find-capture-headline ()
> │   (let* ((buf (org-capture-get :original-buffer))
> │          (mavariable-local (buffer-local-value 'mavariable buf)))
> │     (org-find-exact-headline-in-buffer mavariable-local buf t)))
> │ 
> │ (add-org-capture-templates
> │  (doct `(("mon groupe de capture" :keys "v"
> │           :file capt-f
> │           :function  my/find-capture-headline
> │           :type entry
> │           :children (("ma capture" :keys "n"
> │                       template ("* %?")))))))
> └────
>
> Attention, je n’ai pas testé ce code, donc je n’ai aucune idée de sa qualité ^^
> Dans mon exemple, `my/find-capture-headline' sera appelé au moment de la capture plutôt qu’au moment où ses « templates » sont définies - ce qui, j’imagine - est ce que tu cherches à obtenir.
>
> En aparté, y a-t-il une différence entre un `heading' et un `headline' ? J’ai l’impression que les deux termes sont utilisés de façon interchangeable, mais peut-être me trompé-je.
>
> EV
>
> PS : J’espère que l’envoi a fonctionné cette fois. Je vous prie de m’excuser pour le spam.


Super merci beaucoup 
je vais tester 

--

Cordialement.

*Matthias DAVID*

Github: DarkBuffalo<https://github.com/DarkBuffalo>
web   : gnu.re

\_
‘)‘-,~    use orgmode <orgmode.org>
/< <\

Re: org-capture headline

Details
Message ID
<8735frfg30.fsf@posteo.net>
In-Reply-To
<8735frgvlm.fsf@gnu.re> (view parent)
DKIM signature
pass
Download raw message
> Merci beaucoup,
>
> je continue d’apprendre ;-)
>

Je t’en prie. Je tiens à préciser que je suis moi-même un (éternel) débutant et parle donc sous le contrôle des plus expérimentés.

>> Par ailleurs, en le précédent d’une virgule (et en faisant précéder la
>> liste qui le contient de ``’, le `(with-current-buffer …)’ sera
>> évalué au moment où `add-org-capture-templates’ sera appelé, ce qui,
>> je l’imagine, n’est pas ce que tu cherches à faire.
>
> Du coup si je  souhaite que ce soit évalué au moment  de la capture il
> me faut les enlever ?
>

Non, il faut faire appel à `:function', comme je le fais dans ma proposition.
Dans le cas où `:file' est spécifié, comme c’est le cas ici, ce mot-clé (keyword)
permet de renseigner une fonction qui renvoie la position du curseur dans le fichier
cible correspondant à l’endoit où tu souhaites que la capture soit ajoutée.

Je me rends compte, d’ailleurs, en écrivant cela, que je me suis probablement trompé dans
la fonction `my/find-capture-headline', puisqu’en l’état, elle retourne la position à laquelle
est placé le “headline” en question ; peut-être faut-il sauter une ligne afin que ta capture
apparaisse en-dessous de lui plutôt qu’avant - voire à la fin du heading s’il contient déjà du texte.
Mais ça devrait être trivial à corriger :)

Avec `:function', la fonction est évaluée au moment de la capture. Si on ne fait pas cela,
elle serait évaluée au moment de la définition de tes « templates » de capture… donc une
seule fois. Ce qui n’est pas ce que tu souhaites, étant donné que ton buffer cible change
(j’imagine).

EV
Reply to thread Export thread (mbox)