2009-06-24 4 views
14

Beim Starten von Emacs wird init.el (oder .emacs.el) ausgewertet. Beim Starten von emacsclient wird jedoch kein ähnlicher Lisp-Code ausgewertet.Wie wird bestimmter Lisp-Code nach dem Start eines emacsclient automatisch ausgewertet?

Wie kann ich eine Lisp-Datei erhalten, die jedes Mal ausgewertet wird, wenn ich einen neuen Emacsclient öffne?

(Dies würde für den Rahmen spezifische Anpassungen nützlich sein.)

Ich nehme an, die Antwort ist etwas Haken zu verwenden, aber ich kann nicht zu verwenden, scheinen den richtigen Haken zu finden.

Ich freue mich auf Ihre Antworten.

Antwort

5

Wenn Sie wirklich neuen Rahmen Anpassungen wollen, gibt es Rahmenhaken schaffen, die ein arg (der neue Rahmen) ...

Wenn Sie gnuclient bedeuten, können Sie die Befehlszeilenoption „-EVAL verwenden nimmt "um etwas auszuwerten (und dann einfach einen Alias ​​erstellen, um Ihre Anpassungen immer zu überprüfen).

15

Sie können dem Hook 'server-visit-hook eine Funktion hinzufügen, die jedes Mal ausgeführt wird, wenn der Server aufgerufen wird (jedes Mal, wenn Sie emacsclient aufrufen).

+6

Anscheinend wird dieser Hook nur aufgerufen, wenn emacsclient eine Dateiliste übergeben wird. Wird es ohne Angabe einer Datei aufgerufen, wird der Hook nicht ausgeführt - was ärgerlich ist. – FixMaker

7

Ich verwende den folgenden Code, um das Verhalten von Serverpuffern automatisch zu ändern. Ich benutze es vor allem mit der Firefox-Erweiterung It's All Text. In dieser Erweiterung werden die Puffer entsprechend dem Domänennamen benannt, sodass Sie herausfinden können, welche Regel angewendet werden soll, indem Sie string-match verwenden, um den Namen der Datei zu ermitteln.

(defun server-edit-presets() 
    (cond 
    ;; When editing mail, set the goal-column to 72. 
    ((string-match "mail\\.google\\.com\\.[0-9a-z]+\\.txt" (buffer-name)) 
    (longlines-mode-off) 
    (auto-fill-mode 1) 
    (set-fill-column 72) 
    (save-excursion 
     ;; Don't know if this is necessary, but it seems to help. 
     (set-buffer (buffer-name)) 
     (goto-char (point-min)) 
     ;; Replace non-breaking strange space characters 
     (while (search-forward (char-to-string 160) nil t) 
     (replace-match " ")))))) 

(add-hook 'server-visit-hook 'server-edit-presets) 
(add-hook 'server-visit-hook '(lambda() (longlines-mode 1))) 
1

@LSW:

Versuchen 'window-setup-hook. Damit wird der Ärger seit dem Aufruf behoben, selbst wenn emacsclient keine Datei übergeben wird.