为特定函数配置emacs变量

时间:2009-06-05 10:22:50

标签: emacs editor elisp customization

我在单独的emacs窗口中运行电子邮件客户端(通常连接到gnuserv),例如,

emacs -f wl

(电子邮件客户端是Wanderlust,可能并不重要)。

是否可以让emacs记住我的首选

  • 窗口布局,
  • 主窗口尺寸,
  • 字体,颜色等,

仅在调用wl时设置它们?粗略地说,如果我想在电子邮件客户端中使用黑色背景,否则为白色?

我对保持窗口布局特别感兴趣,因为每次加载wl时都必须手动调整默认窗口布局。

2 个答案:

答案 0 :(得分:3)

default-frame-alist变量允许您指定新帧的默认外观和行为(框架就是您所谓的单独Emacs窗口)。虽然它会覆盖所有帧的设置,但您可以建议您的功能屏蔽其全局值并将其设置为您的全局值。像这样:

(defadvice wl (around wl-frame-settings activate)
  (let ((default-frame-alist (append
                              '((width . 82) (height . 36)
                                (cursor-color . "#ffa200")
                                (tool-bar-lines . 0)
                                ;; ...
                                )
                              default-frame-alist)))
    ad-do-it))

正如TJ指出的那样,这个解决方案可能有一个缺点,就是它被调用得太晚了。 TJ的wlwrapper可能是更好的方式。

答案 1 :(得分:3)

在TörökGábor的answer上构建,您可以使用任意数量的包来存储和恢复窗口/框架配置,其中许多都列在here。各种窗口布局包都有它们的怪癖,所以你必须找到你喜欢的那个(有很多软件包b / c每个人都发现了一些他们不喜欢的现有软件包并自行推送)。

关于字体和颜色,有些可以逐帧自定义,请参阅frame parameters的信息页。

关于如何将其挂钩到函数'wl,如果你愿意,可以使用advice(我喜欢使用它),但是可以更直接地定制'wl本身,或编写一个包装器,用于加载帧/窗口配置,然后调用'wl。然后您的调用可能必须更改为:

emacs -f wlwrapper

emacsclient is configured(或者,对于年长的Emacsen,gnuclient)可能导致TG解决方案失效的方式。我可能会使用'wlwrapper解决方案,自定义emacsclient重新使用现有框架,然后在'wlwrapper内修改'default-frame-parameters然后致电'wl。这样,您可以确保在设置参数后创建框架。

像这样未经测试的

(defun wlwrapper ()
  "wrapper for 'wl which sets up window/frame configurations"
   (let ((default-frame-alist (append
                               '((width . 82) (height . 36)
                                 (cursor-color . "#ffa200")
                                 (tool-bar-lines . 0)
                                 ;; ...
                                 )
                               default-frame-alist)))
     ;; if 'wl doesn't create a frame
     (select-frame (make-frame))
     (wl)
     ;; now use which ever window saving package you want
     ))