Eine Suchoberfläche für Dateien im Organisationsmodus

7

Ich benutze den Org-Modus, um Notizen zu machen. Derzeit habe ich ein Stammverzeichnis, z. B. "Notizen", und darin befinden sich mehrere Unterverzeichnisse, z. B. "Linux", "Programmierung" usw. Die im Organisationsmodus erstellten Notizen werden unter diesen Unterverzeichnissen gespeichert.

Ich habe mich gefragt, ob es eine Reihe von Einstellungen gibt, damit ich diese Notizen (die alle Dateien im Organisationsmodus sind) sehr schnell durchsuchen kann. Ich weiß, dass es geschickt ist , aber es ist nicht für Dateien im Organisationsmodus konzipiert. Eigentlich habe ich auch Helmprojektil ausprobiert, aber es ist alles andere als zufriedenstellend.

Um genauer zu sein, möchte ich erreichen, dass ich diese Dateien mit Tags, Überschriften oder anderen Funktionen durchsuchen kann, die sich auf den Organisationsmodus beziehen, möglicherweise mit vordefinierten Syntaxen. Und wenn möglich, würde ich so etwas wie Helm bevorzugen. Wenn es keine solche Erweiterung gibt, lohnt es sich, eine solche Erweiterung zu implementieren? Ich dachte, Geschicklichkeit + Steuerprojektil könnte ein guter Ausgangspunkt sein.

UPDATE: Ich habe beide Methoden ausprobiert, verzeichnislokale Variablen (wie @itsjeyd in der Antwort vorschlägt) und org-Agenda-Custom-Befehle, und ich fand die letztere bequemer. Also hier ist meine Einstellung:

