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>
/< <\
> 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