2009-06-24 23 views
14

Al iniciar Emacs, se evalúa init.el (o .emacs.el). Sin embargo, al iniciar emacsclient, no se evalúa ningún código de ceceo similar.¿Cómo evaluar automáticamente cierto código de lisp después de iniciar un cliente de emacs?

¿Cómo puedo obtener un archivo lisp para ser evaluado cada vez que abro un nuevo emacsclient?

(Esto sería muy útil para personalizaciones específicas del marco.)

Asumo la respuesta es utilizar algún gancho, pero me parece que no puede encontrar el gancho correcto a utilizar.

Esperamos sus respuestas.

Respuesta

5

Si realmente quiere nuevas personalizaciones marco, hay crear-frame-gancho que tiene una arg (el nuevo marco) ...

Si se refiere a gnuclient, puede utilizar la opción de línea de comandos "-EVAL "para evaluar algo (y luego simplemente crear un alias para evaluar siempre sus personalizaciones).

15

Puede agregar una función al enganche 'server-visit-hook, que se ejecuta cada vez que se llama al servidor (cada vez que llama al emacsclient).

+6

Aparentemente este gancho solo se invoca si se le pasa a emacsclient una lista de archivos. Si se invoca sin especificar ningún archivo, entonces el gancho no se ejecuta, lo cual es molesto. – FixMaker

7

Utilizo el siguiente código para cambiar automáticamente el comportamiento de los almacenamientos intermedios del servidor. Lo uso especialmente con la extensión de Firefox It's All Text. En esa extensión, los buffers se nombran de acuerdo con el nombre de dominio, por lo que puede averiguar qué regla aplicar aplicando string-match para que coincida con el nombre del archivo.

(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:

Trate 'window-setup-hook. Esto soluciona la molestia ya que se llama incluso si emacsclient no pasa un archivo.

Cuestiones relacionadas