一度 skk を使い始めたら, 二度と他の変換方法は使えなくなると思います. その反面, 他の環境に行っても skk が欲しくなる, という...

導入

辞書サーバとして yaskkserv を使用しています. 以前は dbskkd-cdb を使用していましたが, 複数辞書を扱うのが面倒なので yaskkserv に乗り換えました.

$ sudo aptitude install ddskk yaskkserv

設定

基本設定

.emacs では

(require 'skk-leim)
(setq default-input-method "japanese-skk")
(require 'skk-autoloads)
(autoload 'skk-auto-fill-mode "skk" nil t)
;; skk モードの表示のカスタマイズ
(setq skk-cursor-latin-color "DeepPink1")
(setq skk-latin-mode-string "[aa]")
(setq skk-cursor-jisx0208-latin-color "DeepPink1")
(setq skk-hiragana-mode-string "[あ]")
(setq skk-cursor-katakana-color "DeepPink1")
(setq skk-katakana-mode-string "[ア]")
(setq skk-cursor-jisx0208-latin-color "DeepPink1")
(setq skk-jisx0208-latin-mode-string "[英]")
(setq skk-indicator-use-cursor-color nil)
;; 辞書サーバとの指定(localhost)
(setq skk-large-jisyo nil)
(setq skk-server-host "127.0.0.1" skk-portnum 1178)
(global-set-key "\C-x\C-j" 'skk-mode)
(global-set-key "\C-xj" 'skk-mode)
(global-set-key "\C-j" 'skk-mode)
(global-set-key "\C-\\" 'skk-mode)
;; 辞書登録の際に送り仮名を削除
(setq skk-check-okurigana-on-touroku 'auto)
;; インジケータを左端に.
(setq skk-status-indicator 'left)
;; 変換時のリターンで改行しない
(setq skk-egg-like-newline t)
;; メッセージは日本語で
(setq skk-japanese-message-and-error t)
;;"「"を入力したら"」"も自動で挿入
(setq skk-auto-insert-paren t)
;;漢字登録のミスをチェックする
(setq skk-check-okurigana-on-touroku t)
;; 句読点は , . を使う
(setq skk-kuten-touten-alist
  '(
    (jp . ("." . "," ))
    (en . ("." . ","))
    ))
;; jp でも ".""," を使う.
(setq skk-kutouten-type 'en)
;; @で挿入する日付表示を西暦&半角に
(setq skk-date-ad t)
(setq skk-number-style nil)

sticky-shift

シフトキーを打つのに小指が攣りそうになるので「; + ascii」で大文字が打て るようにしています. ; を入力したいときは二回打ちます.

uim で sticky shift できるようにならないかなぁ. scim でも良いけど.

;; skk モード での入力を ; + ascii にする.
(defvar sticky-key ";")
(defvar sticky-list
  '(
  '(
    ("a" . "A") ("b" . "B") ("c" . "C") ("d" . "D") ("e" . "E")
    ("f" . "F") ("g" . "G") ("h" . "H") ("i" . "I") ("j" . "J")
    ("k" . "K") ("l" . "L") ("m" . "M") ("n" . "N") ("o" . "O")
    ("p" . "P") ("q" . "Q") ("r" . "R") ("s" . "S") ("t" . "T")
    ("u" . "U") ("v" . "V") ("w" . "W") ("x" . "X") ("y" . "Y")
    ("z" . "Z") ("1" . "!") ("2" . "\"") ("3" . "#") ("4" . "$")
    ("5" . "%") ("6" . "&") ("7" . "'") ("8" . "(") ("9" . ")")
    ("0" . "~") ("@" . "`") ("[" . "{") ("]" . "}") ("-" . "=")
    (":" . "*") ("," . "、") ("." . "。") ("/" . "?") (";" . "+")
    ("\\" . "|") ("^" . "_")(" " ." ")
    ))
(defvar sticky-map (make-sparse-keymap))
(define-key global-map sticky-key sticky-map)
(mapcar
 (lambda
   (pair)
   (define-key sticky-map (car pair)
     `(lambda()
        (interactive)
        (setq unread-command-events
              (cons , (string-to-char (cdr pair)) unread-command-events)))))
 sticky-list)
(define-key sticky-map sticky-key
  '(lambda ()
     (interactive)
     (insert sticky-key)))
(add-hook 'skk-mode-hook
          (lambda ()
            (progn
              (define-key skk-j-mode-map sticky-key sticky-map)
              (define-key skk-jisx0208-latin-mode-map sticky-key sticky-map)
              (define-key skk-abbrev-mode-map sticky-key sticky-map)
              )
            ))
(setq skk-isearch-start-mode 'latin)

辞書の増強

追加するのは

辞書の変換は Wnn 形式なら以下.

 $ sudo aptitude install skktools
   cp /usr/share/skktools/convert2skk/wnn2skk.*
   chmod u+x wnn2skk.*
   export LANG=ja_JP.eucJP
   wnn2skk.sh tandic4.txt > SKK-JISYO.tanudic4
   wnn2skk.sh chibutsu.u > SKK-JISYO.chibutsu

MatsuCon は MS-IME 形式の辞書を落してきて, 以下のスクリプトを走らせる.

#!/usr/bin/env ruby

require 'nkf'

src = ARGV[0]
if ARGV.size < 1
  puts "usage: ime2skk.rb ime_dictionary"
  exit 0
end
File.open(src, "r") {|f|
  f.each do |line|
    line_euc = NKF.nkf("-S -e",line)
    if line_euc =~ /^([^!]+?)\t(.+?)\t.+$/
      entry = $1
      content = $2
      if content =~/;/
        puts entry + " /(concat \""+ content.sub(";","\073")+"\")/"
      else
        puts entry + " /"+ content +"/"
      end
    end
  end
}

 $ ime2skk.rb ime_std.txt | skkdic-expr2 | skkdic-sort |SKK-JISYO.matsucon

yaskkserv への登録は

 $ sudo cp SKK-JISYO.matsucon
   /usr/share/skk
 $ sudo yaskkserv_make_dictionary /usr/share/skk/SKK-JISYO.matsucon \
     /usr/share/yaskkserv/SKK-JISYO.matsucon.yaskkserv
で辞書を変換. /etc/default/yaskkserv の DICS 変数に 追加したい辞書を記述しておく.

でもって yaskkserv を再起動


参考文献