Emacs のフォント設定について

# はじめに

Emacs はヘビーユーザではないが、初めて使ったのは20年以上前になる。プログラム開発は vi、日本語ドキュメントの作成、編集に Emacs を使っていた。しかし、ここ最近は Emacs から遠ざかっていた。理由は最近の綺麗なフォントを利用するのが面倒だったから。Windows では　xyzzy で MeiryoKe_Console に設定して使っている。
sublimetext, Atom など試してみて、しっくりこなかったので久しぶりに Emacs に戻ってみることにした。

# 参考 URL

* http://d.hatena.ne.jp/kazu-yamamoto/20140625/1403674172
* http://dminor11th.blogspot.com/2011/08/face.html
* http://d.hatena.ne.jp/tomoya/20100828/1282948135
* http://d.hatena.ne.jp/dundubhi/20100828/1283089489
* http://ics-web.jp/lab/archives/7010
* http://extra-vision.blogspot.co.uk/2016/07/emacs.html

# メモ

- 設定は frame か face に対して行う
- fontset は character set 毎に font を指定したもの
- fontset-default というものがある
- 新しく fontset を定義して frame, face に割当る方が美しい感じだけど，fontset-default を変更してしまう方が簡単そう

# 使えるコマンド
- character set の一覧を調べる: M-x list-character-sets 
- character set の文字一覧を確認する: M-x list-charset-chars RET japanese-jisx0208 RET
- set-frame-font "font name" t
- M-x describe-font
- M-x describe-fontset
- カーソル位置の face を調べる: (get-char-property (point) 'face)
- カーソル位置の文字情報を調べる: "C-u C-x ="
- フォントサイズが合わない: face-font-rescale-alist

# 設定の理解

```elisp
(set-face-attribute 'default nil :family "Hoge" :height 140)
```
face名 'default
frame が nil
frame名を指定しないか、nil だった場合は新規の frame だけでなく既存の frame にも設定する


```elisp:set-fontset-font
(set-fontset-font name character font-spec &optional ....
```

既存のフォントセット name に変更を加える。
character にマッチするものを font-spec で指定したものを適用する。

name が nil の場合、選択された frame か option で指定した frame(nil でない)を変更する
name が t の場合、default fonset を変更する、短縮名は fontset-default
character は cons 形式で (from . to) の codepoint
か font-spec (family . registry)

たとえば、default fontset で、 japanese-jisx0208 のすべての character について
family name が "Kochi Gothic" のフォントを利用するように変更したい場合

```elisp
(set-fontset-font t 'japanese-jisx0208 (font-spec :family "Kochi Gothic"))
```

```elisp:fontsetを作る
(create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror)
```

# フォントリストを表示する。

```el
(dolist (x (x-list-fonts "*")) (print x))
``` 

# Mac で family 名を確認する
- font book を起動する
- 確認したいフォントを選択する
- ツールバーの i ボタンを押す

scrach バッファで

```el
(dolist (x (font-family-list)) (print x))
```

# Windows でフォント名を確認する
scrach バッファで下記を実行して、フォントセレクタで該当フォントを選択する。

```el
(w32-select-font)
```

# Windows 分の設定
- **希望通りに設定されない。fontset を作ってしまうと rescale が全体にかかっているように見える**
- Inconsolata と MeiryoKe_Console をインストール
- Windows 7 に gnupack 13.05 をインストール
- 行間が詰まり気味なので、行間も調整している。

```el:良いバージョン
(set-face-attribute 'default nil :family "Inconsolata" :height 110)
;(set-face-attribute 'default nil :family "Consolas" :height 104)
(set-fontset-font nil 'japanese-jisx0208 (font-spec :family "MeiryoKe_Console"))
(setq face-font-rescale-alist '(("MeiryoKe_Console" . 1.08)))
```


```el:ダメバージョン
(create-fontset-from-ascii-font
  "Inconsolata-14:weight=normal:slant=normal:pixelsize=18" nil "InconsolataMeiryoConsole")
(set-fontset-font
  "fontset-InconsolataMeiryoConsole" 'japanese-jisx0208 (font-spec :family "MeiryoKe_Console" :size 14))
(add-to-list 'face-font-rescale-alist
             '(".*MeiryoKe_Console.*" . 1.3))
(add-hook 'after-init-hook
  (lambda () (set-frame-font "fontset-InconsolataMeiryoConsole")))
(add-to-list 'default-frame-alist
             '((font . "fontset-InconsolataMeiryoConsole")
               (ime-font . "fontset-InconsolataMeiryoConsole")))
(add-to-list 'initial-frame-alist
             '((font . "fontset-InconsolataMeiryoConsole")
               (ime-font . "fontset-InconsolataMeiryoConsole")))

(setq-default line-spacing 3)
```

# 引用
[cocoa emacsでプログラミング用フォントRictyを使う](http://blog.sanojimaru.com/post/19807398882/cocoa-emacs%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E7%94%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88ricty%E3%82%92%E4%BD%BF%E3%81%86)

```el:RictyDiminish
;; Fonts
(let* ((size 15)
       (asciifont "Ricty")
       (jpfont "Ricty")
       (h (* size 10))
       (fontspec (font-spec :family asciifont))
       (jp-fontspec (font-spec :family jpfont)))
  (set-face-attribute 'default nil :family asciifont :height h)
  (set-fontset-font nil 'japanese-jisx0213.2004-1 jp-fontspec)
  (set-fontset-font nil 'japanese-jisx0213-2 jp-fontspec)
  (set-fontset-font nil 'katakana-jisx0201 jp-fontspec)
  (set-fontset-font nil '(#x0080 . #x024F) fontspec) 
  (set-fontset-font nil '(#x0370 . #x03FF) fontspec))
```

# 愚痴

Winodws 7, 10 でどう頑張っても Mac と同レベルにはできなそう．
MacType をインストールして少しましになったけど，

"Source Han Code JP" がどうしても綺麗に表示されない。
~~Atom だったらなんの問題もないのに。~~ 嘘，2:3 になってなかった．