気に入ったフォントの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は全角ですよ!!!!)」が意外と優秀で、まだ良いモノに出会えないでいます。
何か良いモノを知っている方がいましたら、教えてください!