nXhtml-mode v Emacsu (jak na něho na Gentoo)
Po té co sem před několika dny oběvil projekt nXML, který velmi dobře nahrazuje již lehce zastaralý PSGML se mi povedlo nalézti také, jeden docela vyvedený port Emacsu na Windows EmacsW32 no a tam sem se dočetl, že existuje projekt nXhtml, který rozšiřuje schopnosti nXML o lepší podporu HTML. Samozřejmě různých HTML módů pro Emacs je spousty, ale tenhle je něčím výjmečný. Je primárně navržen, tak aby fungoval jako "multi major modes", což znamená, že v jednom bufferu můžete mít více než jeden majoritní mod. To sem se s menším úspěchem již před nějakou dobou snažil rozchodit pro editaci JSP.
No tak sem se vrhl do toho, protože port na Windows tyhle projkety má, je nemyslitelné, abych to nedostal i do svého Gentoo. Bohužel se ukázalo, že to nebude tak snadné. Ve standartním portage totiž není nXhtml přístupné. Proto je potřeba použít emacs-overlay. Tady na pár řádcích napíšu jak vlastně na to.
Nejprve je potřeba naistalovat balíček layman, který umožňuje pracovat s overlay a zkonfigufovat ho
# emerge layman
# echo "source /usr/portage/local/layman/make.conf" >>/etc/make.conf
Pak už stačí stáhnout stromy z overlay (překrytí). První je překrytí Emacsu a druhý je překrití nějakých komunikačních knihoven, je to potřeba protože nXhtml závisí na balíku "net-misc/ftpsync", který se v standartním portage nevyskytuje.
# layman -a emacs
# layman -a flameeyes-overlay
Pokud vám layman napíše ze emacs, nebo flameeyes-overlay neexistuje, tak místo -a napište -s a pak znovu -a. Pro flameeyes-overlay je potřeba mít nainstalovaný balík dev-util/git, ale to vás již layman povede.
Pro nainstalování nXhtml je potrřeba odmaskovat několik balíků, ale to vás již portage povede. Teda úplně ze startu mustíte odmaskovat samotný balík nxhtml-mode (ukázka pro architekturu amd64, jinak použijte např. x86)
# echo "app-emacs/nxhtml-mode ~amd64" >> /etc/portage/package.keywords"
No a nakonec již jen poslední krok. Nevím přesně jak funguje gentoo-site.el, ale každopádně se do ní balík nXhtml nedostane, takže sem zvolil uživatelské načtení v souboru ~/.emacs (p.s. já ještě díky XEmacsu, používám strukturu .init.el a .custom.el pro rozdělení vecí, které píšu ručně a které jsou automaticky generovány pomocí např. customize-variable). Takže do souboru ~/.emacs (v mém případě .init.el) přidejte následující řádek:
(load "/usr/share/emacs/site-lisp/nxhtml-mode/nxml-nxhtml-autostart" nil t)
No a posledním úkolem je nastavení modulu pro danou příponu, to ale udělejte až ve chvíli, kdyže se automaticky nenačte. Např. pro JSP se automaticky nenačte:
(setq auto-mode-alist
(append '(("\\.jsp$" . mumamo-mode)
) auto-mode-alist))
mumamo-mode vás může trochu překvapit, ale jedná se o multimod, v rámci kterého se spusti nXhtml, samotný nXhtml jde spustit pomocí nxhtml-mode.
Ještě sem při pročítání zdrojáků narazil na nxhtml-part-mode, ale ten sem jaksi nerozchodil.