Edytowanie dokumentów Zope/Plone w Emacsie
W dokumencie opisano w jaki sposób można edytować dokumenty
przechowywane w systemie CMS Plone za pomocą edytora Emacs,
wykorzystując protokół WebDav, do obsługi którego wykorzystywany jest
program nd
(BTW: nie udało mi się znaleźć binarnej wersji
nd
dla systemu MS Windows, nie wiem też czy opisany niżej
sposób jest do zastosowania w środowisku MS Windows).
Emacs umożliwia redagowanie dokumentów na odległym serwerze przy wykorzystaniu protokołu WebDav. W tym celu należy zainstalować pakiet eldav (eldav wymaga zainstalowania pakietu apel oraz korzysta z niewielkiego programu użytkowego nd).
Instalowanie eldav i konfigurowanie Plone
Instalowanie eldav to prosta sprawa: należy rozpakować archiwa zawierająca pakiety apel oraz eldav oraz dopisać do pliku startowego, np.:
(add-to-list 'load-path "~/.emacs-local/apel-10.7/") (add-to-list 'load-path "~/.emacs-local/eldav-0.8.1/") (require 'eldav)
W konfiguracji Plone (etc/zope.conf
), udostępniamy port
,,źródłowy'', standardowo jest to port 1980:
<webdav-source-server> # valid keys are "address" and "force-connection-close" address 1980 force-connection-close off </webdav-source-server>
Pliki z Plona pobieramy uruchamiając standardowe polecenie find-file (C-x-C-f) i poprzedzając dwukropkiem adres URL, np.:
:http://www.gust.org.pl:1980/doc
Należy koniecznie podać numer portu ,,źródłowego'' (w przykładzie wyżej 1980). W przeciwnym wypadku otrzymamy nienadający się do redagowania ,,prezentacyjny'' plik HTML przetworzony przez Plone. Więcej informacji na ten temat znajduje się w następnym punkcie.
Redagowanie dokumentów HTML/Plone
Aby umożliwić wyświetlanie tego samego dokumentu w różny sposób, Plone przechowuje ,,dokument źródłowy'', który podlega transformacji do ,,dokumentu prezentacyjnego'' w chwili gdy ten dokument będzie komuś potrzebny. Dokumenty źródłowe mogą być przechowywane w różnych formatach: tekst, HTML, struktured text (STX) oraz restructured text (RST). Dwa ostatnie formaty są używane, np. do dokumentowania programów w języku Python.
Edytowanie źródeł przy wykorzystaniu formatu RST (STX odrzucam od razu jako zbyt prymitywny/trudny do zastosowania) nie wydaje się sensowne: prawie nikt tego nie robi, podobno konwertery RST na HTML nie są wolne od błędów, IMHO niewiele ten format wnosi, np. w porównaniu do HTML.
Reasumując zakładam, że formatem dokumentów źródłowych jest HTML. W
celu zwiększenia wygody pracy stosuję do redagowania dokumentów HTML
(formalnie XHTML, ale to nie ma znaczenia) pakiet nxml. Pakiet nxsml
wykorzystuje standard RNC/RNG i do walidowania dokumentu nie potrzebuje
obecności deklaracji DOCTYPE (,,dokument źródłowy'' Plone akurat lepiej
żeby tej deklaracji nie posiadał). Aby tryb nxml
był aktywowany w momencie jego umieszczenia w buforze Emacsa na dole
dokumentu, ale przed kończącymi znacznikami <body>
oraz <html>
, jest dodawany następującego
komentarz:
<!-- Local variables: mode: nxml End: --> </body> </html>
Uwaga: komentarz trzeba umieścić przed a nie
po parze znaczników zamykających body/html
bo inaczej
zostanie on usunięty przez Plone. Rysunek
1, “Edytowanie dokumentu XHTML w Emacsie w trybie nxml” przedstawia
okno edytora Emacs zawierające przykładowy dokument.
Rysunek 1. Edytowanie dokumentu XHTML w Emacsie w trybie nxml

Wykorzystanie Emacsa pozwala także np. na sprawdzenie poprawności gramatycznej przy wykorzystaniu pakietu flyspell. Przykładowo rysunek 1, “Edytowanie dokumentu XHTML w Emacsie w trybie nxml”, przedstawia okno edytora Emacs po wykonaniu polecenia flyspell-buffer (zwróć uwagę na podkreślony błędnie wpisany wyraz ,,wyświetlonej'').
Różne usprawnienia
Pewnym kłopotem jest umieszczanie przez Emacsa plików
backup (pliki z tyldą) w tym samym katalogu co plik
redagowany. Plik taki nie dość, że niepotrzebnie zajmuje miejsce, to
jeszcze jest widoczny jako osobny zasób. Rozwiązaniem tego problemu
może być umieszczanie plików z tyldą w oddzielnym katalogu.
Aby tak było, należy umieścić w pliku konfiguracyjnym
.emacs
następujące polecenia:
(defun make-backup-file-name (file) (concat "~/.emacs-backups/" (file-name-nondirectory file) "~"))
Document Actions