japanese-hankaku-region (選択範囲を半角に変換)をキーバインド
GNU Emacsの関数japanese-hankaku-region
は、選択範囲の日本語の全角文字(JIS X0208)を(可能なら)半角に変換する。これはとても便利で頻繁に使うのでキーにバインドしておく。
japanese-hankaku-region
は
(defun japanese-hankaku-region (from to &optional ascii-only)
(interactive "r\nP")
という形になっている。引数from
とto
は変換範囲。3番目のオプショナルな引数ascii-only
は、nil
でない値を指定すれば、ASCII文字に変換可能な文字だけが変換対象となる。つまり全角の英数字や一部の記号のみASCII文字に変換し、ひらがな、カタカナなどは変換しない。ascii-only
を指定しなかったら、ひらがなやカタカナも半角カタカナに変換される。(そう、ひらがなも!)
インタラクティブな呼び出しの際には、interactive
の引数デスクリプタにより、from
とto
は現在の選択範囲となってくれる…のだが、私は3番目のオプション引数ascii-only
としてt
を指定したい。そのためにはfrom
とto
も省略せず明示的に指定するしかない(と思った)ので、global-set-key
に指定するコマンドとしては次のようにラムダ式で記述せざるを得なかった。
(global-set-key (kbd "C-x C-h") '(lambda ()
(interactive)
(japanese-hankaku-region (region-beginning) (region-end) t)))
これを~/.emacs.d/init.el
に加えておけば、Ctrl+x
Ctrl+h
の打鍵で現在の選択範囲の全角文字が半角ASCIIに変換されるようになる。
japanese-zenkaku-region (選択範囲を全角に変換)もキーバインド
japanese-zenkaku-region
はあまり使わないけど、対称の機能なので、ついでにバインドしておく。これもjapanese-hankaku-region
と同様に
(defun japanese-zenkaku-region (from to &optional katakana-only)
(interactive "r\nP")
という形になっているのだが、私にはkatakana-only
の指定は必要なく、したがって、すべての引数を省略できるので、
(global-set-key (kbd "C-x C-z") 'japanese-zenkaku-region)
だけでOK。
長音がASCIIハイフンに変換されてしまう問題
バージョンによるかもしれないが、私が使っている GNU Emacs 27.1 (build 1, x86_64-w64-mingw32) では、ascii-only
を指定した場合でも、カナの長音「ー」がASCIIのハイフンに変換されてしまう。たとえば「アーティスト」は「ア-ティスト」になってしまう。これはよろしくない。
その原因はjapan-util.el
ファイル内の japanese-symbol-table
にあった。このテーブルの中に (?ー ?- ?ー)
があったので、これを削除してbyte-compile
して解決。