【コラム】

OS X ハッキング!

332 Cocoa対応で大きく変わった「Emacs 23.1」(2)

    海上忍  [2009/08/14]

    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))))
    

    関連サイト

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン