LoginSignup
4
3

More than 5 years have passed since last update.

Emacsでバックスラッシュが円記号で表示されるフォントを使ってもちゃんと逆スラッシュで表示したい

Posted at

気に入ったフォントのU+005Cが円記号だった……しにたい……ってなったときのためのネタ。
自分の場合はフォントスムージングがかけられない残念環境を利用するためにやむを得ず「MS ゴシック(MSは全角)」を使う時用に作りました。

-
こうする。

;; バックスラッシュを円記号から斜線に置き換える
(setq-default buffer-display-table (or (default-value 'buffer-display-table)
                                       standard-display-table
                                       (make-display-table)))
(aset buffer-display-table ?\\ [?\x2572])

display-tableを使ってバックスラッシュを画面上の表示だけ別のキャラクタに置き換えるという超無理やりな解決法です。
今回使用したU+2572は罫線パーツの文字セル対角線キャラクタです。高さと幅が他の半角文字と同一だったので利用しちゃいました。
自環境ではほぼスラッシュの逆にしか見えないのでとっても良い感じです。

もし使ってるフォントからEmacsで表示できる良い感じの逆スラッシュを探したいなら、

;; 総当り
(let ((x -1))
  (while (> 65536 (setq x (1+ x)))
    (insert x "\n")))

こんなのを評価して総当りで探すのが手っ取り早いです。
フォントって実はそんなに多くないので探しやすいです。
いい文字が見つかったら文字コード確認して上の式から値だけ置き換えればOKです。

今回buffer-display-tableを利用してますが、standard-display-tableっていうのもあります。というか本来はそっちを設定するのが正解です。
なぜそうしていないのかというと、whitespace-modeと相性が悪かったからです。
あっちがbuffer-display-tableを利用していろいろ表示してるので、whitespace-modeを有効化するとstandard-display-tableの設定が反映されなくなってしまいます。
というわけで、buffer-display-tableのグローバル値に書き込むなんていう無茶なことをやって共存させています。
もしglobal-whitespace-modeと一緒に使いたいなら、上の設定はglobal-whitespace-modeの有効化より前に評価する必要があります。でないと全体に反映されなくなります。

スラッシュだけ別フォントを呼び出すっていうのも考えたけど、サイズが合うかどうかとか、そもそもスラッシュが綺麗に表示されるフォントを探すのがめんどくさかったとかいろいろあったのでこんな感じでおしまいです。

-
こんな問題にぶち当たったりもしたので、今はビットマップフォントでありバックスラッシュがきちんと逆スラッシュで出力されて等幅であり可読性が高いフォントを探しています(厳しい)。しかし、どうしても可読性の点で「MS ゴシック(MSは全角ですよ!!!!)」が意外と優秀で、まだ良いモノに出会えないでいます。
何か良いモノを知っている方がいましたら、教えてください!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3