Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[メモ]Emacsで漢字→かな変換

Emacsをドキュメントビューアとして使っていますが、時々漢字の読み方がわからないことに遭 遇します。漢字から意味を読み取ったとしても、読み方がわからない場合が多いい。いままで 一々ブラウザに切り替えて調べました。せっかくEmacsを使っているので自動化してみました。

1 考案

  1. スクラップ開発:選択テキストを漢字なか変換Webサービスに投げって応答を表示する
  2. 既存のものを使う

効率を考えて2の近道を選択しました。

ひとまず、 list-packages でELPAに登録されたパッケージを検索した、意外に当てはまる ものもが見つかりませんでした。googleしたら skk-kakasi.el が浮上してきた。

例の Meadow/Emacs memo21.3.2 漢字をひらがなへ変換 ― skk-kakasi セクションに 機能紹介がありました。以下はその内容の引用です。

これは SKK に附属しています。 skk-kakasi.el です。
動作には kakasi が必要です。
例えば,
読み方の分からない文字をリージョンで選択し, skk-gyakubiki-message とすると, ミニバッファ
によみ方が出力されます. ただし, 第 1 候補のみ. C-u M-x skk-gyakubiki-messageとすると,
すべての候補が出力されます. 他にも漢字の混ざった文章にふり仮名をという文章を選択し,
skk-hurigana-regionとすると漢字 [かんじ] の混ざ [まざ] った文章 [ぶんしょう] にふり仮
名 [かな] をとできます. 他にもいろいろと用意されているので, 一度ソースを読んで見てくだ
さい. ちゃんと日本 語で詳しく説明してありますよ.

早速導入してみた、以下はその手順です。

2 skk-kakasi.el の導入手順

skk-kakasi.el の導入に必要なもの

2.1 KAKASIのインストール

Archlinuxをお使いなので sudo pacman -S kakasi で一発でインストールが出来ました。

[akira@jizai .emacs.d]$ sudo pacman -S kakasi
依存関係を解決しています...
相互衝突をチェックしています...

パッケージ (1): kakasi-2.3.6-1

Total Download Size:    0.69 MiB
Total Installed Size:   2.36 MiB

:: インストールを行いますか? [Y/n] 
:: パッケージを取得します ...
 kakasi-2.3.6-1-x86_64                                                                                708.8 KiB  3.96M/s 00:00 [#############################################################################] 100%
(1/1) キーリングのキーを確認                                                                                                   [#############################################################################] 100%
(1/1) パッケージの整合性をチェック                                                                                             [#############################################################################] 100%
(1/1) パッケージファイルのロード                                                                                               [#############################################################################] 100%
(1/1) ファイルの衝突をチェック                                                                                                 [#############################################################################] 100%
(1/1) 空き容量を確認                                                                                                           [#############################################################################] 100%
(1/1) インストール kakasi                                                                                                      [#############################################################################] 100%

★インストールされたファイル一式を確認する
[akira@jizai .emacs.d]$ pacman -Ql kakasi
kakasi /usr/
kakasi /usr/bin/
kakasi /usr/bin/atoc_conv
kakasi /usr/bin/kakasi
kakasi /usr/bin/kakasi-config
kakasi /usr/bin/mkkanwa
kakasi /usr/bin/rdic_conv
kakasi /usr/bin/wx2_conv
kakasi /usr/include/
kakasi /usr/include/libkakasi.h
kakasi /usr/lib/
kakasi /usr/lib/libkakasi.so
kakasi /usr/lib/libkakasi.so.2
kakasi /usr/lib/libkakasi.so.2.1.0
kakasi /usr/share/
kakasi /usr/share/kakasi/
kakasi /usr/share/kakasi/itaijidict
kakasi /usr/share/kakasi/kanwadict
kakasi /usr/share/man/
kakasi /usr/share/man/man1/
kakasi /usr/share/man/man1/kakasi-config.1.gz
kakasi /usr/share/man/man1/kakasi.1.gz
[akira@jizai .emacs.d]$

2.2 ddskk のインストール

ddskk のインストール手順はいくつがあります。詳細はddskkのインストールマニュアルへ参照する。

本家から最新版のダウンロード

$ wget http://openlab.ring.gr.jp/skk/maintrunk/ddskk-20140622.tar.gz
$ tar xzvf ddskk-20140622.tar.gz
$ cd ddskk-20140622

ddskk-20140622/SKK-CFG ファイルの最後にインストール先を指定する。

;;; 辞書ファイルの格納先
(setq SKK_DATADIR "~/.emacs.d/etc/skk")

;;; ドキュメント
(setq SKK_INFODIR "~/.emacs.d/share/info-ja/skk")

;;; skk lisp本体
(setq SKK_LISPDIR "~/.emacs.d/lisp/skk")

;;; skk-large-jisyo の値を自動設定する
(setq SKK_SET_JISYO t)

DDSKKのインストール

★ インストーラが SKK の各ファイルをどこにインストールしようとしているかを確認する
$ make what-where

★ インストール
$ make install

2.3 動作確認

(require 'skk-kakasi) でskk-kakasi.elをロードし、適当に漢字を含むテキストを選択し skk-gyakubiki-message を実行する。

3 更に自動化する

pos-tip.el と連携してtooltip形でカッコ良く表示する。漢字の読み方をチラ見に便利。

(require 'skk-autoloads)
(require 'skk-kakasi)
(require 'pos-tip)

;;; ふり仮名変換結果をpos-tipで表示する
(defun skk-hurigana-tip (start end &optional all)
  "領域の漢字に全てふりがなを付け、ポップアップする。"
  (interactive "r\nP")
  (pos-tip-show (skk-hurigana-1 start end all)))

;;; 適当にキーを割り当てする
(global-set-key (kbd "C-x x") 'skk-hurigana-tip)

popwin.el でpopupバッファーで表示する。変換結果を流用したい場合に便利。

(require 'skk-autoloads)
(require 'skk-kakasi)
(require 'popwin)

;;; ふり仮名変換結果バッファ名
(defvar skk-kakasi-popbuf-name " *skk-kakasi*" "ふり仮名変換結果バッファ名")

(defun skk-hurigana-popup (start end &optional all)
  (interactive "r\nP")
  (let ((str0 (buffer-substring-no-properties start end))
        (str1 (skk-hurigana-1 start end all))
        (str2 (skk-gyakubiki-1 start end all)))
    (with-current-buffer (get-buffer-create skk-kakasi-popbuf-name)
      (setq buffer-read-only nil)
      (erase-buffer)
      (insert "KAKASI - 漢字→かな(ローマ字)変換結果:\n")
      (insert "-------------------------------------\n\n")
      (insert str0 "\n\n")
      (insert str1 "\n\n")
      (insert str2 "\n\n")
      (setq buffer-read-only t))
    (display-buffer (get-buffer skk-kakasi-popbuf-name))))

;;; 適当にキーを割り当てする
(global-set-key (kbd "C-x X") 'skk-hurigana-popup)

4 もう一歩

  • オンライン辞書サービスを使って単語の解釈を表示したい
  • テキスト読み上げ機能と連携したい

Comments