Estoy tratando de escribir una función que tome un encabezado y la vuelva a colocar en una ubicación específica. El documento para org-refile
es
(org-refile &optional GOTO DEFAULT-BUFFER RFLOC MSG)
y RFLOC
es
RFLOC can be a refile location obtained in a different way.
pero no tengo idea de qué sería "una forma diferente" y he estado buscando en Google durante medio día y no he visto ningún ejemplo. Conozco el archivo y sé el título del objetivo, pero no sé la sintaxis para formarlo en lo que quiere. Lo más cerca que he llegado es:
(org-refile nil #("~/Org/bookmarks.org")
que luego me solicitará el título, pero por supuesto no quiero que me lo solicite, quiero proporcionarlo.
Soy nuevo en elisp y he adivinado cada sintaxis que se me ocurre. ¿Alguien sabe cómo expresar esto?
(let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree))
probablemente no responderé a esto desde que me preguntóorg-refile
, pero el fragmento hace el trabajo bastante bien. Son los dos puntos dobles son necesarios. Lo uso todo el tiempo e incluso he creado una versión personalizada deorg-archive-subtree
para suprimir el mensaje para que no tenga cientos de ellos cuando reorganizo automáticamente todo mi archivo de organización.Respuestas:
Me he preguntado cómo debería ser RFLOC antes, pero nunca he investigado. Mirando el código fuente de la organización, debería ser una lista que consta de:
No he experimentado con el
re
elemento, pero aquí hay una función simple que invocaráorg-refile
con un RFLOC construido a partir de un ARCHIVO y TÍTULO dado:Esto abre el archivo de destino y utiliza una función de organización para encontrar la posición del título de destino, luego construye la lista RFLOC para pasar
org-refile
.fuente
Muchas gracias @glucas, he trabajado su solución en mi última. La información clave era conocer el formato del RFLOC. Experimenté con proporcionar una lista de nombre de archivo y texto de título, pero me faltaban esos otros elementos y el nulo adicional. Esto es lo que terminé con:
El documento de los
save-excursion
estados dice que seremos devueltos a la ubicación desde la que comenzamos, pero no parece funcionar de esa manera. Me deja en el destino objetivo, que podría ser apropiado para el generalrefile-to
, pero quería que moviera la línea y permaneciera donde estaba, así que guardo y restauro dentrorefile-to-bookmark
.El flujo de trabajo para el que está destinado es que empiezo con una lista de enlaces HTML que provienen de mi script para leer fuentes RSS. Originalmente hice que el script produjera archivos maildir para mu4e, pero me encontré simplemente siguiendo los enlaces a un navegador de todos modos y luego marcando los de interés, así que ahora solo genero una lista de
** [[uri][title]]
líneas. Después de seguir el enlace de emacs al navegador uzbl, en lugar de marcar (que genera la misma forma de líneas), uso este comando para mover el enlace a bookmarks.org después de configurar las etiquetas. Solo un poco más rápido ya que también uso los comandos de velocidad de la organización,t
para etiquetar yb
para este comando. ¡Estoy feliz ahora y amo aprender más elisp!fuente
re
elemento del RFLOC será ignorado, por lo que puedo decir. Se utiliza en algunas otras funciones en org.el que se ocupan de las ubicaciones de destino.refile-to
función para volver a la posición original añadiendo esto al final, después de lalet
:(switch-to-buffer (current-buffer))
. Parece que no debería hacer nada, pero funciona para mí.-push
y-goto
con eso. Parece extraño que te quedes en otro búfer y, sin embargo, considera que el búfer actual es el anterior.