启动 Emacs 时,会评估 init.el(或 .emacs.el)。但是,在启动 emacsclient 时,不会评估类似的 lisp 代码。
每次打开新的 emacsclient 时,如何获取要评估的 lisp 文件?
(这对于特定于框架的自定义非常方便。)
我认为答案是使用一些钩子,但我似乎找不到要使用的正确钩子。
我期待着你的回答。
启动 Emacs 时,会评估 init.el(或 .emacs.el)。但是,在启动 emacsclient 时,不会评估类似的 lisp 代码。
每次打开新的 emacsclient 时,如何获取要评估的 lisp 文件?
(这对于特定于框架的自定义非常方便。)
我认为答案是使用一些钩子,但我似乎找不到要使用的正确钩子。
我期待着你的回答。
您可以向 hook 添加一个函数,该函数在'server-visit-hook
每次调用服务器时(每次调用emacsclient
)都会运行。
我使用以下代码自动更改服务器缓冲区的行为。我特别将它与 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)))
如果你真的想要新的框架定制,有一个 create-frame-hook 它需要一个 arg(新框架)......
如果您的意思是 gnuclient,您可以使用命令行选项“-eval”来评估某些东西(然后只需创建一个别名来始终评估您的自定义)。
@LSW:
试试'window-setup-hook
。这解决了烦恼,因为即使没有向 emacsclient 传递文件,它也会被调用。