~bzg/emacsfr

6 3

org-capture headline

Details
Message ID
<8735froixd.fsf@gnu.re>
DKIM signature
pass
Download raw message
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>
/< <\

Re: org-capture headline

Details
Message ID
<8735frzon8.fsf@bzg.fr>
In-Reply-To
<8735froixd.fsf@gnu.re> (view parent)
DKIM signature
pass
Download raw message
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

Re: org-capture headline

Details
Message ID
<87bkufbs1p.fsf@posteo.net>
In-Reply-To
<8735frzon8.fsf@bzg.fr> (view parent)
DKIM signature
pass
Download raw message
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))))

Re: org-capture headline

Details
Message ID
<87wnd3k4fz.fsf@gnu.re>
In-Reply-To
<87bkufbs1p.fsf@posteo.net> (view parent)
DKIM signature
pass
Download raw message
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>
/< <\

Re: org-capture headline

Details
Message ID
<875yknli5e.fsf@posteo.net>
In-Reply-To
<87wnd3k4fz.fsf@gnu.re> (view parent)
DKIM signature
pass
Download raw message
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))))

Re: org-capture headline

Details
Message ID
<8735fr1swl.fsf@gnu.re>
In-Reply-To
<875yknli5e.fsf@posteo.net> (view parent)
DKIM signature
pass
Download raw message
,----
| (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>
/< <\

Re: org-capture headline

Details
Message ID
<74508db9-e2e0-c53f-5fee-166b5bc1b9f0@posteo.net>
In-Reply-To
<8735fr1swl.fsf@gnu.re> (view parent)
DKIM signature
pass
Download raw message
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
Reply to thread Export thread (mbox)