【问题标题】:configure emacs variables for a specific function为特定函数配置 emacs 变量
【发布时间】:2023-03-21 16:45:01
【问题描述】:

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

emacs -f wl

(电子邮件客户端是 Wanderlust,这可能无关紧要)。

是否有可能让emacs记住我的首选

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

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

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

【问题讨论】:

    标签: emacs editor elisp customization


    【解决方案1】:

    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 可能是更好的方法。

    【讨论】:

    • 谢谢!这将我带到了 elisp 手册中的信息节点“17 Advising Emacs Lisp Function”,它似乎足够详细,可以弄清楚代码的确切含​​义。我还不能让它工作,但既然它已经记录在案,这应该不难。
    • 根据 'wl 内部发生的情况,修改后的 'default-frame-alist 可能为时已晚(即 gnuclient 已经创建了框架)。
    • 出于某种原因,gnuclient 碰巧首先在 emacs 服务器应用程序的焦点窗口中打开 wl,然后在新框架中打开。这就是为什么似乎为时已晚。
    【解决方案2】:

    在 Török Gá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-parametersthen 调用'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
         ))
    

    【讨论】:

    • 我对此有疑问,否则很好回答,因为链接 [emacsclient is configured] 指向关于不同服务器的 wiki 页面。它应该指向 emacswiki.org/emacs/GnuClient 。就这么简单:)
    • @volodyako gnuclient 适用于旧版本的 Emacs,从 Emacs 22 开始,您可能应该使用 emacsclient。但我也会添加指向 gnuclient 的链接。
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多