OSX - 配置Emacs以使用NSSpellChecker

时间:2013-04-28 17:41:00

标签: emacs

我无法对Aquamacs进行逆向工程,以提取NSSpellChecker的使用/功能。我想将这些使用/功能合并到源代码的Emacs的简单构建中。我找到了看似相关的文件 - ns-win.el; flyspell.el;和ispell.el - 但是,只需将这些文件从Aquamacs替换为Emacs,就不会启用弹出菜单来运行OSX原生的拼写检查程序。我错过了一个或多个拼图 - 我打开了所有的Aquamacs * .gz文件并在所有这些文件中搜索了几个关键字,但我还没有找到任何其他文件看起来像他们有与此功能有关。该功能由Aquamacs before启用,其site-start.el已启动。

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

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

Aspell的拼写检查功能让我想起了80年代后期的生活。我已经开始喜欢弹出式菜单,其中包含用于选择拼写检查选项的按钮。

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

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

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

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

编辑3:此时,一个选项是修改Aquamacs的构建脚本以及构建过程中使用的相关文件,以构建自定义应用程序。或者,创建混合也是可能的,但是它有自己的问题,因为当从Finder.app打开文件时,Aquamacs可执行文件被硬编码为one-frame-one-buffer-mode等专业;从Finder.app打开文件时switch-to-buffer-in-tab; ns-application-activated需要设置为忽略;包括init.el文件中的版本ID,以正确安静错误消息;简单的菜单选项,面向Aquamacs以节省选项;以及其他一些显而易见的问题。简而言之,混合动力是可行的,但颈部疼痛。我确实有一个混合工作,但我确定我必须做更多的调整,因为我发现需要处理的更多Aquamacs自定义(由可执行文件创建)。现在发布任何类型的答案还为时过早。构建脚本修改似乎是最佳解决方案,但需要大量时间才能正确修改它,以便创建隔离NSSpellChecker功能的自定义构建。

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

NSSpellChecker http://lawlist.com/images/spellchecker.png

1 个答案:

答案 0 :(得分: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-ns以下补丁和最小测试:{{1} }

在终端中输入:5043e0a7e06dbf6507a59736e55bdde69d9a2a4e

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

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

解压缩刚下载的 ZIP 存档,并将git clone -b emacs-25 git://git.sv.gnu.org/emacs.git保存到上面第一步中克隆的nsspellchecker_emacs25.diff根源代码目录。

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

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

在终端中输入:.../emacs

;;成功执行硬重置后,终端中的消息将显示:“ HEAD现在为5043e0a修复'eudc-options-file'的文档

在终端中输入:git reset --hard 5043e0a7e06dbf6507a59736e55bdde69d9a2a4e

在终端中输入:git apply nsspellchecker_emacs25.diff

在终端中输入:./autogen.sh

在终端中输入:./configure --with-ns

在终端中输入:make

;;使用Finder.app,导航到make install并试用新的Emacs.app

;;打开新的Emacs.app并输入.../emacs/nextstep

;;在M-x eval-expression RET (require 'flyspell) RET缓冲区中,键入拼写错误且拼写错误的内容。

;;输入:*scratch*M-x ns-start-spellchecker

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

;;自定义字词会保存到:M-x ispell-buffer


截至2016年5月29日适用于~/Library/Spelling/LocalDictionary分行的上一个答案

自2016年5月29日提交后,主分支构建master执行了以下补丁和最小测试:--with-ns

在终端中输入:76fb19b359dec8556dc66dbac3ad3d333feea3c3

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

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

解压缩刚下载的 ZIP 存档,并将git clone -b master git://git.sv.gnu.org/emacs.git保存到上面第一步中克隆的nsspellchecker.diff根源代码目录。

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

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

在终端中输入:.../emacs

;;成功执行硬重置后,终端中的消息将显示:“ HEAD现在位于76fb19b * lisp / wid-edit.el(链接):删除:follow-link属性(bug#22434)

在终端中输入:git reset --hard 76fb19b359dec8556dc66dbac3ad3d333feea3c3