2009-06-24 5 views
14

Lors du démarrage d'Emacs, init.el (ou .emacs.el) est évalué. Cependant, lors du démarrage d'emacsclient, aucun code Lisp similaire n'est évalué.Comment évaluer automatiquement certains code Lisp après le démarrage d'un client emacsclient?

Comment puis-je obtenir un fichier lisp à évaluer chaque fois que j'ouvre un nouveau client emacs?

(Ce serait très pratique pour les personnalisations spécifiques à la trame.)

Je suppose que la réponse est d'utiliser un crochet, mais je ne peux pas sembler trouver le crochet correct à utiliser.

J'attends vos réponses avec impatience.

Répondre

5

Si vous voulez vraiment de nouvelles personnalisations de cadre, il est créer cadre-crochet qui prend un arg (le nouveau cadre) ...

Si vous voulez dire gnuclient, vous pouvez utiliser l'option de ligne de commande « -eval "pour évaluer quelque chose (et ensuite juste faire un alias pour toujours évaluer vos personnalisations).

15

Vous pouvez ajouter une fonction au hook 'server-visit-hook, qui est exécutée chaque fois que le serveur est appelé (chaque fois que vous appelez emacsclient).

+6

Apparemment, ce hook n'est appelé que si emacsclient a reçu une liste de fichiers. Si elle est appelée sans spécification de fichier, alors le hook n'est pas exécuté - ce qui est gênant. – FixMaker

7

J'utilise le code suivant pour modifier automatiquement le comportement des tampons de serveur. Je l'utilise surtout avec l'extension Firefox It's All Text. Dans cette extension, les tampons sont nommés en fonction du nom de domaine, vous pouvez donc déterminer quelle règle appliquer en utilisant string-match pour faire correspondre le nom du fichier.

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

Essayez 'window-setup-hook. Cela résout le problème car il est appelé même si emacsclient ne passe pas un fichier.

Questions connexes