[druckfreundliche Version]
Hauptseite   Impressum   

PHP-Dateien mit dem Emacs bearbeiten

Da es scheinbar keinen vernünftigen Emacs Modus für das editieren von PHP-Dateien gibt und man eigentlich ganz gut mit einer Mischung aus c++-mode und hm--html-mode fährt habe ich mir zum schnellen Umschalten zwischen diesen beiden Modi einfach zwei Tasten in meiner ~/.emacs definiert.

(global-set-key [f11] 'hm--html-mode)
(global-set-key [f12] 'c++-mode)

Das ist zwar eine Möglichkeit, aber so ganz befriedigend ist es noch nicht.

--

Ein Möglichkeit zum Umschalten zwischen diesen beiden Modi musste also her. Nach einiger Suche bin ich dann über mml und mml-mode gestolpert, die mich aber auch nicht unbedingt überzeugen konnten. Schlußendlich bin ich beim einfachen two-mode.el von David Welton gelandet.

--

Was bietet two-mode?

Der two-mode-mode ist ein Minor-Mode, der automatisch zwischen zwei verschiedenen Major-Modes umschalten kann. Damit das funktioniert muß man ihm nur mitteilen welches der Standard- und welches der Sekundärmodus sein soll und woran er erkennen kann wo ein Bereich für den Sekundärmodus beginnt und wo er endet.

--

Wie installiere ich two-mode?

Bei der Beschreibung der Installation gehe ich davon aus, daß sowohl cc-mode als auch hm--html-mode bereits auf dem Rechner installiert sind.

1. Download

Hier ist ein Archiv, in dem sich eine an unsere Bedürfnisse angepasste two-mode.el befindet.

2. Installieren

Hier am Beispiel von XEmacs unter /usr/local/ für andere Pfade oder Emacs einfach entsprechend anpassen.

$ gunzip 20000416-emacsphp.tar.gz | tar xf -
$ xemacs two-mode-mode.el
M-x byte-compile-file
C-x C-c
$ su
$ mv two-mode-mode.el* /usr/local/lib/xemacs/site-lisp/
$ exit

3. Einbinden

Der Teil der ~/.emacs für das Setup für php- und html-Dateien sieht bei mir wie folgt aus:

;; PHP
(require 'cc-mode)
(autoload 'hm--html-mode "hm--html-mode" "HTML major mode." t)
(autoload 'hm--html-minor-mode "hm--html-mode" "HTML minor mode." t)

(or (assoc "\\.html$" auto-mode-alist)
    (setq auto-mode-alist (cons '("\\.html$" . hm--html-mode) 
                                auto-mode-alist)))

(or (assoc "\\.tmpl$" auto-mode-alist)
    (setq auto-mode-alist (cons '("\\.tmpl$" . hm--html-mode) 
                                auto-mode-alist)))

(require 'two-mode-mode)
(or (assoc "\\.php3$" auto-mode-alist)
    (setq auto-mode-alist (cons '("\\.php3$" . two-mode-mode) 
                                auto-mode-alist)))
(or (assoc "\\.php$" auto-mode-alist)
    (setq auto-mode-alist (cons '("\\.php$" . two-mode-mode) 
                                auto-mode-alist)))
(or (assoc "\\.phtml$" auto-mode-alist)
    (setq auto-mode-alist (cons '("\\.phtml$" . two-mode-mode) 
                                auto-mode-alist)))

(add-hook 'hm--html-mode-hook (function (lambda () 
		  (setq font-lock-mode t)
		  (auto-fill-mode))))
  

Nach den Änderungen entweder die Datei ~/.emacs per M-x load-file neu laden oder einfach den Emacs neu starten.

--

So ganz optimal ist diese Lösung auch noch nicht, da im Sekundären Modus die Perfermance doch ziemlich in den Keller geht, aber besser als nichts ist es allemal. Mittelfristig wird aber an der Entwicklung eines vernünftigen php-Modus kein Weg vorbeiführen, da sich der hm--html-mode doch öfter durch vorangehenden php-Code verwirrt zeigt.

Links zum Thema

Bücher zum Thema


GNU Emacs
kurz & gut
bei amazon.de

Learning
GNU Emacs
bei amazon.de

Writing GNU
Emacs Extensions
bei amazon.de
Martin Glinski