(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"))))))
süßer Pullover
quelle
Haben Sie es versucht?: M-x org-search-viewHier ist der Link zur Dokumentation: orgmode.org/manual/Search-view.html
lawlist
Außerdem können Sie Deft so einrichten, dass Organisationsdateien standardmäßig mit (setq deft-extension "org")und verwendet werden (setq deft-text-mode 'org-mode).
Mutbuerger
@ mutbuerger Die Einstellungen sind die, die ich derzeit verwende. Aber Deft selbst hat keine org-bezogene Suchfunktion
cutejumper

Antworten:

7

Org selbst bietet eine Möglichkeit zum Filtern / Suchen von Informationen, die in .orgDateien gespeichert sind , auf verschiedene Arten. Es heißt "Agenda" . Das org-modeHandbuch enthält ausführliche Informationen zur Verwendung (überprüfen Sie den obigen Link oder führen Sie es C-h i m Org Mode RETin Emacs aus und navigieren Sie zum Kapitel "Agenda-Ansichten"). Daher ist es nicht sinnvoll, alle diese Informationen hier zu wiederholen. Der Einführungstext aus dem Handbuch fasst zusammen, was Sie damit machen können (Hervorhebung von mir):

Org kann Elemente anhand verschiedener Kriterien auswählen und in einem separaten Puffer anzeigen. Es stehen sieben verschiedene Ansichtstypen zur Verfügung:

  • eine Agenda, die einem Kalender ähnelt und Informationen zu bestimmten Daten enthält,
  • eine TODO-Liste, die alle unvollendeten Aktionselemente abdeckt,
  • eine Übereinstimmungsansicht, in der Überschriften basierend auf den damit verbundenen Tags, Eigenschaften und dem TODO-Status angezeigt werden;
  • eine Zeitleistenansicht, die alle Ereignisse in einer einzelnen Org-Datei in einer zeitsortierten Ansicht anzeigt.
  • eine Textsuchansicht, in der alle Einträge aus mehreren Dateien angezeigt werden, die bestimmte Schlüsselwörter enthalten .
  • Eine Ansicht mit festgefahrenen Projekten zeigt Projekte an, die sich derzeit nicht bewegen
  • Benutzerdefinierte Ansichten, bei denen es sich um spezielle Suchvorgänge und Kombinationen verschiedener Ansichten handelt.

Das einzige, was Sie tun müssen, um die Agenda für die Suche in Ihren Notizen zu verwenden, ist das Hinzufügen von Dateien, zu denen Sie suchen möchten org-agenda-files:

Die anzuzeigenden Informationen werden normalerweise aus allen Agenda-Dateien gesammelt, den in der Variablen aufgeführten Dateien org-agenda-files. Wenn ein Verzeichnis Teil dieser Liste ist, werden alle Dateien mit der Erweiterung .orgin diesem Verzeichnis Teil der Liste.

In Ihrem Fall möchten Sie Ihrer Init-Datei also Folgendes hinzufügen:

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

Für viele Beispiele und praktische Ratschläge empfehle ich Ihnen auch, den Artikel über die erweiterte Suche in Worg zu lesen .

[UPDATE] Beschränken der Suche auf bestimmte Dateigruppen

Wie in den Kommentaren erwähnt, möchte OP die Suche auf bestimmte Dateigruppen beschränken können. In technischer Hinsicht bedeutet org-agenda-filesdies, je nach Kontext unterschiedliche Werte einzustellen. Dies kann mit verzeichnislokalen Variablen erreicht werden :

Die übliche Methode zum Definieren von verzeichnislokalen Variablen besteht darin, eine Datei mit dem Namen .dir-locals.elin einem Verzeichnis abzulegen. Immer wenn Emacs eine Datei in diesem Verzeichnis oder einem seiner Unterverzeichnisse besucht, werden die in .dir-locals.el[...] angegebenen verzeichnislokalen Variablen angewendet .

Nehmen wir zum Beispiel das an

  • Wenn Notes/LinuxSie in gespeicherte Dateien besuchen , möchten Sie die Agenda verwenden, um nur in .orggespeicherte Dateien zu suchen Notes/Linux.

  • Wenn Sie in gespeicherte Dateien besuchen Notes/Programming, möchten Sie die Agenda verwenden, um nur in .orggespeicherte Dateien zu suchen Notes/Programming.

Gehen Sie wie folgt vor, um dieses Verhalten zu aktivieren:

  1. Fügen Sie .dir-locals.elbeiden Notes/Linuxund eine Datei mit dem folgenden Inhalt hinzu Notes/Programming:

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

    Dadurch wird die Liste so festgelegt org-agenda-files, dass alle Dateien im aktuellen Verzeichnis enthalten sind.

  2. Fügen Sie Ihrer Init-Datei den folgenden Code hinzu:

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

    Dieser Schritt ist erforderlich, um sicherzustellen, dass *Org Agenda*(ein Nicht-Dateipuffer ) Ihre verzeichnislokalen Einstellungen für berücksichtigt org-agenda-files.

Wenn Sie das nächste Mal eine in Notes/Linuxoder gespeicherte Datei besuchen Notes/Programming, werden Sie von Emacs gefragt, ob Sie die in gespeicherten Einstellungen anwenden möchten .dir-locals.el. Klicken Sie !, um Emacs anzuweisen, die Einstellungen anzuwenden und sie für zukünftige Sitzungen als sicher zu markieren (Sie werden nicht erneut aufgefordert, Dateien im selben Verzeichnis einzugeben).

itsjeyd
quelle
Vielleicht habe ich in der Frage nicht klar angegeben ... Ich habe die Agenda verwendet, aber das Problem ist, dass ich andere Organisationsdateien habe, die meine Zeitpläne und TODOs für meine Agenda anzeigen, und ich möchte nicht, dass meine Notizen die Agenda durcheinander bringen Aussicht. Vielleicht möchte ich so etwas wie die Suchfunktion in Evernote, da ich Emacs als meine Notizanwendung verwenden möchte. Kennst du Geschicklichkeit? Es hat eine gute Suchoberfläche, ist aber nicht org-bezogen
cutejumper
@cutejumper Ich bin nicht sicher, ob ich folge. Was meinst du mit "die Agenda durcheinander bringen"? Wenn die Überschriften in Ihrem Linux / Programming / etc. Mit Notizen sind keine TODOStatus verknüpft. Sie sollten nicht in Ihrer Agenda angezeigt werden, wenn Sie Ihre TODO-Elemente auflisten.
Itsjeyd
Nun, dieser Weg könnte klarer sein: Ich möchte eigentlich separate Sätze von Agenda-Dateien haben. Mein Verständnis für die Agenda des aktuellen Organisationsmodus ist, dass es eher wie ein "globaler" Satz ist, während ich eine Suchoberfläche für ein bestimmtes "Projekt" (eine Art Projektil) möchte, so dass ich bei der Suche nur das sehe relevante Inhalte in einem "Projekt". Übersehe ich Funktionen, die die Agenda tatsächlich bietet?
cutejumper
Sie können lokal org-agenda-filesnur die Dateien (oder das Verzeichnis) festlegen, an denen Sie interessiert sind, oder eine Agenda-Vorlage verwenden C-c a <, um die Agenda-Suche nur auf die aktuelle Datei zu beschränken.
Erikstokes
1
@cutejumper Ich glaube nicht, dass der Agenda-Puffer diesen Anwendungsfall sofort unterstützt. Der in seiner Antwort ( helm-org-agenda-files-headings) erwähnte Befehl @BrianZ macht jedoch genau das, was Sie wollen (für Überschriften). Beachten Sie, dass Sie verzeichnislokale Variablen einrichten müssen, um die Ausführung helm-org-agenda-files-headingsauf bestimmten Dateigruppen zu ermöglichen.
itsjeyd
2

Es gibt einige org-bezogene Funktionen im Ruder. Ich denke, das helm-org-agenda-files-headingsist im Grunde das, was Sie vorhaben. Wenn es in Emacs noch nicht für Sie verfügbar ist, versuchen Sie, helm-org.el von Github zu entfernen .

Brian Z.
quelle