uim-skkを導入するための設定

経緯

Emacs上で日本語を入力するためのシステムとして SKKを使用しています。

今回Emacs以外のアプリケーションでもSKKを使用するように設定したため、その際の設定をメモしておきます。

現在のVine Linux 6はuimのバージョンが1.6.1のため sticky-shiftが実現できないため、最新版(1.8.2)をインストールしました。

uimのインスール

uimの再ビルド

VineSeedからuim-1.8.6-2vl7.src.rpmをダウンロードし、 vbuilderでRPMパッケージを作成します。 vbuilderはあらかじめインストールしておきます。

sudo apt-get install vbootstrap
wget http://ftp.vinelinux.org/pub/Vine/apt/VineSeed/SRPMS.plus/uim-1.8.6-2vl7.src.rpm
sudo vbuilder --unionfs clean build build-rpm uim-1.8.6-2vl7.src.rpm

~/rpm/vbuilder/6/RPMS/以下のフォルダ(32bitと64bitで異なる)に rpmパッケージが作成されるため、必要なパッケージをインストールします。

自分でソースコードをダウンロードしてビルドしてもいいのですが、依存パッケージを自分の環境にインストールしなければならないことを考えると、 vbuilderを使用してビルドした方が良いと思います。

作成されたパッケージ

uim-1.8.6-2vl6.x86_64.rpm
uim-anthy-1.8.6-2vl6.x86_64.rpm
uim-devel-1.8.6-2vl6.x86_64.rpm
uim-el-1.8.6-2vl6.x86_64.rpm
uim-fep-1.8.6-2vl6.x86_64.rpm
uim-gtk-1.8.6-2vl6.x86_64.rpm
uim-gtk3-1.8.6-2vl6.x86_64.rpm
uim-kde-applet-1.8.6-2vl6.x86_64.rpm
uim-m17n-1.8.6-2vl6.x86_64.rpm
uim-mana-1.8.6-2vl6.x86_64.rpm
uim-qt-1.8.6-2vl6.x86_64.rpm
uim-qt4-1.8.6-2vl6.x86_64.rpm
uim-skk-1.8.6-2vl6.x86_64.rpm
uim-xim-1.8.6-2vl6.x86_64.rpm

作成されたパッケージのインストール

今回は

uim-1.8.6-2vl6.x86_64.rpm
uim-xim-1.8.6-2vl6.x86_64.rpm
uim-skk-1.8.6-2vl6.x86_64.rpm
uim-gtk-1.8.6-2vl6.x86_64.rpm  # uimの設定を行なうために必要
uim-gtk3-1.8.6-2vl6.x86_64.rpm # 同上(gtk3版)
uim-fep-1.8.6-2vl6.x86_64.rpm  # ターミナルなどで日本語入力するために必要

をapt-get installコマンドでインストールしました(必要に応じて依存パッケージが同時にインストールされます)。

uimの設定

uimの設定画面

uim-pref-gtk &

あるいは

uim-pref-gtk3 &

で設定画面を開き、各種設定を行います。

個人的な設定(主なもののみ)

  • 全体設定
    • 標準の入力方式:「直接入力」
    • 入力方式の一時切り換えキー:「”zenkaku-hankaku”」
  • SKK
    • 標準の入力モード:「ひらがな」
  • SKK辞書
    • 「辞書ファイルの代わりに辞書サーバを使用」:オン
      • (自分でパッケージ化しているので使用しないと)
    • 「個人辞書ファイル」:適度な場所を指定
  • SKKキー設定1
    • 「sticky」(sticky-shift):”Henkan_Mode”

uimをデフォルトの漢字変換システムにするための設定

GNOMEでは「システムメニュー」から、「設定」→「ユーザ向け」→「漢字変換システムの選択」を実行し、「uim」を選択します。ログアウトして再ログインすると使用できるようになります。

fluxboxでの設定方法は分かりませんでした。コマンドが分かれば可能なのですが。

【追記】 vutils-guiパッケージに含まれるコマンドを使用して

gsetime &

で設定画面が出ることが分かりました。

uimを自動起動するための設定

GNOMEの場合

自動起動するアプリケーションに

uim-toolbar-gtk-systray

あるいは

uim-toolbar-gtk3-systray

を追加します。

fluxboxの場合

~/.fluxbox/startup

uim-toolbar-gtk-systray &
uim-toolbar-gtk &

あるいは

uim-toolbar-gtk3-systray &
uim-toolbar-gtk3 &

を追加します。

z + spaceで全角スペースを入力するための設定

今回は http://makenowjust.hatenablog.com/entry/2014/08/10/233424 の内容を参考にしました。

以下の内容で ~/.uim を作成します。文字コードはEUC-JPです。

(define uim-pref-suppress-dot-uim-warning-dialog? #t)

(require-module "skk")

(define skk-ja-rk-rule
  (append '(
            ((("z" " ") . ()) (" " " " " "))
            )
          skk-ja-rk-rule))

Firefoxで入力ができない場合の設定

~/.bash_profile

export GTK_IM_MODULE=uim firefox

を追加します。

他の候補:fcitx-skk

現時点でのVineSeedではfcitxがインストールされているため fcitx-skkを自分でビルドして試しました。

しかし、

  • 漢字変換後に確定する場合にテンキーを使用しなければならない
  • sticky-shiftが使用できない

という欠点があったため uim-skkの方が良いと感じました。

Emacsでddskkパッケージを使用し、さらにcdb形式の辞書ファイルを自作するための設定

経緯

Emacsで日本語入力をする際にSKKを使用しています。最近、 package.elで導入するSKK でddskkがMELPAに登録されたことを知ったため、インストールしてみました。

従来の方法よりも楽になりました。

  • 辞書ファイルの統合
  • 辞書サーバの設定

も行なったので、その時の内容をメモ的に残しておきます。

ddskkパッケージ

dskkパッケージのインストール

MELPAを使用する方法は省略します。

M-x package-refresh-contents
M-x package-install ddskk

でインストールします。同時にcccとcdbの2つのパッケージもインストールされます。

init.elの設定

