いがいがさんがcocoa emacsに乗り換えた記事を公開されてからはや3か月。ようやっと私もcarbonからcocoaに乗り換えた。

ついでにNTEmacs環境も整備して.emacs.d/以下を大掃除したので、メモとしてエントリを残しておく。

【追記】環境は…

  • emacs 23.2
  • Mac OS X 10.6.6 (Snow Leopard)
  • Windows7 64bit

記事を公開したその日にemacs 23.3がリリースされてしまったので、こちらもあわせてチェックしたい。

install

cocoa emacs (mac)

cocoa emacsにはtypesterさんのパッチ2種(フルスクリーンの問題 / 日本語入力中のshiftキーの問題)を当てるのが定石になっている。

インストールにはhomebrewを使った。brew updateで用意されるformula(emacs.rb)には前述のパッチ2種のうち、フルスクリーン問題のものは含まれているが、shiftキー問題のものは含まれていない。

単にパッチのURLを足すだけなので、formulaを自分で書き換えて対応した。gistに貼っておいたので参考にされたい。

あとはインストールするだけ。完成したアプリケーションパッケージは/Applicationsに移動しておく。

% brew install emacs --cocoa
(snip)
% mv /usr/local/Cellar/emacs/23.2/Emacs.app/ /Applications/
NTEmacs (windows)

環境変数$HOMEを用意する。「システムのプロパティ」→「詳細設定」→「環境変数」→「ユーザ環境変数」に、変数:「HOME」 / 値:「C:\home」のように指定しておく。

gnupackからビルド済みバイナリをダウンロード / 展開して、bin/runemacs.exeを実行する。

.emacs.d

こちらを参考にディレクトリを構成した。

.emacs.d
├── config
│   ├── builtins.el
│   └── packages.el
├── env
│   ├── cocoa.el
│   └── ntemacs.el
├── init.el
└── packages

.emacs.d以下は近いうちにgithubにあげてあるる予定だ

個人的に工夫しているのは、複数の環境を渡り歩くためにenvディレクトリを作成したこと。init.elの末尾で環境を判別し、env/{env_name}.elを読み込んでいる。

