Una interfaz de búsqueda para archivos en modo org.

7

Yo uso el modo org para tomar notas. Actualmente tengo un directorio raíz, por ejemplo, "Notas", y hay varios subdirectorios dentro de él, por ejemplo, "Linux", "Programación", etc. Las notas tomadas usando el modo org se almacenan en esos subdirectorios.

Me preguntaba si hay un conjunto de configuraciones disponibles para poder buscar estas notas (que son todos archivos de modo org) muy rápidamente. Sé que hay destreza , pero no está diseñado para archivos de modo org. En realidad también probé helm-projectile pero está lejos de ser satisfactorio.

Para ser más precisos, lo que quiero lograr es que puedo buscar estos archivos usando etiquetas, titulares u otras características relacionadas con el modo de organización, tal vez usando algunas sintaxis predefinidas. Y si es posible, preferiría algo como timón. Si no existe tal extensión, ¿valdrá la pena implementarla? Pensé que deft + helm-projectile podría ser un buen punto de partida.

ACTUALIZACIÓN: probé ambos métodos, las variables locales de directorio (como sugiere @itsjeyd en la respuesta) y los comandos personalizados de org-agenda, y encontré que el último parecía más conveniente. Así que aquí está mi configuración:

(setq org-agenda-custom-commands
  '(("n" . "Search in notes")
    ("nt" "Note tags search" tags ""
     ((org-agenda-files (file-expand-wildcards "path/to/Notes/*/*.org")))) 
    ("ns" "Note full text search" search ""
     ((org-agenda-files (file-expand-wildcards "path/to/Notes/*/*.org"))))))
