一度 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 を再起動