スポンサーサイト
Linux と Windows で使っていた設定ファイルを Mac OS X に拡張した
大学で MacBook Pro を使い始めたので、Linux (Ubuntu, Debian, Fedora, CentOS, OpenSUSE) と Windows (Cygwin 他) で使っていた UNIX な dotfiles を Mac OS X にも対応させようという企画。
OS X は UNIX!
Linux 系のシステムと BSD 系のシステムでコマンドオプションが若干違うよっていう話。
MacVim のフォント設定は KaoriYa の Windows 版と同じ書き方。
まず、分岐の記述を簡単にするために変数を定義する。
OS X は UNIX!
.{z,ba}shrc
問題が発生したのは ls の alias で色をつける部分。Linux 系のシステムと BSD 系のシステムでコマンドオプションが若干違うよっていう話。
case "$OSTYPE" in
linux* ) alias ls='ls -F --color=auto' ;;
cygwin* ) alias ls='ls -F --color=auto' ;;
darwin* ) alias ls='ls -FG' ;;
* ) alias ls='ls -F' ;;
esac
.gvimrc (GVim/GVim (KaoriYa ビルド)/MacVim)
私は Vimmer じゃなくてあまりガチな設定ファイルを書いていないので、手を入れたのはフォントまわりだけ。MacVim のフォント設定は KaoriYa の Windows 版と同じ書き方。
if has('gui_macvim') || has('win32') || has('win64')
set guifont=VL\ Gothic:h13.5
else
set guifont=VL\ Gothic\ 13.5
endif.emacs (Emacs/NTEmacs (gnupack ビルド)/Cocoa Emacs)
Emacs はめんどうくさかった。まず、分岐の記述を簡単にするために変数を定義する。
(setq linux-p (string-match "linux" system-configuration))文字コードまわり (ここは自信がない)。
(setq darwin-p (string-match "darwin" system-configuration))
(setq mingw-p (string-match "mingw" system-configuration))
(set-default-coding-systems 'utf-8)日本語入力まわり。
(prefer-coding-system 'utf-8-unix)
(setq default-buffer-file-coding-system 'utf-8-unix)
(cond
((or linux-p darwin-p)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-file-name-coding-system 'utf-8))
(mingw-p
(set-terminal-coding-system 'sjis)
(set-keyboard-coding-system 'sjis)
(setq default-file-name-coding-system 'sjis)))
(condフォントまわり (現時点で Cocoa Emacs は全角文字を含むフォントをプライマリに設定すると色々ちゃんと動いてくれない)。
(linux-p
(if (require 'mozc nil t)
(setq default-input-method "japanese-mozc")
(setq default-input-method "japanese-anthy")))
(darwin-p
(setq default-input-method "MacOSX"))
(mingw-p
(setq default-input-method "W32-IME")))
(if darwin-p
(set-face-attribute 'default nil
:family "DejaVu Sans Mono"
:height 135)
(set-face-attribute 'default nil
:family "VL Gothic"
:height 135))
(set-fontset-font (frame-parameter nil 'font)
'japanese-jisx0208
'("VL Gothic" . "iso10646-1"))
コーディングフォントのサイズ、12 pt 派から 13.5 pt 派になった。
んで、使っているツールのフォント設定を適当に。
マルチプラットフォームアプリケーション編 (Linux と Windows だけだけど……)
Emacs/NTEmacs (下 3 行は Linux の Emacs では不要)
GVim
Linux 編
gedit と gnome-terminal。
フォントサイズ一覧に 13.5 pt はないが、何も考えずに 13.5 と書いて設定。
Windows 編
mintty とサクラエディタとメモ帳。
何も考えずに 13.5 pt にしようと思ったら「サイズは数字で指定してください」と怒られた。
仮想マシンで Linux を開きながらにらめっこしたら 14 pt が 13.5 pt と同じ横幅だった (13 pt ではない!)。
Windows のフォントレンダリングはふしぎがいっぱい。
マルチプラットフォームアプリケーション編 (Linux と Windows だけだけど……)
Emacs/NTEmacs (下 3 行は Linux の Emacs では不要)
(set-face-attribute 'default nil
:family "VL Gothic"
:height 135)
(set-fontset-font (frame-parameter nil 'font)
'japanese-jisx0208
'("VL Gothic" . "iso10646-1"))
GVim
if has('win32') || has('win64')
set guifont=VL_Gothic:h13.5:cSHIFTJIS
else
set guifont=VL\ Gothic\ 13.5
endifLinux 編
gedit と gnome-terminal。
フォントサイズ一覧に 13.5 pt はないが、何も考えずに 13.5 と書いて設定。
Windows 編
mintty とサクラエディタとメモ帳。
何も考えずに 13.5 pt にしようと思ったら「サイズは数字で指定してください」と怒られた。
仮想マシンで Linux を開きながらにらめっこしたら 14 pt が 13.5 pt と同じ横幅だった (13 pt ではない!)。
Windows のフォントレンダリングはふしぎがいっぱい。
プログラミング向け等幅フォントの横幅を調べてみた
欧文フォントは欧米人が作ったもの良い。
和文フォントは日本人が作った物が良い。
というようなモチベーションがありあまして、Emacs、Vim などでは欧文・和文に別々のフォントを割り当てるのが一般的です。
他のアプリケーションでも、欧文フォントを指定すると、足りないグリフを何らかの和文フォントで補完するような仕組みになっています。
しかし、これをやると大抵、半角文字:全角文字 = 1:2 のバランスが崩れてしまいます (Vim のように 1:2 を決め打ちしているアプリケーションもあります)。
ということで、いくつかの有名なフォント (Ubuntu apt にあったもの) について横幅を調べてみました。

結論から言うと、2 種類しかありませんでした。
欧文フォントの多くは Courier 互換で作られているため 10 ピッチ (幅を表す単位) で、和文フォントの多くは 12 ピッチでした。
これらを愚直に合わせようとすると、半角文字:全角文字 = 1:1.67 (= 3:5) になります。
この比を 1:2 にするためには、和文文字を何とかして 120 % 拡大する必要があります。
で、この結果から個人的に導いたアイデアはこうです。いずれ時間を作って検討してみるということで忘備録。
「1:1.67 を無理矢理 1:2 にするくらいならいっそ 1:1.5 (= 2:3) にしてしまえ」
以下が、今回調べた中で 10 ピッチのフォントです。
Courier 10 Pitch/Nimbus Mono L/Courier New
DejaVu Sans Mono/Bitstream Vera Sans Mono
Droid Sans Mono
Liberation Mono
Andale Mono
Lucida Sans Typewriter
以下が、今回調べた中で 12 ピッチのフォントです。
Inconsolata ← 今回調べた中で唯一の 12 ピッチ欧文フォント
IPAゴシック
さざなみゴシック/東風ゴシック
梅ゴシック
KonatuTohaba (小夏フォント)
VL ゴシック
M+ 1m/1mn/2m
和文フォントは日本人が作った物が良い。
というようなモチベーションがありあまして、Emacs、Vim などでは欧文・和文に別々のフォントを割り当てるのが一般的です。
他のアプリケーションでも、欧文フォントを指定すると、足りないグリフを何らかの和文フォントで補完するような仕組みになっています。
しかし、これをやると大抵、半角文字:全角文字 = 1:2 のバランスが崩れてしまいます (Vim のように 1:2 を決め打ちしているアプリケーションもあります)。
ということで、いくつかの有名なフォント (Ubuntu apt にあったもの) について横幅を調べてみました。

結論から言うと、2 種類しかありませんでした。
欧文フォントの多くは Courier 互換で作られているため 10 ピッチ (幅を表す単位) で、和文フォントの多くは 12 ピッチでした。
これらを愚直に合わせようとすると、半角文字:全角文字 = 1:1.67 (= 3:5) になります。
この比を 1:2 にするためには、和文文字を何とかして 120 % 拡大する必要があります。
で、この結果から個人的に導いたアイデアはこうです。いずれ時間を作って検討してみるということで忘備録。
「1:1.67 を無理矢理 1:2 にするくらいならいっそ 1:1.5 (= 2:3) にしてしまえ」
以下が、今回調べた中で 10 ピッチのフォントです。
Courier 10 Pitch/Nimbus Mono L/Courier New
DejaVu Sans Mono/Bitstream Vera Sans Mono
Droid Sans Mono
Liberation Mono
Andale Mono
Lucida Sans Typewriter
以下が、今回調べた中で 12 ピッチのフォントです。
Inconsolata ← 今回調べた中で唯一の 12 ピッチ欧文フォント
IPAゴシック
さざなみゴシック/東風ゴシック
梅ゴシック
KonatuTohaba (小夏フォント)
VL ゴシック
M+ 1m/1mn/2m
Emacs で等幅フォントの半角文字・全角文字の横幅比 1:2 を必ず達成するフォント設定
等幅フォントでは、3 の倍数以外のフォントサイズを使用すると、半角文字と全角文字の横幅比が 1:2 にならないことが知られています。
これは、フォントサイズ (pt) をピクセル数 (px) に変換する式が次のようになっているからです (参考: オーナードローでの描画時のフォントサイズの求め方)。
Pixel = Point * DPI / 72
DPI というのは dots per inch のことで、1 インチに収まるドットの数です。
最近の OS はどれもデフォルト値が 96 DPI に設定されているようです。
この式にフォントサイズを適当に代入してみます。
現在、テキストエディタで一般的なフォントサイズは 8 pt から 16 pt までくらいでしょうか。
8 pt * 96 DPI / 72 = 10.666 px 〜 11 px (小数点以下は四捨五入されるようです)
9 pt * 96 DPI / 72 = 12 px
10 pt * 96 DPI / 72 = 13.333 px 〜 13 px
11 pt * 96 DPI / 72 = 14.666 px 〜 15 px
12 pt * 96 DPI / 72 = 16 px
13 pt * 96 DPI / 72 = 17.333 px 〜 17 px
14 pt * 96 DPI / 72 = 18.666 px 〜 19 px
15 pt * 96 DPI / 72 = 20 px
16 pt * 96 DPI / 72 = 21.333 px 〜 21 px
このピクセル値が全角文字の横幅 (ドットの数) となります。
ピクセル値が奇数のときは 1:2 のバランスが崩れてしまいます。
さて、Emacs (23 系) のフォント設定は一般的に次のようにします (参考: Emacs23のフレーム幅が直った)。
そこで、端からピクセル値を設定することにします。
14 px 以外にも 12 px (9 pt)、16 px (12 pt)、18 px (13.5 pt)、20 px (15 pt)、22 px (16.5 pt) あたりが有効かと思います。
これは、フォントサイズ (pt) をピクセル数 (px) に変換する式が次のようになっているからです (参考: オーナードローでの描画時のフォントサイズの求め方)。
Pixel = Point * DPI / 72
DPI というのは dots per inch のことで、1 インチに収まるドットの数です。
最近の OS はどれもデフォルト値が 96 DPI に設定されているようです。
この式にフォントサイズを適当に代入してみます。
現在、テキストエディタで一般的なフォントサイズは 8 pt から 16 pt までくらいでしょうか。
8 pt * 96 DPI / 72 = 10.666 px 〜 11 px (小数点以下は四捨五入されるようです)
9 pt * 96 DPI / 72 = 12 px
10 pt * 96 DPI / 72 = 13.333 px 〜 13 px
11 pt * 96 DPI / 72 = 14.666 px 〜 15 px
12 pt * 96 DPI / 72 = 16 px
13 pt * 96 DPI / 72 = 17.333 px 〜 17 px
14 pt * 96 DPI / 72 = 18.666 px 〜 19 px
15 pt * 96 DPI / 72 = 20 px
16 pt * 96 DPI / 72 = 21.333 px 〜 21 px
このピクセル値が全角文字の横幅 (ドットの数) となります。
ピクセル値が奇数のときは 1:2 のバランスが崩れてしまいます。
さて、Emacs (23 系) のフォント設定は一般的に次のようにします (参考: Emacs23のフレーム幅が直った)。
(set-default-font "IPAGothic-11:spacing=0")この設定では、11 pt で 15 px となるので、1:2 のバランスが崩れてしまいます。
そこで、端からピクセル値を設定することにします。
(set-default-font "IPAGothic:pixelsize=14:spacing=0")14 px というのは、Windows で見かける 10.5 pt というフォントサイズに相当します。
14 px 以外にも 12 px (9 pt)、16 px (12 pt)、18 px (13.5 pt)、20 px (15 pt)、22 px (16.5 pt) あたりが有効かと思います。
プログラミングでの視認性向上を意図した Courier フォントの改変 Ver. 2
1 年ほど前に「プログラミングでの視認性向上を意図したCourierフォントの改変」にて作成した My Courier 10 Pitch に飽きてきたので Version 2 を作りました。
今回も目的は前回と同じく 0/O、1/l の区別です。
方法としては、ゼロは前回と同じく dotted zero、
そして、すべての数字のセリフをそぎ落としました。

1 行目がオリジナルの Courier 10 Pitch、
2 行目が今回作成した My Courier 10 Pitch、
3 行目も My Courier 10 Pitch で左から順に 1l|!/\0OoD です。
Version 1 のくどくどしい slashed one から一転して、
数字全体がシンプルですっきりとした印象になりました。
しばらくはこれを使おうかと思います。
今回も目的は前回と同じく 0/O、1/l の区別です。
方法としては、ゼロは前回と同じく dotted zero、
そして、すべての数字のセリフをそぎ落としました。

1 行目がオリジナルの Courier 10 Pitch、
2 行目が今回作成した My Courier 10 Pitch、
3 行目も My Courier 10 Pitch で左から順に 1l|!/\0OoD です。
Version 1 のくどくどしい slashed one から一転して、
数字全体がシンプルですっきりとした印象になりました。
しばらくはこれを使おうかと思います。
