Как автоматически оценить определенный код lisp после запуска emacsclient?

При запуске Emacs оценивается init.el (или.emacs.el). Однако при запуске emacsclient подобный код lisp не оценивается.

Как я могу получить файл lisp для оценки каждый раз, когда открываю новый emacsclient?

(Это было бы удобно для конкретных настроек кадра.)

Я предполагаю, что ответ заключается в использовании некоторого хука, но я не могу найти правильный хук для использования.

Я с нетерпением жду ваших ответов.

5 ответов

Вы можете добавить функцию на крючок 'server-visit-hook, который запускается каждый раз, когда сервер вызывается (каждый раз, когда вы звоните emacsclient).

Я использую следующий код для автоматического изменения поведения буферов сервера. Я использую его особенно с расширением Firefox Это все текст. В этом расширении буферы именуются в соответствии с именем домена, поэтому вы можете выяснить, какое правило применять, используя string-match соответствовать названию файла.

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

Если вам действительно нужны новые настройки фреймов, есть create-frame-hook, который принимает один аргумент (новый фрейм)...

Если вы имеете в виду gnuclient, вы можете использовать параметр командной строки "-eval" для оценки чего-либо (а затем просто создать псевдоним, чтобы всегда проверять ваши настройки).

@LSW:

Пытаться 'window-setup-hook, Это устраняет раздражение, так как оно вызывается, даже если emacsclient не передан в файл.

Похоже, что тех крючков больше нет, так что вот новая версия.

      (add-hook 'server-after-make-frame-hook 'consult-recent-file)
Другие вопросы по тегам