es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agregue una función decoradora a org-capture-template.

Escribí una plantilla de org-capture-templates que agrega entradas a encabezados apropiados de la siguiente manera:

  • Plan
  • Writing

Las org-capture-templates son:

(setq org-capture-templates
‘(( “p” “Plan” entry
(file+function “~/Documents/OrgMode/ORG/Master/todo.today.org”
(my-org-goto-last-headline “** Plan”))
“* TODO %i%?”)
( “w” “Writing” entry
(file+function “~/Documents/OrgMode/ORG/Master/todo.today.org”
(my-org-goto-last-headline “** Writing”))
“* %i%? \n%T”)))

my-org-goto-last-headline se define como un decorador:

(defun my-org-goto-last-headline (heading)
(defun nested ()
“Mueve el punto al último encabezado en el archivo que coincida con ‘** Encabezado’.”
(end-of-buffer)
(re-search-backward heading))
`nested)

Además, establezco lexical-binding: t

Desafortunadamente, se informa de errores como:

org-capture-set-target-location: Función no válida: (my-org-goto-last-headline “** Plan”)

¿Cómo puedo aplicar un decorador en una org-capture-template?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para aplicar un decorador en una org-capture-template, necesitas envolver la función del decorador dentro de una función lambda. Esto se debe a que org-capture-template requiere una función como argumento, y los decoradores devuelven funciones. Por lo tanto, en el caso de la función my-org-goto-last-headline, debes modificar el código de org-capture-templates de la siguiente manera:

    (setq org-capture-templates
          `(("p" "Plan" entry
             (file+function "~/Documents/OrgMode/ORG/Master/todo.today.org"
                (lambda () (funcall ,(my-org-goto-last-headline ".*\\*\\* Plan"))))
             "* TODO %i%?")
            ("w" "Writing" entry
             (file+function "~/Documents/OrgMode/ORG/Master/todo.today.org"
                (lambda () (funcall ,(my-org-goto-last-headline ".*\\*\\* Writing"))))
             "* %i%? \n%T")))
    

    Observa la envoltura adicional de la función lambda alrededor de la llamada a my-org-goto-last-headline, que devuelve una función. La llamada modificada a la función en org-capture-templates utiliza funcall para llamar a la función devuelta por my-org-goto-last-headline. Esto debería resolver los errores que estabas viendo.

Comments are closed.