Confluence Cloud & Vim

Kurt Klinner

Seit meinen ersten Gehversuchen mit Linux (irgendwann im letzten Jahrtausend mit SuSE 5.3) ist vi bzw. vim mein steter Begleiter, zumindest seit dem Zeitpunkt da ich gelernt hatte, ihn zu beenden :-)

imgcenter

Nachdem ich Mitte des Jahres meine lokal gehostet Confluence Instanz in Richtung Confluence Cloud migriert habe, konnte ich das von mir erweitere VIM Plugin (https://github.com/ktklin/confluence-vim) auf Grund der unterschiedlichen API nicht mehr weiter benutzen.  Meine Suche nach einer bereits fertigen Lösung um Vim zu integrieren verlief im Sand, von daher machte ich mich also ans Werk ein VIM Plugin zu entwickeln.

Mittels - basierend auf meiner Config -  vim conf://SPACENAME/PAGENAME nutzt man das Plugin. Wird eine Seite gespeichert, werden die Markdown Tags ala #,**,_ mittels des Python Markdown Modules in HTML übersetzt und der Content mittels der REST Api von Confluence übertragen. Das Lesen von bereits existierenden Pages ist ebenso möglich (REST API + html2text um die erhaltenen Daten wiederum als Markdown darzustellen)

Die ersten Version der Erweiterung unterstütze einen Basissatz an Markdown Kommandos, welche die am häufigsten genutzten Formatierungen enthielt, allerdings stiess ich - vor allem beim Einbetten von Sourcecode - recht schnell auf einige Probleme, die in erster Linie dadurch bedingt sind, wie Confluence die Daten ablegt.

Ein einfaches Codesnippet ala

wird durch folgendes Markup repräsentiert

<ac:structured-macro ac:name="code" ac:schema-version="1" ac:macro-id="47b3e725-6b10-4a25-b841-76186fd6d247"><ac:plain-text-body><![CDATA[
def myfunc:
    print('FooBar')
]]></ac:plain-text-body></ac:structured-macro>

was mit dem ursprünglichen Markdown nicht ohne weitere zu realisieren war.

Von daher erweiterte ich die aktuelle Version meines Plugins und nutzte die Möglichkeiten das Markdown Moduls selber Extensions (in dem konkreten Fall mittels Pre- und Postprocessors) einzubringen.

Aufgabe der Anpassung ist eine Übersetzung von Markdown in die Confluence-spezifischen Tags. Fokus lag hierbei auf dem Code Macro, da es aber anfing Spass zu machen, habe ich noch ein paar kleiner Erweiterungen mit eingebaut, die genutzt werden können um Info-, Note- und Warning-Panels einzubetten

info[Info, Info everywher]

note[Notes, Noters, Notes]

warning[Warnings go here]e

Das Repo findet sich unter https://github.com/ktklin/confluence-cloud-vim und enthält unter anderem auch ein kurzes Demo Video

In diesem Sinne viel Spass beim Dokumentieren