image image


Worknote: Org-mode und RubyFrontier – wie es geht

image

Nachdem nun der »neue« Aquamacs 3.0 (Preview) mit einem aktuellen Org-mode kommt und von mir erfolgreich getestet und für hinreichend zuverlässig befunden wurde, bin ich Euch die Erklärung schuldig, was ich alles angestellt habe, um den Org-mode mit RubyFrontier zu verheiraten.

Hier habe ich ja schon gezeigt, was ich in die ~/Library/Preferences/Aquamacs Emacs/Preferences.el, die beim Aquamacs die .emacs.el ersetzt, eingetragen habe, um dem Org-mode die Publikation bekannt zu machen:

(setq org-publish-project-alist
      '(

  ("rforg-sources"
          ;; Path to your org files.
          :base-directory "~/Dropbox/documents/rforg/"
          :base-extension "org"

          ;; Path to your RubyFrontier project.
          :publishing-directory "~/Dropbox/myRubyFrontierSites/rforg/"
          :recursive t
          :publishing-function org-publish-org-to-html
          :headline-levels 4 
          :html-extension "txt"
          :body-only t ;; Only export section between <body> </body>
    )


    ("rforg-static"
          :base-directory "~/Dropbox/documents/rforg/"
          :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|php"
          :publishing-directory "~/Dropbox/myRubyFrontierSites/rforg/"
          :recursive t
          :publishing-function org-publish-attachment)

    ("rforg" :components ("rforg-sources" "rforg-static"))

))

Man muß kein Lisp-Spezialist sein (der ich auch wahrlich nicht bin), um zu erkennen, was da eigentlich passiert: Das Publish Project heißt rforg und besteht aus den zwei Komponenten rforg-sources und rforg-static. Die erste Komponenten gehört zu den eigentlichen Org-Dateien, die herausgeschrieben werden sollen, die zweite Komponente benennt die Hilfsdateien, wie Bilder, JavaScript- und CSS-Dateien etc., die ja auch in die passenden Verzeichnisse meines RubyFronter-Projekts hereingeschrieben werden müssen.

Schauen wir uns daher als erstes die rforg-sources an: Im :base-directory mache ich Org bekannt, wo die Org-Files mit der :base-extension »org« (die Angabe erfolgt ohne führenden ».«) liegen. Bis meine eigene ownCloud läuft, bevorzuge ich dafür (noch) die Dropbox, die die Synchronisation zwischen meinen diversen Rechner regelt. Da ich dort nur Dateien liegen habe, die sowieso zur Publikation vorgesehen sind, sehe ich darin auch kein großes (Sicherheits-) Problem.

Auch das RubyFrontier Projekt habe ich in der Dropbox abgelegt (:publishing-directory) und es soll rekursiv auch alle Unterverzeichnisse berücksichtigen (:recursive t). Herausgeschrieben werden sollen HTML-Dateien (:publishing-function org-publish-org-to-html) und mehr als vier Überschriften-Ebenen nutze ich normalerweise nicht (:headline-levels 4). Da RubyFrontier als Quelldateien Dateien mit der Endung ».txt« erwartet, bitte ich Org, diese herauszuschreiben (:html-extension "txt", wieder ohne den führenden Punkt).

Und da ich RubyFrontier als Template-Engine nutze, benötige ich von Org nur das, was zwischen dem <body>- und dem </body>-Tags steht: :body-only t.

Die Komponenten rforg-static teilt Org nun mit, wie sie mit anderen Dateien zu verfahren hat. Die Dateien liegen im gleichen Wurzelverzeichnis (:base-directory) wie die Org-Files und können alle möglichen Datei-Endungen haben, die ich mithilfe eines einfachen reuglären Ausdrucks aufliste (:base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|php" – ich benötige nicht wirklich alle, aber man kann ja nie wissen). Natürlich sollen auch hier alle Unterverzeichnisse durchwühlt werden (noch einmal :recursive t) und die :publishing-function org-publish-attachment sorgt dafür, daß diese Dateien einfach nur in die entsprechenden Ziel-Verzeichnisse kopiert werden.

Das Schöne an der Publishing-Funktion von Org ist, daß ich nun ohne weiters eine weitere Komponente hinzufügen kann, die zum Beispiel die Quellen nach LaTeX und damit auch als PDF herausschreibt. Das kommt dem Ziel write once – publish everywhere schon verdammt nahe.

Publizieren

Drumroll … C-c C-e X rforg schreibt nun wie gewünscht alles in das RubyFrontier-Projekt-Verzeichnis an die richtigen Stellen. Noch einmal: Drumroll …

RubyFrontier und die Bilder

Eine kleines Problem ist, daß RubyFrontier eigentlich nur Bilder herausschreibt, die mit dem Makro <%= imageref() %> angefaßt wurden. Doch hier zeigt uns die RubyFrontier-Dokumentation auf der Seite Images and IMG Tags einen Ausweg: Ich lege schon im Org-Verzeichnis alle Bilder in einem Verzeichnis namens images ab. Dieses Verzeichnis mit allen (nicht geänderten) Bildern wird dann ja so eins zu eins in das RubyFrontier-Projektverzeichnis kopiert. Und da dieses Verzeichnis ja kein »Direktiven«-Verzeichnis ist (mit führendem Hashtag »#«, wie zum Beispiel #templates) wird dieses von RubyFrontier ja ebenfalls eins zu eins in das Web-Verzeichnis kopiert.

Ein Nachteil dieser Methode ist, daß der Kopiervorgang nur beim Befehl Publish Site durchgeführt wird, aber damit kann ich bisher leben.

Still diggin’!

Wenn man sich den von Org herausgeschriebenen (HTML-) Quelltext anschaut, sieht man, daß dieser alle Block-Tags sauber mit id und class ausgestattet hat. Einem schönen Styling via CSS steht also nichts im Wege. Still diggin’!


(Kommentieren)  Org-mode und RubyFrontier – wie es geht bitte flattrn




Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.


Werbung


Werbung


image  image  image
image  image  image