¬の見た目がおかしい、ということでゴニョゴニョ設定したのですが、古いバージョンの Ricty のバグだったみたいです。
-a したので × も半角化しちゃって、折衷案を取れないか思い立つ。
てなわけで fontforge で Rictyのフォントを眺めていたり。
それで Migu 1M の NOT SIGN な 00ac を見たらなんと半角。どのタイミングで全角に変わったんだ、とか思ってソースを見ると該当部分は見当たらず。
もしやと思って -a 無しの 3.2.2 で、¬は半角、×は全角のRictyに。
ってことは 3.1.3 から 3.2.2 の間で修正されたのかな。
もしくは Migu 1M が修正されたのかもしれない。
ともかくこれで ¬ が直った。フォント周りの道は険しいっぽい。
ga で文字コード検証からの fontforge で width 確認して修正、がフォント周りの対処法になりそう。
ちなみにソース眺めてると特定の文字を replace するスクリプトが misc の下にあったりしたので、それでいじることもできそう。
ってな訳でアップデートしたら直りました、という感じでしたまる。
2014/03/16
unicode の east asian ambiguous 文字 : その2
East Asian Ambiguous な設定をして一段落、と思っていた矢先、¬ の記号が「全角で表示されるのに半角扱いの移動」になる。
さて、今回は Vim でも Emacs でも再現するので設定の問題じゃなさそう。
ということで ¬ が East Asian Ambiguous なのか、ということから調べてみる。
vim で ga すると 00ac らしい。
その辺りを調べてみる と、00ac は NOT SIGN で、それとは別に ffe2 に FULLWIDTH NOT SIGN があるらしい。むむ。
not sign なのに full width になってるのでこれはフォント側の問題っぽい。
ということで Ricty を再生成することに。最新 stable は 3.2.2 なので
フォントは Inconsolata と Migu 1M が必要。あと依存で fontforge。 brew にあった。
-a は full width を無効化するオプション。なのでこれで予想外の全角化は消えるはず。
-n はフォント名に追加で string を足すオプション。 Ricty 3.2.2-half くらいになる。
Ricty 3.2.2 half にしたかったんだけれど、内部処理でスペースを消してるらしくて-にする。
フォントを変えたらどうにか ¬ が半角化した。
フォントを変えただけで、VimとかEmacsとかの設定は基本的に前回から変えてない。
あと、emacs の設定が 22 と23以降で別々な文字テーブルを参照していたのでどうにかこうにか統一する。コピペ用 gist は一番下。
emacs 22 の utf-translate-cjk-set-unicode-range は要素に #x00A1 とかがあるとダメで、(#x00A1 . #x00A1) にしないといけないらしい。なんでだろ。
とりあえず emacs 23 用の設定の方が大量に書かれていたので、それをベースにまとめる。
これでどうにか同一テーブルを参照するようになった。
あとこの辺
A とか F とかは Unicode が持ってる property らしい。
A は Ambiguous で、 F は Full width とかいろいろある。
詳しいのはこの辺。というか本家っぽい。
おかしい文字があったら文字コード調べてみて、ここでUnicodeの設定的にどうなっているかとか確認しないと、フォントの問題なのかとかの切り分けができなさそう。
というかこういう風にいろんなところでズレてたりすると結構面倒感。
対症療法を取っているけれど、どこが問題でどっちを直すべきなのかとか結構厄介だなー、とか。
ということで記号周り厄介だなー。また何か発生しそう。
emacs 側なら Unicode 指定で width 指定してしまえばどうにでもなってしまいそう。
Vim は ambiwidth の対象かそうじゃないかでまた一悶着ありそう。
まー、 ¬ の問題は乗り切った、ということにしたい。
コピペ用設定gistはこんな感じ。
さて、今回は Vim でも Emacs でも再現するので設定の問題じゃなさそう。
ということで ¬ が East Asian Ambiguous なのか、ということから調べてみる。
vim で ga すると 00ac らしい。
その辺りを調べてみる と、00ac は NOT SIGN で、それとは別に ffe2 に FULLWIDTH NOT SIGN があるらしい。むむ。
not sign なのに full width になってるのでこれはフォント側の問題っぽい。
ということで Ricty を再生成することに。最新 stable は 3.2.2 なので
$ git clone https://github.com/yascentur/Ricty.gitくらいで。
$ cd Ricty
$ git checkout -b 3.2.2
$ ./ricty_generator.sh -a -n "3.2.2-half" auto
フォントは Inconsolata と Migu 1M が必要。あと依存で fontforge。 brew にあった。
-a は full width を無効化するオプション。なのでこれで予想外の全角化は消えるはず。
-n はフォント名に追加で string を足すオプション。 Ricty 3.2.2-half くらいになる。
Ricty 3.2.2 half にしたかったんだけれど、内部処理でスペースを消してるらしくて-にする。
フォントを変えたらどうにか ¬ が半角化した。
フォントを変えただけで、VimとかEmacsとかの設定は基本的に前回から変えてない。
あと、emacs の設定が 22 と23以降で別々な文字テーブルを参照していたのでどうにかこうにか統一する。コピペ用 gist は一番下。
emacs 22 の utf-translate-cjk-set-unicode-range は要素に #x00A1 とかがあるとダメで、(#x00A1 . #x00A1) にしないといけないらしい。なんでだろ。
とりあえず emacs 23 用の設定の方が大量に書かれていたので、それをベースにまとめる。
これでどうにか同一テーブルを参照するようになった。
あとこの辺
FFE0;F # FULLWIDTH CENT SIGNとかが全角化対象じゃなかったので追加。A幅じゃなくてF幅なので East Asian Ambiguous とはまた別の問題なのかもしれないけれど。
FFE1;F # FULLWIDTH POUND SIGN
FFE2;F # FULLWIDTH NOT SIGN
FFE3;F # FULLWIDTH MACRON
FFE4;F # FULLWIDTH BROKEN BAR
FFE5;F # FULLWIDTH YEN SIGN
FFE6;F # FULLWIDTH WON SIGN
A とか F とかは Unicode が持ってる property らしい。
A は Ambiguous で、 F は Full width とかいろいろある。
詳しいのはこの辺。というか本家っぽい。
おかしい文字があったら文字コード調べてみて、ここでUnicodeの設定的にどうなっているかとか確認しないと、フォントの問題なのかとかの切り分けができなさそう。
というかこういう風にいろんなところでズレてたりすると結構面倒感。
対症療法を取っているけれど、どこが問題でどっちを直すべきなのかとか結構厄介だなー、とか。
ということで記号周り厄介だなー。また何か発生しそう。
emacs 側なら Unicode 指定で width 指定してしまえばどうにでもなってしまいそう。
Vim は ambiwidth の対象かそうじゃないかでまた一悶着ありそう。
まー、 ¬ の問題は乗り切った、ということにしたい。
コピペ用設定gistはこんな感じ。
2014/03/11
unicode の east asian ambiguous 文字
最近、 Agda を使ったりしているので agda-mode な emacs にちょっと手を出していたりします。
Agda は π やら ∀ やらの記号を容赦なく使うので、iTerm2 では agda-mode 時に emacs の表示がおかしくなることがありました。
iTerm2 の問題かと思って Terminal に戻ってきたは良いものの、今度は ∀ とかが一文字幅になってしまって表示がおかしい。
Terminal の
どうやら Unicode East Asian Ambiguous とやらが問題らしい。
調べてみると、∀ とかが全角なのは国によるっぽい。
特に日本は全角だけれど、アメリカだと半角らしい。
国によるので幅が曖昧な文字がUnicodeにあるとか。
それが Unicode East Asian Ambiguous みたい。
なので、Inconsolata とかの英字フォントにすると問題の記号が全部半角になって表示が正しくなる。
が、そうすると日本語がヤバそう。
私が使っているフォントは Ricty なので、日本語や記号は Migu に依存してる。
Migu は日本語フォントなので、とりあえず全てを全角に統一することにしました。
Terminal だと
iTerm2 だと
する。というか既にしてた。
emacs 22 では utf-translate-cjk-set-unicode-range を使う と良いっぽい。
23 以降では cjk が消えたらしく、別の方法があるっぽい。
んで、問題はこれら2つは完全に互換が無いこと。
22 の設定方法を 23 以降に適用すると cjk が消えちゃってる。
23 以降の設定を 22 に適用すると、 char-width-table が無いとか言われる。
加えて Mountain Lion とか Marvericks とかの emacs が 22 なのと、brew で入れられる emacs が 24 だったりでちょっとアレしたので両方に対応できる設定にしてみるなど。
設定はこんな感じ。単に emacs-major-version で場合分けしているだけだけれど。
下にコピペで使える状態な gist を置いておきます。
とりあえず 22.1.1 と 24.3 で表示の問題が無いことは確認できた。
elisp 書いたこと無いのでどこか変かもしれない。
とりあえずはこれで良いかなー、とか。
英語フォントにするなら width を single に統一すればたぶん問題無いはず。
ただ、iTerm2 に乗り換えた後に勘違いで Terminal に返ってきて、ちゃんと設定した結果どっちでも良いことが確認できたんだけれど、これどっち使おうかなー、ってなってたりもする。どーするかな。
んで設定コピペ用 gist は以下。
Agda は π やら ∀ やらの記号を容赦なく使うので、iTerm2 では agda-mode 時に emacs の表示がおかしくなることがありました。
iTerm2 の問題かと思って Terminal に戻ってきたは良いものの、今度は ∀ とかが一文字幅になってしまって表示がおかしい。
Terminal の
Preferences -> Advanced -> Unicode East Asian Ambiguous character are wideのチェックを入れると解決はするんだけれど、iTerm2と同じ状況になる。
どうやら Unicode East Asian Ambiguous とやらが問題らしい。
調べてみると、∀ とかが全角なのは国によるっぽい。
特に日本は全角だけれど、アメリカだと半角らしい。
国によるので幅が曖昧な文字がUnicodeにあるとか。
それが Unicode East Asian Ambiguous みたい。
なので、Inconsolata とかの英字フォントにすると問題の記号が全部半角になって表示が正しくなる。
が、そうすると日本語がヤバそう。
私が使っているフォントは Ricty なので、日本語や記号は Migu に依存してる。
Migu は日本語フォントなので、とりあえず全てを全角に統一することにしました。
環境
- Mac OSX Mountain Lion
- Terminal : Version 2.3 (309)
- iTerm2 : Build 1.0.0.20140112
- Vim 7.4.192
- Emacs 22.1.1 / 24.3
- Font : Ricty
対策
iTerm2 / Terminal
East Asian Ambiguous を wide にする。Terminal だと
Preferences -> Advanced -> Unicode East Asian Ambiguous character are wideをチェック。
iTerm2 だと
Preferences -> Profiles -> Text -> Double-width Characters -> Treat ambiguous-width character as double widthにチェック。
Vim
set ambiwidth=doubleする。というか既にしてた。
Emacs
なんか22と23で違うらしい。emacs 22 では utf-translate-cjk-set-unicode-range を使う と良いっぽい。
23 以降では cjk が消えたらしく、別の方法があるっぽい。
んで、問題はこれら2つは完全に互換が無いこと。
22 の設定方法を 23 以降に適用すると cjk が消えちゃってる。
23 以降の設定を 22 に適用すると、 char-width-table が無いとか言われる。
加えて Mountain Lion とか Marvericks とかの emacs が 22 なのと、brew で入れられる emacs が 24 だったりでちょっとアレしたので両方に対応できる設定にしてみるなど。
設定はこんな感じ。単に emacs-major-version で場合分けしているだけだけれど。
下にコピペで使える状態な gist を置いておきます。
とりあえず 22.1.1 と 24.3 で表示の問題が無いことは確認できた。
elisp 書いたこと無いのでどこか変かもしれない。
とりあえずはこれで良いかなー、とか。
英語フォントにするなら width を single に統一すればたぶん問題無いはず。
ただ、iTerm2 に乗り換えた後に勘違いで Terminal に返ってきて、ちゃんと設定した結果どっちでも良いことが確認できたんだけれど、これどっち使おうかなー、ってなってたりもする。どーするかな。
んで設定コピペ用 gist は以下。
登録:
投稿 (Atom)