9

我在对 Aquamacs 进行逆向工程以提取 NSSpellChecker 的用法/功能时遇到问题。我想从源代码将该用途/功能合并到 Emacs 的基本构建中。我找到了看似相关的文件—— ns-win.elflyspell.el; 并且ispell.el——然而,仅仅将这些文件从 Aquamacs 替换为 Emacs 并不会启用用于运行 OSX 原生拼写检查器的弹出菜单。我缺少一个或多个拼图——我打开了所有 Aquamacs *.gz 文件并在所有这些文件中搜索了一些关键字,但我没有找到任何其他看起来像它们的文件与此功能有关。该功能由 Aquamacs 启用,before其 site-start.el 已启动。

我已经学会了如何使用 tarball 以及使用 bzr 从源代码构建 Emacs。如果有人知道如何在构建过程中配置 NSSpellChecker,那就太好了。

我在互联网上找不到任何远程描述如何执行此操作的内容。

Aspell 的拼写检查功能让我想起了 80 年代后期的生活。我越来越喜欢带有按钮的弹出菜单来选择拼写检查选项。

这是构建 Aquamacs 的解释的链接,查看构建脚本是我的待办事项列表中的下一个:

http://www.emacswiki.org/cgi-bin/wiki/BuildingAquamacs

编辑 1:构建脚本对 NSSpellChecker 有更多的说明,因此需要查看的其他文件包括: nsterm.mnsfns.m. 我不认为也没有aquamacs-menu.el必要osxkeys.el,因为它们是在 site-start.el 之后加载的。它看起来越来越像 NSSpellChecker 在构建过程中与上述文件一起硬编码到应用程序可执行文件中。

编辑2:是的,那是拼图中缺失的一块。应用程序包(即... Aquamacs.app/Contents/MacOS/Aquamacs)中的 Aquamacs 可执行文件包含 NSSpellChecker 的硬编码魔法以及 Aquamacs 的修改版本ns-win.elflyspell.el; 和ispell.el

编辑 3:此时,一种选择是修改构建过程中使用的 Aquamacs 和相关文件的构建脚本,以构建自定义应用程序。或者,创建一个混合也是可能的,但有其自身的问题,因为 Aquamacs 可执行文件是硬编码的,具有特殊功能,例如one-frame-one-buffer-mode从 Finder.app 打开文件时;switch-to-buffer-in-tab从 Finder.app 打开文件时;ns-application-activated需要设置为忽略;在 init.el 文件中包含版本 ID 以正确消除错误消息;适用于 Aquamacs 的简易菜单选项,用于保存选项;以及其他一些显而易见的问题。简而言之,混合动力是可行的,但会让人头疼。我确实有一个混合工作,但我确信我必须做更多的调整,因为我发现需要处理更多的 Aquamacs 自定义(由可执行文件创建)。我现在发布任何类型的答案还为时过早。构建脚本修改似乎是最好的解决方案,但需要大量时间才能正确修改它,以便创建隔离 NSSpellChecker 功能的自定义构建。

编辑 4:我有一个带有 NSSpellChecker 的工作版本,它是 Aquamacs24 的自定义构建的可执行文件(除了拼写检查器之外几乎省略了所有 Aquamacs),以及 Emacs24 的 emacs-trunk 最新构建(夜间构建)。我正在等待获得一些技术支持以使用终端下载带有 git 的 Aquamacs24 的最新分支,因为我在使用终端复制 ZIP 版本时遇到了一些问题。这非常详细,我想在发布答案之前简化流程,并且我想事先对其进行彻底测试。

NSS拼写检查器
(来源:lawlist.com

4

1 回答 1

6

补丁(参考下文)由 @lawlist 从 Aquamacs 的选定部分创建:

https://github.com/davidswelt/aquamacs-emacs

要在 Emacs 的 vanilla/generic 版本的 OSX 上启用本机拼写检查,需要在构建之前修补 C 源代码,并且还需要修改一些 lisp 文件。该补丁太大,无法在 stackexchange.com 上发布答案。

以下过程假设已经在 OSX 上安装了必要的工具来构建和修补等——例如,git、最新版本的automakeautoconf、xcode 等。


EMACS-25 分会——2016 年 11 月 1 日

在2016 年 11 月 1 日提交时 构建的emacs-25 分支上执行了以下补丁和最小测试:--with-ns5043e0a7e06dbf6507a59736e55bdde69d9a2a4e

从终端输入: git clone -b emacs-25 git://git.sv.gnu.org/emacs.git

访问: https ://gist.github.com/lawlist/dfc75240cc06c66f19f48eaa3e570d7c

单击“下载 ZIP ”按钮,然后将压缩的补丁文件保存在您计算机上的某个位置。

解压您刚刚下载的ZIP存档并保存nsspellchecker_emacs25.diff.../emacs在上述第一步中克隆的根源代码目录。

从终端,cd转到根源.../emacs代码目录。

;; 该补丁可能已过时,因此此示例包括硬重置以追溯到 2016 年 11 月 1 日。[开发团队仍在对 Emacs 25 进行某些错误修复,这可能导致补丁过时。]

从终端输入: git reset --hard 5043e0a7e06dbf6507a59736e55bdde69d9a2a4e

;; 成功执行硬重置后,终端中的消息将显示:“ HEAD is now at 5043e0a Fix documentation for 'eudc-options-file'

从终端输入: git apply nsspellchecker_emacs25.diff

从终端输入: ./autogen.sh

从终端输入: ./configure --with-ns

从终端输入: make

从终端输入: make install

;; 使用 Finder.app,导航到.../emacs/nextstep并试用您的新 Emacs.app

;; 打开你的新 Emacs.app 并输入M-x eval-expression RET (require 'flyspell) RET

;; 在*scratch*缓冲区中,键入拼写正确和拼写错误的内容。

;; 类型: M-x ns-start-spellcheckerM-x ispell-buffer

;; 玩一下弹出式拼写检查器,玩得开心。

;; 自定义词保存到: ~/Library/Spelling/LocalDictionary


master截至 2016 年 5 月 29 日适用于分支机构的先前答案

在2016 年 5 月 29 日提交 时构建的主分支上执行了以下补丁和最小测试:--with-ns76fb19b359dec8556dc66dbac3ad3d333feea3c3

从终端输入: git clone -b master git://git.sv.gnu.org/emacs.git

访问: https ://gist.github.com/lawlist/6a9b281870fcc114ad3c6c1dca121f95

单击“下载 ZIP ”按钮,然后将压缩的补丁文件保存在您计算机上的某个位置。

解压您刚刚下载的ZIP存档并保存nsspellchecker.diff.../emacs在上述第一步中克隆的根源代码目录。

从终端,cd转到根源.../emacs代码目录。

;; 补丁很快就会过时,所以这个例子包括一个硬重置,可以追溯到 2016 年 5 月 29 日。[我不会更新/维护补丁,因为 Emacs主分支每天都会更改几次。]

从终端输入: git reset --hard 76fb19b359dec8556dc66dbac3ad3d333feea3c3

;; 成功执行硬重置后,终端中的消息将显示:“ HEAD is now at 76fb19b * lisp/wid-edit.el (link): Remove :follow-link property (bug#22434)

从终端输入: git apply nsspellchecker.diff

于 2013-05-08T15:41:58.677 回答