表形式で表示を行う候補ウィンドウを作りました。 * ねらい・特徴 ** uim-tutcodeの記号入力モード時に、 表形式で多数の候補を表示して、候補を選びやすくするために作りました。 ** Emacs用のT-Code入力環境tc2や、Windows用漢字直接入力ツール漢直Winでは、 交ぜ書き変換の候補を表形式で選ぶようになっているので、それに合わせるため。 ** 昔の日本語Wikiの要望ページに、T-Codeの仮想鍵盤表示に使えるような 表形式のウィンドウが欲しいという要望があったので。 ** uim-tutcodeでヘルプ表示に使うことも考えています。 + 次に各キーを打ったときに入力される文字を表形式で表示(仮想鍵盤表示) + 交ぜ書き変換や部首合成変換での確定時に、 直接入力可能な文字の打ち方を表示(自動ヘルプ) ** uim-tutcode以外のIMでも、Scheme側処理を記述すれば、記号入力モード等で 多数の候補から選ぶ場合に使えると思います。 (単純な記号入力はuim-input-pad-jaでいいと思いますが。) #** 「風」のような入力方式の実現にも使えるかもしれません。 #** タッチスクリーン用の入力パネルとしても使えるかもしれません。 # (ただし、候補クリック時に確定する機能の追加が必要)
* 表形式候補ウィンドウの概要 + 13列8行の表の各セルをボタンで表示。 ++ 表の各セルに以下のようにJIS配列キーボードレイアウトで各キーを割り当て。 (割り当ては、uim-candwin-prog-layout変数で変更可能) 1 2 3 4 5 6 7 8 9 0 - ^ \ q w e r t y u i o p @ [ a s d f g h j k l ; : ] z x c v b n m , . / スペース ! " # $ % & ' ( ) = ~ | Q W E R T Y U I O P ` { A S D F G H J K L + * } Z X C V B N M < > ? _ ++ 右上、左下、右下のブロックは表示候補が無い場合はブロックごと非表示。 ++ 対応するキーが無いセルのボタンは非表示。 + 表中の各位置のキーとラベル文字とを対応付け。 Scheme側から指定された、ラベル文字と候補文字列の組に対し、 ラベル文字に対応するキーの位置のボタンに候補文字列を表示。 + Scheme側からはラベル文字と候補文字列を指定。(既存の候補ウィンドウと同様) * 表示例 ** 記号入力モード時 http://www1.interq.or.jp/~deton/tutcode/candwin-tbl-kigou1.png http://www1.interq.or.jp/~deton/tutcode/candwin-tbl-kigou2.png ** 交ぜ書き変換時 http://www1.interq.or.jp/~deton/tutcode/candwin-tbl-maze.png * 構成、および既存の候補ウィンドウからの変更点 ** 共通 *** 既存の候補ウィンドウをベースに、GtkTreeViewをGtkTableに変更して、 セルにGtkButtonを配置。 ** uim-xim用 candwin-gtk.cをコピーしてcandwin-tbl-gtk.cを作成。 (uim-ximは候補表示に使うプログラムをScheme変数uim-candwin-progで設定可能) ** gtk-immodule用 *** GObjectの流儀に従って、UIMCandWinGtkを継承してUIMCandWinTblGtkを作成。 *** UIMCandWinGtkの一部関数をvirtual相当に変更し、 UIMCandWinTblGtkでオーバーライド。 *** gtk-im-uim.c:im_uim_init()内のuim_cand_win_gtk_new()呼び出し部分を変更し、 Scheme変数uim-candwin-prog(uim-ximと同じ)を参照して、 newする候補ウィンドウ(UIMCandWinGtkかUIMCandWinTblGtk)を切り替え。 *** ソースの把握・変更をしやすくするため、 ソース量をあまり増やさない形で変更をしています。 将来的に、他の候補ウィンドウの追加を想定するなら、 もう少し構成を整理した方が良いかもしれません。 #例:+ 共通処理を抽象クラスにまとめる # + Scheme側から呼ばれる関数を全てvirtual相当にしておく(?) # + オーバーライドではなくソースをコピーする方針にする(?) # + input-pad-jaのように別プログラムにする(?) # + IM独自の候補ウィンドウは、pluginとして作る(?) * パッチ ** gtk-immodule用パッチ http://www1.interq.or.jp/~deton/tutcode/candwin-tbl-gtk.patch.gz ** uim-xim用パッチ http://www1.interq.or.jp/~deton/tutcode/candwin-tbl-helper.patch.gz * 制限事項 ** uim-tutcodeでの動作のみ確認。 ** 既存の候補ウィンドウを置き換えて使う場合の動作のみ確認。 (候補数に応じて使う候補ウィンドウを切り替えるのではなく)(特にuim-xim) * TODO ** マウスで候補をクリックしたときに確定する ** 候補ウィンドウに次/前ページ移動ボタンを追加(マウスだけで選択可能にするため) (signalの追加/HELPER-CANDWINプロトコルの拡張も?) ** Qt版の追加 ** 使う候補ウィンドウを、uim-pref-gtk等の設定で切り替えられるようにする ** 候補ウィンドウ切替関数をScheme側に追加? (HELPER-CANDWINプロトコルの拡張も?) * 使い方 以下を~/.uimに追加。 ; 設定が必須なのはuim-candwin-prog。 ; uim-tutcodeの場合は、次の2つの変数の設定も必要。それ以外はオプション。 ; tutcode-nr-candidate-max ; tutcode-heading-label-char-listの長さに設定 ; tutcode-nr-candidate-max-for-kigou-mode ; 上と同様 ;; 使用する候補ウィンドウの設定 ; 表形式の候補ウィンドウを使用 (define uim-candwin-prog "uim-candwin-tbl-gtk") ;; uim-tutcode用の設定 ; 交ぜ書き変換時の候補選択用ラベル文字のリスト ; 打ちやすい場所から先に候補を埋める (set! tutcode-heading-label-char-list '("a" "s" "d" "f" "g" "h" "j" "k" "l" ";" "q" "w" "e" "r" "t" "y" "u" "i" "o" "p" "z" "x" "c" "v" "b" "n" "m" "," "." "/" "1" "2" "3" "4" "5" "6" "7" "8" "9" "0")) ; 記号入力モード時の候補選択用ラベル文字のリスト ; キーボードレイアウトに従って、左上から右下へ順に候補を埋める (set! tutcode-heading-label-char-list-for-kigou-mode '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "-" "^" "\\" "q" "w" "e" "r" "t" "y" "u" "i" "o" "p" "@" "[" "a" "s" "d" "f" "g" "h" "j" "k" "l" ";" ":" "]" "z" "x" "c" "v" "b" "n" "m" "," "." "/" " " "!" "\"" "#" "$" "%" "&" "'" "(" ")" "=" "~" "|" "Q" "W" "E" "R" "T" "Y" "U" "I" "O" "P" "`" "{" "A" "S" "D" "F" "G" "H" "J" "K" "L" "+" "*" "}" "Z" "X" "C" "V" "B" "N" "M" "<" ">" "?" "_")) (set! tutcode-nr-candidate-max (length tutcode-heading-label-char-list)) (set! tutcode-nr-candidate-max-for-kigou-mode (length tutcode-heading-label-char-list-for-kigou-mode)) ; 記号入力モードを全角英数モードとして使うため、 ; tutcode-heading-label-char-list-for-kigou-modeを全角にして ; tutcode-kigoudicの先頭に入れる (require "japanese.scm") ; for ja-wide (set! tutcode-kigoudic (append (map (lambda (lst) (list (ja-wide lst))) tutcode-heading-label-char-list-for-kigou-mode) (list-tail tutcode-kigoudic (length tutcode-heading-label-char-list-for-kigou-mode)))) ;; JIS配列キーボード以外(ASCII配列やDvorakキーボード等)の場合の設定 ; 表形式の候補ウィンドウ上の各ボタンとキーの対応表 (13列8行) ; 例: ASCII配列キーボード用設定 ;(define uim-candwin-prog-layout ; '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "-" "=" "\\" ; "q" "w" "e" "r" "t" "y" "u" "i" "o" "p" "[" "]" "" ; "a" "s" "d" "f" "g" "h" "j" "k" "l" ";" "'" "`" "" ; "z" "x" "c" "v" "b" "n" "m" "," "." "/" "" "" " " ; "!" "@" "#" "$" "%" "^" "&" "*" "(" ")" "_" "+" "|" ; "Q" "W" "E" "R" "T" "Y" "U" "I" "O" "P" "{" "}" "" ; "A" "S" "D" "F" "G" "H" "J" "K" "L" ":" "\"" "~" "" ; "Z" "X" "C" "V" "B" "N" "M" "<" ">" "?" "" "" "")) ;(set! tutcode-heading-label-char-list-for-kigou-mode ; (delete "" uim-candwin-prog-layout)) -- 木原 英人 / KIHARA, Hideto / de...@m1.interq.or.jp http://www1.interq.or.jp/~deton/ -- Google Groups "uim-ja" group uim-ja@googlegroups.com http://groups.google.com/group/uim-ja/about