iPhoneアプリ、買ってますか? つい"ポチッとな"してしまう仕掛けの数々に、Appleの計算高さが見え隠れしてしまうのですが。それはさておき、不定期に発生する「期間限定セール品」、そのお知らせを効率よく知る方法はないものでしょうか? 先日、コナミの「フロッガー」を67%OFFで購入したのですが、私はたまたま情報を入手できたからいいものの、セール情報自体知らない人も多いはず。売り手 / 買い手ともに、もったいない話だと思うんですよねえ。

さて、今回も『第331回 Cocoa対応で大きく変わった「Emacs 23.1」(1)』に続き「Emacs 23.1」(Cocoa Emacs) について。筆者の「~/.emacs.el」から、Cocoa Emacsに必要 / あれば便利な設定を抜粋する形でお届けしたい。

海上忍氏が利用中の「.emacs.el」(抜粋)はこちらからダウンロードできます(記事末にも掲載)。

Metaキーの仕様変更

メインのAPIセットがCocoaに変更されたとはいえ、Cocoa Emacsも立派 (?) なEmacsであることに変わりはない。スタートアップファイル「~/.emacs.el」を用意するなど、事前準備もこれまで同様だ。言い換えれば、これまで利用してきた (Carbon Emacsでの) 設定の大半は、Cocoa Emacsに流用可能だ。

前回と若干重複するが、主要な変更点を列挙しておこう。まずは特殊キーについて。Carbon Emacsのときは、CommandキーがMetaキーとして動作したが、Cocoa Emacsでは本来のキーアサインが適用され、OptionキーがMetaキーとして動作する。たとえば、M-x shellを実行するときには、Command-x shellではなく、Option-x shellとしなければならない。ちなみに、Carbon Emacsでの挙動に慣れている場合には、以下の記述を~/.emacs.elに書き加えよう。

;; Command-Key and Option-Key
(setq ns-command-modifier (quote meta))
(setq ns-alternate-modifier (quote super))

行番号の表示

vi (vim) にはあるがEmacsに標準装備されていない機能の1つに、行番号の表示がある。viの場合、「:set number」 (または:set nu) で表示、「:set no number」(または:set nonu) で表示をオン / オフできるが、これまでEmacsでは「setnu.el」などのスクリプトを自前で用意しなければならなかった。それがEmacs 23.1では「M-x global-linum」の実行でオン / オフできるのだから、ありがたい話だ。

ありがたいついでに、筆者は以下の行を~/.emacs.elに記述している。お察しのとおり、「M-n」 (Command - n) で行番号の表示をオン / オフできるようにしたものだ。なお、キーのカスタマイズを行う場合、あらかじめ「C-h k」でそのキーバインドが空いているかどうか確認しよう。

(global-set-key "\M-n" 'linum-mode)

標準の機能でviライクに行番号を表示できる

フォントを設定する

Cocoa Emacsの設定のキモは、おそらく「フォント」だろう。従来 (Carbon Emacs) とは設定方法が異なるうえ、等幅フォントに関しては初期設定のままでは使えない (英字2文字で漢字1文字にならない) ため、なにかしらの調整が必要だ。

等幅フォントの設定方法は、Emacs上で動作するメールクライアント「Mew」の開発で知られる山本和彦氏のブログを参照させていただいた (「Cocoa Emacsでのフォント設定」)。そこには、carbonfont.elをCocoa Emacsに対応させることがベストとしつつも、とりあえず現状をしのげる解が示されている。

OSSのTrueTypeフォント「M+」を使用したところ。未定義のフォントがあるようで、ところどころ「□」が表示されていた

筆者の場合、ウェイトの小さい (線が細い) フォントが好みなため、オープンソースのTrueTypeフォント集「M+ OUTLINE FONTSS」に含まれる「M+ 1mn」で試してみた。前掲したひな形のうち変更したのは、日本語フォントを定義する「'("Hiragino Maru Gothic Pro" . "iso10646-1"))」の部分 (Xftフォント名を使用) と、日本語フォントの表示倍率を決定する「("^-apple-M+_1mn.*" . 1.2)」 (XFLDフォント名を使用) の2カ所のみだ。


;; Font
(setq my-font "-*-*-medium-r-normal--14-*-*-*-*-*-fontset-hiramaru")
(setq mac-allow-anti-aliasing t)
(if (= emacs-major-version 22)
    (require 'carbon-font))
(set-default-font my-font)
(add-to-list 'default-frame-alist `(font . ,my-font))
(when (= emacs-major-version 23)
  (set-fontset-font
   (frame-parameter nil 'font)
   'japanese-jisx0208
   '("M+ 1mn" . "iso10646-1"))
  (setq face-font-rescale-alist
    '(("^-apple-M+_1mn.*" . 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)
      ("-cdac$" . 1.3))))

他のフォントを使用する場合には、まずTerminalで「fc-list」コマンドを利用しよう。これで、フォントのXftフォント名を調べることができる。

XFLDフォント名を調べる場合は、Emacs上で以下の行を入力し、行末でC-x C-eとタイプしよう。ズラリ並んだリストから名称を頼りに目的のフォントを探し出し (前述のM+ 1mnならば「"-apple-M+_1mn-medium-normal-normal-*-*-*-*-*-p-0-iso10646-1"」)、「-apple-M+_1mn」の部分をフォントの表示倍率の部分に使えばいい。

(insert (prin1-to-string (x-list-fonts "*")))

なお、筆者が動作を確認したフォントは、前述した「M+ 1mn」のほか、Microsoft Office 2008に付属の「メイリオ」と、フリーのTrueTypeフォント「IPAゴシック」、Adobe製品に付属していた「小塚ゴシック Pro」の4種類。読みやすさで愛用している「Tokyo-Font for Internet」は、旧Mac OS以来のフォント形式 (FFIL / フォントスーツケース) ゆえなのか、表示することができなかった。英字フォントとのバランス調整を含め、当面の課題として意識するつもりだ。

小塚ゴシックPro (左) とメイリオ (右) を使用したところ。他のフォントとのバランス調整が必要だ

筆者が利用中のemacs.el(抜粋)


;; -*- Coding: iso-2022-jp -*-
(set-language-environment 'Japanese)
(set-default-coding-systems 'sjis-dos)
(set-buffer-file-coding-system 'sjis-dos)
(set-clipboard-coding-system 'sjis-mac)
(set-file-name-coding-system 'utf-8)
(if window-system
    (set-keyboard-coding-system 'sjis)
    (show-paren-mode 1)
  (progn
    (set-keyboard-coding-system 'sjis-dos)
    (set-terminal-coding-system 'sjis-dos)))

;; translate clipboard 
  (set-selection-coding-system 'sjis-mac) 

;; Command-Key and Option-Key
(setq ns-command-modifier (quote meta))
(setq ns-alternate-modifier (quote super))

;; Display Line Number
(global-set-key "\M-n" 'linum-mode)

;; Font
(setq my-font "-*-*-medium-r-normal--14-*-*-*-*-*-fontset-hiramaru")
(setq mac-allow-anti-aliasing t)
(if (= emacs-major-version 22)
    (require 'carbon-font))
(set-default-font my-font)
(add-to-list 'default-frame-alist `(font . ,my-font))
(when (= emacs-major-version 23)
  (set-fontset-font
   (frame-parameter nil 'font)
   'japanese-jisx0208
   '("M+ 1mn" . "iso10646-1"))
  (setq face-font-rescale-alist
    '(("^-apple-M+_1mn.*" . 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)
      ("-cdac$" . 1.3))))