2013-04-28 88 views
9

我無法逆向工程Aquamacs來提取NSSpellChecker的使用/功能。我希望將這些使用/功能從源代碼中整合到Emacs的裸骨架中。我找到了看似相關的文件 - ns-win.el; flyspell.el;和ispell.el - 但是,僅僅將這些文件從Aquamacs替換爲Emacs並不能啓用運行OSX原生的拼寫檢查程序的彈出式菜單。我錯過了一個或多個拼圖 - 我打開了所有的Aquamacs * .gz文件,並在所有這些文件中搜索了幾個關鍵字,但是我還沒有發現任何其他文件看起來像他們與此功能有關。該功能由Aquamacs before啓用,它的site-start.el啓動。OSX - 配置Emacs以使用NSSpellChecker

我學會了如何使用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的硬編碼魔術,並結合了Aquamacs修改版本ns-win.el; flyspell.el;和ispell.el

編輯3:此時,一個選項是修改構建過程中使用的Aquamacs和相關文件的構建腳本,以構建自定義應用程序。另外,創建一個混合也是可能的,但也帶有它自己的問題,因爲當從Finder.app打開一個文件時,Aquamacs可執行文件被硬編碼爲特殊文件,如one-frame-one-buffer-mode;當從Finder.app打開一個文件時, 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

回答

6

補丁(下文)通過@lawlist從Aquamacs的選擇部分創建的:

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

要啓用本地拼寫檢查在OSX在香草/通用版本的Emacs,需要在構建之前修補C源代碼,還需要修改一些lisp文件。該補丁太大,無法在stackexchange.com上發佈答案。

以下步驟假定必要的工具已經安裝上OSX建立和補丁等 - 例如,git的,最近的automakeautoconf版本的Xcode等


EMACS -25 BRANCH - 2016年11月1日

下面的補丁和最小測試是在emacs的25支內置執行作爲提交日期爲2016年11月1日:5043e0a7e06dbf6507a59736e55bdde69d9a2a4e

從終端類型: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

;;執行硬復位成功後,在終端的消息會說:「現在頭以5043e0a修復文檔‘EUDC選項文件’

從終端類型: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日以前的答案:

下面的補丁和最小測試是在主分支執行內置--with-ns截至2016年5月29日:76fb19b359dec8556dc66dbac3ad3d333feea3c3

從終端輸入: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現在位於76fb19b * lisp/wid-edit.el(鏈接):刪除:跟蹤鏈接屬性(錯誤#22434)

從終端輸入:git apply nsspellchecker.diff

+0

是否有任何努力使其成爲主線Emacs的配置選項? – tripleee 2016-06-02 04:11:03

+0

@tripleee - 我不確定Richard M. Stallman,John Wiegley或Eli Zaretskii是否有興趣擁有OSX特有的功能。我的猜測是,他們不會,但是,約翰使用OSX - 所以他*可能*有興趣。毫無疑問,RMS將堅持讓David Swelt(用於C源代碼修改)和Nathaniel Cunningham(ispell.el/flyspell.el)等人簽署文件,讓他們的貢獻成爲Emacs的官方部分,他們即使許可證是GNU,也可能不願意這樣做。此外,「Aquamacs」接受捐贈。 。 。 – lawlist 2016-06-02 04:21:09