;; system-type predicates
(setq darwin-p  (eq system-type 'darwin)
      ns-p      (eq window-system 'ns)
      carbon-p  (eq window-system 'mac)
      linux-p   (eq system-type 'gnu/linux)
      cygwin-p  (eq system-type 'cygwin)
      nt-p      (eq system-type 'windows-nt)
      meadow-p  (featurep 'meadow)
      windows-p (or cygwin-p nt-p meadow-p))

;; Mac - cocoa
(when ns-p
  (progn
    (load "env/cocoa.el")
  ))
;; Windows - ntemacs
(when nt-p
  (progn
    (load "env/ntemacs.el")
  ))

configuration

以下、いくつかハマったポイントについて個別にメモしておく。

Windows7固有の問題
フォント設定

こちらをほぼそのままコピーしてフォント名だけ変えてある。

(set-face-attribute 'default nil
                    :family "Droid Sans Mono Slashed"
                    :height 80)
(set-fontset-font "fontset-default"
                  'japanese-jisx0213-1
                  '("MS ゴシック" . "unicode-bmp"))
(set-fontset-font "fontset-default"
                  'japanese-jisx0213-2
                  '("MS ゴシック" . "unicode-bmp"))
(set-fontset-font "fontset-default"
                  'japanese-jisx0213-a
                  '("MS ゴシック" . "unicode-bmp"))
(set-fontset-font "fontset-default"
                  'japanese-jisx0208
                  '("MS ゴシック" . "jisx0208-sjis"))
(set-fontset-font "fontset-default"
                  'katakana-jisx0201
                  '("MS ゴシック" . "jisx0201-katakana"))
(add-to-list 'face-font-rescale-alist '(".*MS ゴシック.*" . 1.2))

face-font-rescale-alistは少しトライ&エラーが必要かもしれない。

フォントのアンチエイリアシングの問題

Macではアンチエイリアスの効いた描画で使っているが、NTEmacsでは長らくMSゴシックのビットマップ表示で使っていた。Windows7(64bit)でもアンチエイリアス描画させるには、gdippというソフトウェアを使う。

gdippはインストール時に「Shortcut」を選択し、デスクトップにプログラムローダのアイコンを作ってもらう。そのアイコン(32bitの方)にbin/emacs.exeをドラッグ&ドロップすると、アンチエイリアスをかけて描画されるようになる。

ただし、runemacs.exeを経由していないのでよけいなコンソールが表示されてしまう、という問題が残る。探してみたところこちらではNTEmacs専用のgdipp_loader_32.exeをビルドして使っていた。

手元のWindowsにはVisual Studioが入っていないこと、MSゴシックをアンチエイリアス描画しても美しくないことがが理由で、今回はgdippの利用を見送ることにした。

cygwinのgitでgithubにアクセスするときの問題

おすすめ設定で紹介されていたパッケージインストーラをいただいて使っているのだが、NTEmacsでgithubからインストールしようとするとエラーが出る。原因はSSLの証明書がないため、curl / wgetがSSLでアクセスできないため。

消極的な対策だが、gitのオプションで「証明書のチェックをしない」と設定することで回避した。参考にしたのはこちら

% git config --global http.sslVerify false
Mac固有の問題
フォント設定

こちらをまるっと参考に、ASCIIフォントはDroid Sans Slashedにした。日本語はosakaにしたい気持ちだったのだけど、文字の高さがだいぶ違ってバランスが悪いから断念。慣れたらヒラギノ丸ゴもいいもんだ。

;; フォントセットを作る
(let* ((fontset-name "myfonts") ; フォントセットの名前
       (size 12) ; ASCIIフォントのサイズ [9/10/12/14/15/17/19/20/...]
       (asciifont "Droid Sans Mono Slashed") ; ASCIIフォント
       (jpfont "Hiragino Maru Gothic ProN") ; 日本語フォント
       (font (format "%s-%d:weight=normal:slant=normal" asciifont size))
       (fontspec (font-spec :family asciifont))
       (jp-fontspec (font-spec :family jpfont)) 
       (fsn (create-fontset-from-ascii-font font nil fontset-name)))
  (set-fontset-font fsn 'japanese-jisx0213.2004-1 jp-fontspec)
  (set-fontset-font fsn 'japanese-jisx0213-2 jp-fontspec)
  (set-fontset-font fsn 'katakana-jisx0201 jp-fontspec) ; 半角カナ
  (set-fontset-font fsn '(#x0080 . #x024F) fontspec) ; 分音符付きラテン
  (set-fontset-font fsn '(#x0370 . #x03FF) fontspec) ; ギリシャ文字
  )

(add-to-list 'default-frame-alist '(font . "fontset-myfonts"))

;; フォントサイズの比を設定
(dolist (elt '(("^-apple-hiragino.*" . 1.2)
               (".*osaka-bold.*" . 1.2)
               (".*osaka-medium.*" . 1.2)
               (".*courier-bold-.*-mac-roman" . 1.0)
               (".*monaco cy-bold-.*-mac-cyrillic" . 0.9)
               (".*monaco-bold-.*-mac-roman" . 0.9)))
  (add-to-list 'face-font-rescale-alist elt))

;; デフォルトのフレームパラメータでフォントセットを指定
;; # これは起動時に default-frame-alist に従ったフレームが
;; # 作成されない現象への対処
(set-face-font 'default "fontset-myfonts")

設定を変えたらemacsを再起動しないと反映されないことが多い。

optionキーとcommandキー

メタキーがoptionキーに変更されていて、とてもびっくりした。いまさら人間の方のバインドは変更できないので、こちらを参考に入れ替えておく。

;; Command-Key and Option-Key
(setq ns-command-modifier (quote meta))
(setq ns-alternate-modifier (quote super))
¥マークとバックスラッシュ

M-\ (delete-horizontal-space) が動かないので describe-key してみたら、M-¥ is undefined と言われる。またしてもこちらを参考に入れ替えた。副作用として半角の¥マークが打てなくなってしまったが…いや別に困らないか。

;; Backslashes
(define-key global-map [165] nil)
(define-key global-map [67109029] nil)
(define-key global-map [134217893] nil)
(define-key global-map [201326757] nil)
(define-key function-key-map [165] [?\\])
(define-key function-key-map [67109029] [?\C-\\])
(define-key function-key-map [134217893] [?\M-\\])
(define-key function-key-map [201326757] [?\C-\M-\\])
共通の問題
[f5]とanything.el

キーボードマクロ関連をF3〜5にアサインしているのだが、anything.elをインストールしたら怒られるようになってしまった。

これはanything.elの機能を呼び出すキーバインドのプレフィクスとして「[f5] a」という微妙なアサインがされているため。

こちらを参考に、とりあえず[f5]は外しておく。

;; anything.el
;; <f5> a というバインドがかぶるので変更
(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(anything-command-map-prefix-key "\C-c\C-f"))
visible-bellの問題

【2011-03-18追記】

ビープ音(ベル)がやかましい。対処としてよく紹介されているのが…

(setq visible-bell t)

という設定。でもこれを設定すると、cocoa emacsでは画面中央に豆腐が表示されてしまう。これもなんとかしたい…と思っていたところ、完全に止める方法が紹介されていた。

;; ビープ音,画面フラッシュなし
(setq ring-bell-function 'ignore)

まとめ

まだ古い設定から移植しきっていない機能もあるが、とりあえず仕事をするのに不自由しないところまでは回復した。以前はいろんなelispを探してきては入れてカオスになってたんだけど、それらの多くが標準でできるようになってるのはとてもいいことだ。

次の目標は、CUI上のemacs(mac / CentOS)も同等の使い勝手にすること。

【移行のきっかけになった記事】 igaiga diary(2010-12-30)

http://igarashikuniaki.net/tdiary/20101230.html

【typesterさん作のpatch】 Downloads for typester's emacs – GitHub

https://github.com/typester/emacs/downloads

【patchを組み込んだformula】 emacs 23.2 formula for homebrew with fix-shiftmodifier-with-ime.patch — Gist

https://gist.github.com/861826

【NTEmacsのダウンロード】 gnupack Users Guide – ダウンロード

http://gnupack.sourceforge.jp/docs/current/UsersGuide_download.html#_download_emacs

【.emacs.d/以下の構成】 おすすめEmacs設定 – ククログ(2011-02-16)

http://www.clear-code.com/blog/2011/2/16.html

【NTEmacsのフォント設定】 NTEmacs23 日本語環境設定|とんじるのブログ

http://ameblo.jp/tonjiru2121/entry-10488500864.html

【gdipp】 gdipp – Project Hosting on Google Code

http://code.google.com/p/gdipp/

【gdippの使い方】 窓の杜 – 【REVIEW】インストールするだけであらゆるソフトのテキストを美しく滑らかに描画「gdipp」

http://www.forest.impress.co.jp/docs/review/20100517_367633.html

【NTEmacsとGDIPP】 アプローズの日記

http://applause.elfmimi.jp/diary/m201009.shtml#20211534

【cygwinとgithubの問題】 $ git config –global http.sslVerify false

http://d.hatena.ne.jp/gnarl/20101105/1288940077

【carbon emacsのフォント設定】 Cocoa Emacs のフォント設定について – 瀬戸亮平

http://d.hatena.ne.jp/setoryohei/20110117/1295336454

【キーバインド】 過負荷な日々

http://cgi.netlaputa.ne.jp/~kose/diary/?20090806

【f5とanything.el】 PC日記: 2010年12月アーカイブ

http://www.wizard-limit.net/mt/pc/archives/2010_12.html

【ベルも画面フラッシュもoff】 Carbon Emacsの設定 – 情報関連の適当なノート

http://d.hatena.ne.jp/berukann/20100926/1285519392