Salut à tous,
Je me pose la question suivante:
- est il possible de placer une variable pour nourrir le headline dans
org-capture-template ?
,----
| ("t" "Task [GTD]"
| entry
| (file+headline "~/org/gtd/gtd.org" "Tasks") ;; remplacer "Tasks" par une variable
| "* TODO %i%? \n %U")
`----
J'ai essayé, mais en vain.
L'un de vous connaît-il une solution ?
--
Cordialement.
*Matthias DAVID*
Github: DarkBuffalo<https://github.com/DarkBuffalo>
web : gnu.re
\_
‘)‘-,~ use orgmode <orgmode.org>
/< <\
Hello,
Matthias David <darkbuffalo@gnu.re> writes:
> - est il possible de placer une variable pour nourrir le headline dans> org-capture-template ?
Comme ça ?
(setq org-capture-templates
`(("c" "Capture template" entry (file+headline "~/notes.org" "Ma capture")
,(concat "* TODO " user-mail-address))))
--
Bastien
Ou, dans ton cas, sur le modèle de l'exemple de Bastien, tout simplement :
(setq org-capture-templates
`(("t" "Task [GTD]"
entry
(file+headline "~/org/gtd/gtd.org" ,ma/variable)
"* TODO %i%? \n %U")))
Le "`" précède une liste qui ne sera pas évaluée, tout comme "'", à la
différence que tout élément de ladite liste qui est précédé par une
virgule sera, lui, évalué - dans ce cas "ma/variable".
Bastien <bzg@gnu.org> writes:
> Hello,>> Matthias David <darkbuffalo@gnu.re> writes:>>> - est il possible de placer une variable pour nourrir le headline dans>> org-capture-template ?>> Comme ça ?>> (setq org-capture-templates> `(("c" "Capture template" entry (file+headline "~/notes.org" "Ma capture")> ,(concat "* TODO " user-mail-address))))
Le dim. 26 juin 2022 à 10:55, Edgar Vincent <e-v@posteo.net> à écrit:
> Ou, dans ton cas, sur le modèle de l'exemple de Bastien, tout simplement :
je parle en effet de cet exemple:
> (setq org-capture-templates> `(("t" "Task [GTD]"> entry> (file+headline "~/org/gtd/gtd.org" ,ma/variable)> "* TODO %i%? \n %U")))
Quand je teste ceci j'ai l'erreur suivante : `Wrong type argument: (stringp)'
alors que l'exemple de bastien ci bas fonctionne (insertion de la
variable dans le template)
il est même possible d'utiliser cette solution:
,----
| (setq org-capture-templates
| `(("t" "Task [GTD]"
| entry
| (file+headline "~/org/gtd/gtd.org" "Task")
| "* TODO %(with-current-buffer (org-capture-get :original-buffer) mavariable)")))
`----
mais des que je remplace le headline par une variable j'ai une erreur.
> Le "`" précède une liste qui ne sera pas évaluée, tout comme "'", à la> différence que tout élément de ladite liste qui est précédé par une> virgule sera, lui, évalué - dans ce cas "ma/variable".>> Bastien <bzg@gnu.org> writes:>>> Hello,>>>> Matthias David <darkbuffalo@gnu.re> writes:>>>>> - est il possible de placer une variable pour nourrir le headline dans>>> org-capture-template ?>>>> Comme ça ?>>>> (setq org-capture-templates>> `(("c" "Capture template" entry (file+headline "~/notes.org" "Ma capture")>> ,(concat "* TODO " user-mail-address))))
--
Cordialement.
*Matthias DAVID*
Github: DarkBuffalo<https://github.com/DarkBuffalo>
web : gnu.re
\_
‘)‘-,~ use orgmode <orgmode.org>
/< <\
C'est curieux, l'exemple fonctionne chez moi.
Est-ce que `ma/variable` est une chaîne de caractères ?
Ici, avec
(setq ma/variable "Tasks")
(stringp ma/variable) ; => t
(setq org-capture-templates
`(("t" "Task [GTD]"
entry
(file+headline "~/org/gtd/gtd.org" ,ma/variable)
"* TODO %i%? \n %U")))
cela fonctionne : mon TODO est inséré dans "~org/gtd/gtd.org" sous le
headline (terribles, tous ces anglicismes !) "Tasks".
Matthias David <darkbuffalo@gnu.re> writes:
> je parle en effet de cet exemple:>>> (setq org-capture-templates>> `(("t" "Task [GTD]">> entry>> (file+headline "~/org/gtd/gtd.org" ,ma/variable)>> "* TODO %i%? \n %U")))>> Quand je teste ceci j'ai l'erreur suivante : `Wrong type argument: (stringp)'>> alors que l'exemple de bastien ci bas fonctionne (insertion de la> variable dans le template)> il est même possible d'utiliser cette solution:>> ,----> | (setq org-capture-templates> | `(("t" "Task [GTD]"> | entry> | (file+headline "~/org/gtd/gtd.org" "Task")> | "* TODO %(with-current-buffer (org-capture-get :original-buffer) mavariable)")))> `---->> mais des que je remplace le headline par une variable j'ai une erreur.>>>>> Le "`" précède une liste qui ne sera pas évaluée, tout comme "'", à la>> différence que tout élément de ladite liste qui est précédé par une>> virgule sera, lui, évalué - dans ce cas "ma/variable".>>>> Bastien <bzg@gnu.org> writes:>>>>> Hello,>>>>>> Matthias David <darkbuffalo@gnu.re> writes:>>>>>>> - est il possible de placer une variable pour nourrir le headline dans>>>> org-capture-template ?>>>>>> Comme ça ?>>>>>> (setq org-capture-templates>>> `(("c" "Capture template" entry (file+headline "~/notes.org" "Ma capture")>>> ,(concat "* TODO " user-mail-address))))
,----
| (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 ("* %?")))
| ))))
`----
dans ielm quand je fais le test suivant :
,----
| (stringp (with-current-buffer (org-capture-get :original-buffer) mavariable))
`----
le resultat est `t`
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 ("* %?")))
| ))))
`----
j'ai la même erreur.
j'ai essayer sans doct aussi.
Le dim. 26 juin 2022 à 12:24, Edgar Vincent <e-v@posteo.net> à écrit:
> C'est curieux, l'exemple fonctionne chez moi.>> Est-ce que `ma/variable` est une chaîne de caractères ?>> Ici, avec>> (setq ma/variable "Tasks")> (stringp ma/variable) ; => t> (setq org-capture-templates> `(("t" "Task [GTD]"> entry> (file+headline "~/org/gtd/gtd.org" ,ma/variable)> "* TODO %i%? \n %U")))>> cela fonctionne : mon TODO est inséré dans "~org/gtd/gtd.org" sous le> headline (terribles, tous ces anglicismes !) "Tasks".>> Matthias David <darkbuffalo@gnu.re> writes:>> je parle en effet de cet exemple:>>>>> (setq org-capture-templates>>> `(("t" "Task [GTD]">>> entry>>> (file+headline "~/org/gtd/gtd.org" ,ma/variable)>>> "* TODO %i%? \n %U")))>>>> Quand je teste ceci j'ai l'erreur suivante : `Wrong type argument: (stringp)'>>>> alors que l'exemple de bastien ci bas fonctionne (insertion de la>> variable dans le template)>> il est même possible d'utiliser cette solution:>>>> ,---->> | (setq org-capture-templates>> | `(("t" "Task [GTD]">> | entry>> | (file+headline "~/org/gtd/gtd.org" "Task")>> | "* TODO %(with-current-buffer (org-capture-get :original-buffer) mavariable)")))>> `---->>>> mais des que je remplace le headline par une variable j'ai une erreur.>>>>>>>>> Le "`" précède une liste qui ne sera pas évaluée, tout comme "'", à la>>> différence que tout élément de ladite liste qui est précédé par une>>> virgule sera, lui, évalué - dans ce cas "ma/variable".>>>>>> Bastien <bzg@gnu.org> writes:>>>>>>> Hello,>>>>>>>> Matthias David <darkbuffalo@gnu.re> writes:>>>>>>>>> - est il possible de placer une variable pour nourrir le headline dans>>>>> org-capture-template ?>>>>>>>> Comme ça ?>>>>>>>> (setq org-capture-templates>>>> `(("c" "Capture template" entry (file+headline "~/notes.org" "Ma capture")>>>> ,(concat "* TODO " user-mail-address))))
--
Cordialement.
*Matthias DAVID*
Github: DarkBuffalo<https://github.com/DarkBuffalo>
web : gnu.re
\_
‘)‘-,~ use orgmode <orgmode.org>
/< <\
Matthias David <darkbuffalo@gnu.re> writes:
> Salut [Edgar],
>
> Je ne sais pas si c'est une erreur mais il semble que tu ai envoyé un
> mail vide ;-).
>
> Le dim. 26 juin 2022 à 14:51, Edgar Vincent <e-v@posteo.net> à écrit:
>
>> --`-'-=--
Effectivement, je vous prie de m'excuser - je me bats avec ~org-msg~ et
~mu4e~ !
J'espère que, cette fois-ci, cela va fonctionner. Le message original
est ci-dessous :
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 :
#+begin_src emacs-lisp
;; 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 ("* %?")))))))
#+end_src
Dans ton premier exemple :
#+begin_src emacs-lisp
(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 ("* %?")))
))))
#+end_src
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). Par ailleurs, en le
précédent d'une virule (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.
Par ailleurs, je ne comprends pas bien ce que tu veux faire avec
~mavariable~. Est-ce une variable ~buffer-local~ ?
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 :
#+begin_src emacs-lisp
(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 ("* %?")))))))
#+end_src
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