lindo puente
fuente
¿Lo ha intentado ?: M-x org-search-viewAquí está el enlace a la documentación: orgmode.org/manual/Search-view.html
lawlist
Afaik puede configurar Deft para usar archivos de organización de forma predeterminada con (setq deft-extension "org")y (setq deft-text-mode 'org-mode).
Mutbuerger
@ mutbuerger La configuración es la que uso actualmente. Pero Deft en sí no tiene una función de búsqueda relacionada con la organización
cutejumper

Respuestas:

7

Org en sí proporciona una facilidad para filtrar / buscar información almacenada en .orgarchivos de varias maneras. Se llama la "Agenda" . El org-modemanual proporciona información extensa sobre cómo usarlo (consulte el enlace anterior o hágalo C-h i m Org Mode RETdesde Emacs y vaya al capítulo "Vistas de agenda"), por lo que no tiene sentido repetir toda esta información aquí. El texto introductorio del manual resume lo que puede hacer con él (énfasis mío):

Org puede seleccionar elementos en función de diversos criterios y mostrarlos en un búfer separado. Se proporcionan siete tipos de vistas diferentes:

  • una agenda que es como un calendario y muestra información para fechas específicas,
  • una lista TODO que cubre todos los elementos de acción inacabados,
  • una vista de coincidencia, mostrando titulares basados ​​en las etiquetas, propiedades y TODO estado asociado con ellos,
  • una vista de línea de tiempo que muestra todos los eventos en un solo archivo Org, en vista ordenada por tiempo,
  • una vista de búsqueda de texto que muestra todas las entradas de varios archivos que contienen palabras clave específicas ,
  • una vista de proyectos atascados que muestra proyectos que actualmente no se mueven, y
  • vistas personalizadas que son búsquedas especiales y combinaciones de diferentes vistas.

Lo único que debe hacer para comenzar a usar la agenda para buscar sus notas es agregar los archivos que desea buscar org-agenda-files:

La información que se mostrará normalmente se recopila de todos los archivos de agenda, los archivos enumerados en la variable org-agenda-files. Si un directorio es parte de esta lista, todos los archivos con la extensión .orgen este directorio serán parte de la lista.

Entonces, en su caso, querrá agregar algo como esto a su archivo init:

(setq org-agenda-files '("/path/to/Notes/Linux" "/path/to/Notes/Programming"))

Para muchos ejemplos y consejos prácticos, también le recomiendo que consulte el artículo sobre Búsqueda avanzada en Worg .

[ACTUALIZACIÓN] Limitar la búsqueda a conjuntos de archivos específicos

Como se mencionó en los comentarios, OP quiere poder restringir las búsquedas a conjuntos específicos de archivos. En términos técnicos, esto significa establecer org-agenda-filesvalores diferentes según el contexto. Esto se puede lograr utilizando variables de directorio local :

La forma habitual de definir variables locales de directorio es colocar un archivo nombrado .dir-locals.elen un directorio. Siempre que Emacs visite cualquier archivo en ese directorio o cualquiera de sus subdirectorios, aplicará las variables locales de directorio especificadas en .dir-locals.el, [...].

Por ejemplo, digamos que

  • mientras visita archivos almacenados Notes/Linux, desea utilizar la agenda para buscar solo .orgarchivos almacenados en Notes/Linux.

  • mientras visita archivos almacenados Notes/Programming, desea usar la agenda para buscar solo .orgarchivos almacenados en Notes/Programming.

Esto es lo que debe hacer para habilitar este comportamiento:

  1. Agregue un .dir-locals.elarchivo con el siguiente contenido a ambos Notes/Linuxy Notes/Programming:

    ((nil . ((org-agenda-files . (".")))))

    Esto establece la lista de org-agenda-filesincluir todos los archivos en el directorio actual.

  2. Agregue el siguiente código a su archivo init:

    (add-hook 'org-agenda-mode-hook #'hack-dir-local-variables-non-file-buffer)

    Este paso es necesario para garantizar que *Org Agenda*(un búfer que no sea de archivo ) respete su configuración local de directorio org-agenda-files.

La próxima vez que visite un archivo almacenado en Notes/Linuxo Notes/Programming, Emacs le preguntará si desea aplicar la configuración almacenada en .dir-locals.el. Presione !para decirle a Emacs que aplique la configuración y márquela como segura para futuras sesiones (no se le volverán a solicitar los archivos en el mismo directorio).

itsjeyd
fuente
Tal vez no indiqué claramente en la pregunta ... He usado la agenda, pero el problema es que tengo otros archivos de organización que muestran mis horarios y TODO para mi agenda, y no quiero que mis notas estropeen la agenda ver. Quizás lo que quiero es algo así como la función de búsqueda en Evernote, ya que quiero usar Emacs como mi aplicación para tomar notas. ¿Conoces a Deft? Tiene una buena interfaz de búsqueda pero no está relacionada con la organización
cutejumper
@cutejumper No estoy seguro de seguir. ¿Qué quiere decir con "desordenar la vista de agenda"? Si los titulares en su Linux / Programación / etc. las notas no tienen TODOestados asociados con ellas, no deberían aparecer en su agenda cuando enumera sus elementos TODO.
itsjeyd
Bueno, de esta manera podría ser más claro: en realidad quiero tener conjuntos separados de archivos de agenda. Tengo entendido que la agenda del modo org actual es más como un conjunto "global", mientras que quiero una interfaz de búsqueda para cierto "proyecto" (algo así como un proyectil), de modo que cuando hago la búsqueda solo veo el contenidos relevantes en un "proyecto". ¿Debo pasar por alto alguna funcionalidad que la agenda realmente ofrece?
cutejumper
Puede establecer localmente org-agenda-filessolo los archivos (o directorio) que le interesen dentro de una plantilla de agenda o usar C-c a <para restringir la búsqueda de agenda solo al archivo actual.
erikstokes
1
@cutejumper No creo que el búfer de agenda admita este caso de uso fuera de la caja. Sin embargo, el comando que @BrianZ menciona en su respuesta ( helm-org-agenda-files-headings) hace exactamente lo que desea (para los encabezados). Tenga en cuenta que necesitará configurar variables locales de directorio para poder ejecutar helm-org-agenda-files-headingsen conjuntos de archivos específicos.
itsjeyd
2

Hay algunas funciones relacionadas con la organización en helm. Creo que helm-org-agenda-files-headingses básicamente lo que tienes en mente. Si aún no está disponible para usted en emacs, intente quitar helm-org.el de Github .

Brian Z
fuente