15

启动 Emacs 时,会评估 init.el(或 .emacs.el)。但是,在启动 emacsclient 时,不会评估类似的 lisp 代码。

每次打开新的 emacsclient 时,如何获取要评估的 lisp 文件?

(这对于特定于框架的自定义非常方便。)

我认为答案是使用一些钩子,但我似乎找不到要使用的正确钩子。

我期待着你的回答。

4

4 回答 4

16

您可以向 hook 添加一个函数,该函数在'server-visit-hook每次调用服务器时(每次调用emacsclient)都会运行。

于 2009-06-24T18:46:17.717 回答
7

我使用以下代码自动更改服务器缓冲区的行为。我特别将它与 Firefox 扩展一起使用It's All Text。在该扩展中,缓冲区是根据域名命名的,因此您可以通过使用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)))
于 2009-06-25T00:15:19.440 回答
5

如果你真的想要新的框架定制,有一个 create-frame-hook 它需要一个 arg(新框架)......

如果您的意思是 gnuclient,您可以使用命令行选项“-eval”来评估某些东西(然后只需创建一个别名来始终评估您的自定义)。

于 2009-06-24T18:43:24.850 回答
1

@LSW:

试试'window-setup-hook。这解决了烦恼,因为即使没有向 emacsclient 传递文件,它也会被调用。

于 2015-07-01T19:23:28.057 回答