(require 'skk)

(global-set-key (kbd "C-x C-j") 'skk-mode)
;; (global-set-key "\C-xj" 'skk-auto-fill-mode) ;; 改行を自動入力する場合
;; (global-set-key "\C-xt" 'skk-tutorial)       ;; チュートリアル
(setq default-input-method "japanese-skk")

(setq skk-user-directory "~/Dropbox/emacs/SKK") ;; 設定ファイル、個人辞書ファイルの置き場
(setq skk-init-file "~/Dropbox/emacs/SKK/init") ;; 設定ファイルの指定

を追加します。

initの設定

使用する辞書ファイルをいくつか統合してさらにcdb化し、 SKK-JISYO.my.cdb というファイル名にしています。そこまで必要なければ SKK-JISYO.L でいいと思います。

;; -*-mode: emacs-lisp; -*-

;;; 使用する辞書の設定
;; large辞書
(setq skk-cdb-large-jisyo "/usr/local/share/skk/SKK-JISYO.my.cdb")
;; 個人辞書
(setq skk-jisyo "~/Dropbox/emacs/SKK/skk-jisyo")
(setq skk-backup-jisyo "~/Dropbox/emacs/SKK/skk-jisyo.bak")

;; From DDSKK 14.2:
;;   メイン辞書(L 辞書、CDB 形式辞書、辞書サーバ)以外の辞書を指定する
(setq skk-extra-jisyo-file-list
      (list
       '("/usr/local/share/skk/SKK-JISYO.JIS3_4" . euc-jisx0213)
       ))

;; 変換記録を保存するファイル名
(setq skk-record-file "~/Dropbox/emacs/SKK/record")

;;; 外見の変更
;; モードラインに色をつける設定
(setq skk-use-color-cursor t)
(setq skk-indicator-use-cursor-color t)

;; 変換候補のハイライトの設定
(setq skk-henkan-face (skk-make-face 'gray80/gray25)) ;; お好みで

これで使用できるようになったため、今までのddskkをアンインストールしました(make uninstallは用意されていないため自力で削除)。

辞書ファイルの用意

辞書ファイルの統合

統合したい辞書ファイルを用意して同じフォルダに入れ、

skkdic-expr2 \
    SKK-JISYO.JIS2 + \
    SKK-JISYO.L + \
    SKK-JISYO.assoc + \
    SKK-JISYO.edict + \
    SKK-JISYO.geo + \
    SKK-JISYO.itaiji + \
    SKK-JISYO.jinmei + \
    SKK-JISYO.law + \
    SKK-JISYO.office.zipcode + \
    SKK-JISYO.propernoun + \
    SKK-JISYO.station + \
    SKK-JISYO.zipcode | skkdic-sort > SKK-JISYO.my

のようなスクリプトを実行すると SKK-JISYO.my が生成されるため、 /usr/local/share/skk にコピーします(今回のようにcdb形式の辞書ファイルを使用する場合には不要)。

skkdic-expr2

私が使用しているVine Linuxでは skktoolsをインストールしても skkdic-expr2 コマンドが導入されなかったため少しだけ大変でした。

結果だけ書くと、メーリングリストで許可を得た上でパッケージを更新することで対処しました。

SPECファイルに

BuildRequires: glib2-devel

の行を追加することで skkdic-expr2 がビルドされるようになりました。

cdb形式の辞書の作成

このためにはパッケージを自分でインストールする必要があります。

tinycdb

tinycdb は辞書サーバであるdbskkd-cdbをビルドするために必要なプログラムです。 cdb形式の辞書を作成するためには、この中に含まれる cdb が必要です。

wget http://www.corpit.ru/mjt/tinycdb/tinycdb-0.78.tar.gz
tar xzf tinycdb-0.78.tar.gz
cd tinycdb-0.78
make
sudo make install

dbskkd-cdb

dbskkd-cdb は辞書サーバの1つです。

この中に含まれるスクリプトを改変して使用します。

  • skktocdbm.sh
    #!/bin/sh
    # Converting SKK Dictionary to cdbmake-acceptable form
    # Originally by D. J. Bernstein's 12tocdbm.sh
    # modified by Kenji Rikitake
    # bugfix of truncated strings by Hideto Kihara
    # bugfix of locale by Tatsuya Kinoshita
    LC_ALL=C awk '
      /^[^;]/ {
        s = substr($0, index($0, " ") + 1)
        print "+" length($1) "," length(s) ":" $1 "->" s
      }
      END {
        print ""
      }
    '
    
  • makeskkcdb.sh
    #!/bin/sh
    ./skktocdbm.sh < /usr/local/share/skk/SKK-JISYO.L | \
      cdb -c -t - SKK-JISYO.L.cdb
    
  • skktocdb

    上の2つのスクリプトを組み合せて作成したのが以下のスクリプトです。

    #!/bin/sh
    
    LC_ALL=C awk '
      /^[^;]/ {
        s = substr($0, index($0, " ") + 1)
        print "+" length($1) "," length(s) ":" $1 "->" s
      }
      END {
        print ""
      }
    ' $1 | cdb -c -t - $1.cdb
    

    実行権限をつけて/usr/local/binにコピーしました。

    skktocdb SKK-JISYO.my
    

    のように使用すると同じフォルダに SKK-JISYO.my.cdb が作成されます。

    このファイルを/usr/local/share/skkにコピーします。これで自作の辞書ファイルを使用できるようになります。

辞書サーバを使用する場合

この場合には、initファイルの

(setq skk-cdb-large-jisyo "/usr/local/share/skk/SKK-JISYO.my.cdb")

の記述は必要ありません。

先日、Vine Linuxの dbskkd-cdb パッケージを更新しました。

EAGLE 雑記 の内容を参考にして任意の辞書ファイルを指定することができるように改変しました。

/etc/xinetd.d/dbskkd-cdbの例

# default: on
# description: dbskkd-cdb is a skkserv implementation, \
#              a Japanese dictionary server for the Simple Kana to \
#              Kanji conversion program.
service skkserv
{
    port = 1178
    socket_type = stream
    wait = no
    only_from = 127.0.0.1
    user = nobody
    server = /usr/sbin/dbskkd-cdb
    # specify dictionary path
    server_args = /usr/local/share/skk/SKK-JISYO.my.cdb
    log_on_failure += USERID
    disable = no
}

変更後は

sudo /etc/init.d/xinetd restart

でxinet.dを再起動すれば辞書サーバでSKKを使用できるようになります。

Emacsで使用するSKKの辞書の文字コードをutf-8にする(→ EUC-JPに戻しました)

経緯

始めてコメントを頂きました

前回、 SKKの辞書に機種依存文字(丸文字や全角ローマ字)を追加するために「Emacsで使用するSKKの辞書の文字コードをutf-8にする」方法を紹介しました。

すると、「SKK-JISYO.JIS3_4 には、あらかじめ丸文字や全角ローマ字などが登録されています。」とのコメントを頂きました。

SKK-JISYO.JIS3_4の中身

そこで辞書ファイルSKK-JISYO.JIS3_4の中身を調べてみると、文字コードはEUC-JPであり、その中には

(1) /①/❶/⓵/
(2) /②/❷/⓶/
(3) /③/❸/⓷/
(4) /④/❹/⓸/
(5) /⑤/❺/⓹/
(6) /⑥/❻/⓺/
(7) /⑦/❼/⓻/
(8) /⑧/❽/⓼/
(9) /⑨/❾/⓽/
(10) /⑩/❿/⓾/
(11) /⑪/⓫/
(中略)
(50) /㊿/

1 /①;(1)/❶;(1)/⓵;((1))/ⅰ;[ローマ数字]/Ⅰ;[ローマ数字]/¹;^1/
2 /②;(2)/❷;(2)/⓶;((2))/ⅱ;[ローマ数字]/Ⅱ;[ローマ数字]/²;^2/
3 /③;(3)/❸;(3)/⓷;((3))/ⅲ;[ローマ数字]/Ⅲ;[ローマ数字]/³;^3/弎/
4 /④;(4)/❹;(4)/⓸;((4))/ⅳ;[ローマ数字]/Ⅳ;[ローマ数字]/
5 /⑤;(5)/❺;(5)/⓹;((5))/ⅴ;[ローマ数字]/Ⅴ;[ローマ数字]/
6 /⑥;(6)/❻;(6)/⓺;((6))/ⅵ;[ローマ数字]/Ⅵ;[ローマ数字]/
7 /⑦;(7)/❼;(7)/⓻;((7))/ⅶ;[ローマ数字]/Ⅶ;[ローマ数字]/
8 /⑧;(8)/❽;(8)/⓼;((8))/ⅷ;[ローマ数字]/Ⅷ;[ローマ数字]/
9 /⑨;(9)/❾;(9)/⓽;((9))/ⅸ;[ローマ数字]/Ⅸ;[ローマ数字]/
10 /⑩;(10)/❿;(10)/⓾;(10)/ⅹ;[ローマ数字]/Ⅹ;[ローマ数字]/
11 /⑪;(11)/⓫;(11)/ⅺ;[ローマ数字]/Ⅺ;[ローマ数字]/
12 /⑫;(12)/⓬;(12)/ⅻ;[ローマ数字]/Ⅻ;[ローマ数字]/

のように目的とする文字が登録されていました(順序を変更しています)。

設定

そこで辞書ファイルの文字コードをデフォルトのEUC-JPに戻し、以下の設定を加えました。

SKK-JISYO.JIS3_4のダウンロード

http://openlab.ring.gr.jp/skk/skk/dic/SKK-JISYO.JIS3_4 からダウンロードしました。

wget http://openlab.ring.gr.jp/skk/skk/dic/SKK-JISYO.JIS3_4
sudo cp SKK-JISYO.JIS3_4 /usr/local/share/skk

で辞書ファイルを所定の場所にコピーしました。

.emacs.elの設定(こちらは前回と同じ)

職場および自宅で同じ環境になるようにするために、辞書 ~/Dropbox/emacs/SKK に置いています。

(require 'skk-autoloads)
(global-set-key "\C-x\C-j" 'skk-mode)
;; (global-set-key "\C-xj" 'skk-auto-fill-mode)
;; (global-set-key "\C-xt" 'skk-tutorial)

(defvar skk-user-directory)
(setq skk-user-directory "~/Dropbox/emacs/SKK")

(require 'sticky)
(use-sticky-key 'henkan sticky-alist:ja)

initファイルの設定

~/Dropbox/emacs/SKK/initファイルの設定です。

ここでは別の辞書ファイルSKK-JISYO.JIS2も追加しています。

;; 使用する辞書の設定
(setq skk-cdb-large-jisyo "/usr/local/share/skk/SKK-JISYO.L.cdb")
(setq skk-large-jisyo "/usr/local/share/skk/SKK-JISYO.L")

(setq skk-jisyo "~/Dropbox/emacs/SKK/skk-jisyo")
(setq skk-backup-jisyo "~/Dropbox/emacs/SKK/skk-jisyo.bak")

;; From DDSKK 14.2:
;;   メイン辞書(L 辞書、CDB 形式辞書、辞書サーバ)以外の辞書を指定する
(setq skk-extra-jisyo-file-list
  (list
      "/usr/local/share/skk/SKK-JISYO.JIS2"
      '("/usr/local/share/skk/SKK-JISYO.JIS3_4" . euc-jisx0213)
))

実行

これでうまくいきました。

辞書ファイルについて教えて頂いたaさん。ありがとうございました。

Emacsで使用するSKKの辞書の文字コードをutf-8にする

経緯

Emacs上で日本語入力をする際に SKK(現時点ではddskk-15.2)を使用しています。ただし文字コードがEUC-JPのため機種依存性文字(丸文字や全角ローマ字など)を登録することができませんでした。

そこでSKKで使用する辞書をutf-8化したので、その際の内容をメモしておきます。

設定

.emacs.elの設定

職場および自宅で同じ環境になるようにするために、辞書 ~/Dropbox/emacs/SKK に置いています。

(require 'skk-autoloads)
(global-set-key "\C-x\C-j" 'skk-mode)
;; (global-set-key "\C-xj" 'skk-auto-fill-mode)
;; (global-set-key "\C-xt" 'skk-tutorial)

(defvar skk-user-directory)
(setq skk-user-directory "~/Dropbox/emacs/SKK")

(require 'sticky)
(use-sticky-key 'henkan sticky-alist:ja)

ちなみに下2行は「変換」キーをsticky keyに割り当てるための設定です。 stickyパッケージをあらかじめインストールしておく必要があります。

initファイルの設定

辞書フォルダの作成(移動)

~/Dropbox/emacs/SKKに辞書ファイルやinitファイル(設定ファイル)を移動させます(すでにその場所にフォルダがある場合には省略)。

cd ~/Dropbox/emacs/SKK
nkf -w -Lu /usr/local/share/skk/SKK-JISYO.L > SKK-JISYO.L.utf8
nkf -w -Lu .skk-jisyo > skk-jisyo.utf8

で文字コードをutf-8に変換して先程のフォルダに配置します。実際に使用する辞書ファイルすべてをこのように utf-8に変更します。

辞書ファイル名の設定

initファイルの内容を以下のように変更します。

(setq skk-jisyo-code 'utf-8)

;; 使用する辞書の設定
(setq skk-cdb-large-jisyo "/usr/local/share/skk/SKK-JISYO.L.cdb")
(setq skk-large-jisyo "~/Dropbox/emacs/SKK/SKK-JISYO.L.utf8")

(setq skk-jisyo "~/Dropbox/emacs/SKK/skk-jisyo.utf8")
(setq skk-backup-jisyo "~/Dropbox/emacs/SKK/skk-jisyo.utf8.bak")

cdb形式の辞書を使用していない場合には skk-cdb-large-jisyo の設定はコメントアウトします。

また今回は、隠しファイルにする必要がないため個人辞書のファイル名の先頭のピリオドを削除しています。

辞書ファイルの設定

辞書ファイルへの単語の追加

以下のように個人辞書ファイルに単語を追加します(途中省略)。

1 /①/1/Ⅰ/
2 /②/2/Ⅱ/
3 /③/3/Ⅲ/
4 /④/4/Ⅳ/
5 /⑤/5/Ⅴ/

この場合にはSKKを使用できないため、 mozc で変換して個人辞書ファイルにコピーしました。

参考にした内容

今回の内容は、 http://openlab.ring.gr.jp/skk/skk/main/etc/dot.skk

;; 個人辞書の文字コードを指定する
;; (setq skk-jisyo-code 'utf-8)
;; 注) この設定は気をつけないと辞書の検索ができなくなりますので十分理
;;   解してから行ってください。 `skk-jisyo-code' は個人辞書の読み書きの
;;   他、L 辞書などの読み込みコードも決めている影響力の強い変数です。
;;   この設定をした場合は、まず個人辞書を上記のコードに変換しなければ
;;   いけません。その上で、さらに以下のいずれかの対処をする必要があり
;;   ます。
;;
;; 方針 1) Emacs のバッファに読み込む辞書を全て `skk-jisyo-code' と同じ
;;         文字コードに変換する

の部分を参考にしました。