如何让 Mac OS X 上的可可 emacs 加载新窗口的 .emacs 可视化自定义(第一个之后打开的任何文档)?

Posted

技术标签:

【中文标题】如何让 Mac OS X 上的可可 emacs 加载新窗口的 .emacs 可视化自定义(第一个之后打开的任何文档)?【英文标题】:How do I get my cocoa emacs on Mac OS X to load my .emacs visual customizations for new windows (any document opened after the first)? 【发布时间】:2009-12-15 18:59:06 【问题描述】:

所以我刚刚从http://emacsformacosx.com/ 为我的新雪豹 macbook pro 下载了 emacs 23.1,它就像一个魅力,除了......

我的 .emacs 中有可视化自定义,这里提取了几行:

(设置背景色“黑色”) (设置光标颜色“绿色”) (set-default-font "--Lucida Console-normal-r-normal-normal-18--96-96-c-*-iso10646-1")

我还设置了一些键绑定,这里有几行

(global-set-key "\C-l" `goto-line)

(global-set-key [(control ?%)] `query-replace-regexp)

我第一次启动 emacs 或用 emacs 打开一个文档时,一切都完美加载。当我发出命令-N 或通过 finder 打开另一个文件时,会打开一个新窗口,其中加载了键绑定自定义,但没有视觉自定义(包括窗口大小等)

我认为这与 emacsclient 的调用方式和 emacs 服务器有关,但是尽管我热衷于使用 emacs 进行开发,但在 .emacs 级别之外设置编辑器本身时,我却一无所知定制

以下是我希望在打开新窗口(通过 command-n 或在 finder 中打开文档)时实现的潜在行为,按优先顺序排列:

    让新窗口创建一个新的 emacs 进程(不仅仅是一个新的缓冲区),这样我就可以像 textmate 一样管理和导航多个项目,为每个项目使用一个 emacs 进程。

    让这些视觉自定义保持不变,以便每个新窗口都以正确的大小、字体和颜色加载。

    让每个新文档在当前活动的 emacs 窗口中作为缓冲区打开。

如果你们能帮忙,请告诉我,谢谢!

【问题讨论】:

开发工具有明确的政策吗? Emacs 是一头可怕的野兽——就可能的完全非编程定制而言——与 e.g. visual studio,但它仍然是一个开发工具。 我们再次下意识地将 Emacs 问题移至 superuser.com。克服它,伙计们。 Neil 正在用 Emacs Lisp 编写程序。结案。这个问题属于 SO。 【参考方案1】:

好的,我想出了如何从终端执行此操作(为每个新项目启动一个新的 emacs 服务器),我确信从 finder 中让它工作也很简单,但因为我通常在终端无论如何它对我有用。我刚刚将此添加到我的~/.profile

function emacs-open() 
    /Applications/Emacs.app/Contents/MacOS/Emacs $1 &

然后,当您想在新项目(emacs 服务器)中打开所有框架自定义和 .emacs 正确加载的文件时,它只是

$ emacs-open index.php

我知道这对某些人来说似乎很明显,但据我所知,当你从http://emacsformacosx.com/ 下载包裹时,它并没有为你完成,所以希望这对某人有所帮助

【讨论】:

【参考方案2】:

要自定义颜色,您需要对框架进行更改,如下所示:

(setq default-frame-alist
    `((background-color . ,background)
      (foreground-color . "lightcyan")
      (border-color . "lightskyblue1")
      (cursor-color . "palegoldenrod")
      (mouse-color . "azure")))

至于在 Finder 中打开文档时生成一个新的 Emacs 进程,您只需要禁用您的 emacs 服务器,和/或不使用 emacsclient。只需设置它,以便直接调用 emacs 来打开文件。我不知道如何自定义查找器操作...

【讨论】:

是的,这是有道理的,并且会处理颜色的东西......看起来它没有选择窗口大小或字体,但我确信我可以通过 emacswiki 找出那部分,所以我认为这可以解决#2。不过,我将把它打开一天左右,如果有人知道的话,我很想知道#1 的解决方案。【参考方案3】:

我在 linux 上,但我有这种工作。基本上,我在 .emacs (which see for details) 中所做的是使用 after-make-frame-functions 钩子:

(add-hook 'after-make-frame-functions
  (lambda (frame)
    (set-variable 'color-theme-is-global nil)
    (select-frame frame)
    ;;; set color theme and other visual things, like fonts
    ))

有一件事是我set-variable 'color-theme-is-global,因为我喜欢为终端和窗口设置不同的主题。从理论上讲,您应该能够在设置颜色以使其正常工作之前执行(set-variable 'color-theme-is-global t) somehwere。

我一直无法解决的一个问题是,更改字体大小不会重排样式,所以我会得到奇怪的画中画效果,这些效果很可怕,并迫使我取消最大化/重新最大化我的框架,这有点失败了。

我很确定以正确的顺序添加钩子/设计函数应该可以消除这种情况,但我有一段时间没让它正常工作。

【讨论】:

【参考方案4】:

至于 #1,启动一个新的 emacs 进程,您可能可以通过编写脚本来覆盖默认行为来完成此操作。这需要捕获文件路径并使用 Emacs 的系统接口来调用新实例。但是您可能想尝试一个单一的 Emacs 解决方案一段时间,看看它是否不会给您带来太多痛苦。

【讨论】:

以上是关于如何让 Mac OS X 上的可可 emacs 加载新窗口的 .emacs 可视化自定义(第一个之后打开的任何文档)?的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X Leopard 上的 Emacs 键绑定

如何在 Mac Os X 中向我的可可应用程序的屏幕添加信息

Mac OS X 可可应用程序中的 Internet 连接通知

Mac OS X:如何在emacs客户端的shell中永久更改提示符(PS1的值)?

使用可可获取 Mac OS X 当前连接的 wifi 网络的安全类型

Mac OS X >= 10.6 上的 Finder 文件图标标记(图标覆盖)