Building Cocoa Emacs on Leopard

随分と久しぶりのエントリです。

id:kazu-yamamotoさんのCocoa Emacsでのフォント設定を読み、重い腰を上げてCocoa Emacsに移行することにしました。インストールに関してはid:kazu-yamamotoさんの今日の Cocoa Emacsを是非ご覧になってください。


さて、以下は以前記載したCarbon Emacsのインストール方法です。

> cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co -r EMACS_22_BASE emacs
> cd emacs
> ./configure --with-carbon-app=/Applications
> make bootstrap
> sudo make install


前回と異なり、今回はCVS最先端からインストールします。

> cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs
> cd emacs
> ./configure --with-ns
> make
> make install

Carbon Emacsとは異なり、Cocoa Emacsはバンドルアプリケーションとして構成されているため、make installの際のsudoは必要ありません。また、sudoしないほうがよいでしょう。


出来上がったバンドルは、nextstep/Emacs.appとなります。以下に、バンドル内の重要そうなファイルとディレクトリを木構造として可視化してみました。site-lispをインストールする際等に役立てば嬉しいです。

Emacs.app
`-- Contents
    +-- Info.plist
    +-- MacOS
    |   +-- bin
    :   :   `-- :
    |   +-- Emacs
    |   `-- libexec
    :       `-- :
    +-- PkgInfo
    `-- Resources
        +-- English.lproj
        |   `-- InfoPlist.strings
        +-- etc
        :   `-- :
        +-- info
        :   `-- :
        +-- lisp
        :   `-- :
        +-- site-lisp
        |   `-- subdirs.el
        `-- subdirs.el


Emacs.appをディレクトリごと移動し、起動してから、id:a666666さんのCocoa Emacs をインストールして使い始めたを参考にAlt/Opt KeyとCommand Keyの設定をしました。さらに、前出id:kazu-yamamotoさんのエントリを参考にして等幅フォントの設定を行いました。

Carbon Emacsに比べて多少反応が遅くなったように思いますが、想像以上の出来に正直驚きました。

まとめ

今回はCocoa Emacsをインストールしました。


site-lispを格納する構造がドラスティックに変わってしまったため、必須環境のEmacs Museが動作しなくなってしまいました。後で最新版のEmacs MuseCocoa Emacsにインストールしてみたいと思います。

おまけ

前出したEmacs.appの全体図はこちらになります(木は部分的に省略しています)。

Emacs.app
`-- Contents
    +-- Info.plist
    +-- MacOS
    |   +-- bin
    |   |   +-- b2m
    |   |   +-- ctags
    |   |   +-- cvtmail
    |   |   +-- digest-doc
    |   |   +-- ebrowse
    |   |   +-- emacsclient
    |   |   +-- etags
    |   |   +-- fakemail
    |   |   +-- grep-changelog
    |   |   +-- hexl
    |   |   +-- mac-fix-env
    |   |   +-- movemail
    |   |   +-- profile
    |   |   +-- rcs-checkin
    |   |   +-- rcs2log
    |   |   +-- sorted-doc
    |   |   +-- update-game-score
    |   |   `-- vcdiff
    |   +-- Emacs
    |   `-- libexec
    |       +-- cvtmail
    |       +-- digest-doc
    |       +-- fakemail
    |       +-- hexl
    |       +-- movemail
    |       +-- profile
    |       +-- rcs2log
    |       +-- sorted-doc
    |       +-- update-game-score
    |       `-- vcdiff
    +-- PkgInfo
    `-- Resources
        +-- Credits.html
        +-- document.icns
        +-- Emacs.icns
        +-- English.lproj
        |   `-- InfoPlist.strings
        +-- etc
        |   +-- AUTHORS
        |   +-- BABYL
        |   +-- celibacy.1
        |   +-- CENSORSHIP
        |   +-- charsets
        |   |   +-- 8859-10.map
        :   :   :   :
        |   |   `-- VSCII.map
        |   +-- compilation.txt
        |   +-- condom.1
        |   +-- CONTRIBUTE
        |   +-- COOKIES
        |   +-- COPYING
        |   +-- copying.paper
        |   +-- DEBUG
        |   +-- DEVEL.HUMOR
        |   +-- DISTRIB
        |   +-- DOC-23.0.60.1
        |   +-- e
        |   |   +-- eterm-color
        |   |   +-- eterm-color.ti
        |   |   `-- README
        |   +-- echo.msg
        |   +-- edt-user.doc
        |   +-- emacs-buffer.gdb
        |   +-- emacs.bash
        |   +-- emacs.csh
        |   +-- emacs.desktop
        |   +-- emacs.icon
        |   +-- emacs.py
        |   +-- emacs2.py
        |   +-- emacs3.py
        |   +-- enriched.doc
        |   +-- ERC-NEWS
        |   +-- ETAGS.EBNF
        |   +-- ETAGS.README
        |   +-- forms-d2.dat
        |   +-- FTP
        |   +-- future-bug
        |   +-- GNU
        |   +-- gnus
        |   |   +-- gnus-setup.ast
        |   |   `-- news-server.ast
        |   +-- GNUS-NEWS
        |   +-- gnus-tut.txt
        |   +-- grep.txt
        |   +-- HELLO
        |   +-- images
        |   |   +-- attach.pbm
        :   :   :   :
        |   |   `-- zoom-out.xpm
        |   +-- INTERVIEW
        |   +-- JOKES
        |   +-- LINUX-GNU
        |   +-- MACHINES
        |   +-- MAILINGLISTS
        |   +-- MH-E-NEWS
        |   +-- MORE.STUFF
        |   +-- MOTIVATION
        |   +-- ms-kermit
        |   +-- NEWS
        |   +-- NEWS.1-17
        |   +-- NEWS.18
        |   +-- NEWS.19
        |   +-- NEWS.20
        |   +-- NEWS.21
        |   +-- NEWS.22
        |   +-- nxml
        |   |   +-- 00000-0007F.el
        :   :   :   :
        |   |   `-- test-valid.xml
        |   +-- NXML-NEWS
        |   +-- ORDERS
        |   +-- PROBLEMS
        |   +-- ps-prin0.ps
        |   +-- ps-prin1.ps
        |   +-- README
        |   +-- refcards
        |   |   +-- calccard.pdf
        :   :   :   :
        |   |   `-- viperCard.tex
        |   +-- rgb.txt
        |   +-- schema
        |   |   +-- calstbl.rnc
        :   :   :
        |   |   `-- xslt.rnc
        |   +-- SERVICE
        |   +-- ses-example.ses
        |   +-- sex.6
        |   +-- spook.lines
        |   +-- TERMS
        |   +-- THE-GNU-PROJECT
        |   +-- TODO
        |   +-- tree-widget
        |   |   +-- default
        |   |   `-- folder
        |   +-- tutorials
        |   |   +-- TUTORIAL
        :   :   :   :
        |   |   `-- TUTORIAL.zh
        |   +-- WHY-FREE
        |   `-- yow.lines
        +-- info
        |   +-- ada-mode
        :   :   :
        |   `-- woman
        +-- leim
        |   +-- ja-dic
        |   |   +-- ja-dic.el.gz
        |   |   `-- ja-dic.elc
        |   +-- leim-list.el
        |   `-- quail
        |       +-- 4Corner.el.gz
        |       +-- 4Corner.elc
	:       :   :
        |       +-- ZOZY.el.gz
        |       `-- ZOZY.elc
        +-- lisp
        |   +-- abbrev.el.gz
        |   +-- abbrev.elc
	:   :   :
        |   +-- xt-mouse.el.gz
        |   `-- xt-mouse.elc
        +-- preferences.nib
        |   +-- classes.nib
        |   +-- info.nib
        |   `-- keyedobjects.nib
        +-- site-lisp
        |   `-- subdirs.el
        +-- subdirs.el
        `-- var
            `-- games
                `-- emacs
                    +-- snake-scores
                    `-- tetris-scores