-
Notifications
You must be signed in to change notification settings - Fork 0
CustomizeUim
= カスタマイズ =
カスタマイズはUimPrefというGUI設定ツール、もしくは~/.uimファイルに自分で記述して行います。 ~/.uimファイルがない場合は$prefix/share/uim/default.scmが読まれます。
UimPrefによる設定は~/.uim.d/customs以下のファイルに書き込まれますが、'''/.uimに記述した設定はそれを上書きします。''' UimPrefの設定を使う場合、/.uimからUimPrefの設定と矛盾する記述を取り除いてください。
LIBUIM_USER_SCM_FILE環境変数を利用することで、一時的にカスタマイズを適用したり、異なるアプリに別々のカスタマイズを適用することができます。
Firefoxでuim-anthyの候補ウィンドウを出さない例:
$ echo '(define anthy-use-candidate-window? #f)' > ~/.uim-firefox
$ LIBUIM_USER_SCM_FILE=~/.uim-firefox firefox &
- enable-lazy-loading?
- enabled-im-list
- installed-im-module-list
上記の変数に関する設定は、~/.uimに記述しても変更する事ができません。 変更するにはUimPrefで設定するか、$prefix/share/uim/installed-modules.scmを直接編集してください。
ファイル中の日本語はすべて'''EUC-JP'''で記述してください。 例えばvimを使っているなら、ファイルの末尾あたりに
;; vim:ft=scheme:fenc=euc-jp
Emacsであれば
;; Local Variables:
;; mode: scheme
;; coding: euc-jp
;; End:
などと書いておくと便利かもしれません。
記述に致命的な不備があっても、エラーメッセージなどを出さず、ただ無視されます。それらは
$ uim-sh ~/.uim
を実行すれば発見できるかもしれません。
基本的な書式
(require-module "モジュール名")
(define 変数名 値)
(define 変数名 値)
...
指定可能なモジュール名を取得するには、UimShで以下を実行してください。
uim> installed-im-module-list
有効無効を指定する変数では、'''#t'''は有効、'''#f'''は無効を表します。
(define generic-use-candidate-window? #t)
任意の文字を指定できる変数では文字を'''""'''で囲む必要があります。
(define canna-segment-separator "|")
数字を指定する変数ではそのまま。
(define generic-candidate-op-count 1)
決められた文字列を指定する変数では文字列の先頭に'''''''がつきます。
(define default-im-name 'anthy)
基本的な書式
(require-module "モジュール名")
(define-key キー変数名 '("キー名"))
(define-key キー変数名 '("キー名"))
...
キー名を複数指定する場合はスペースで区切ります。
(define-key generic-on-key? '("a" "b"))
また別のキー変数名を指定する事でキー指定を同期させる事ができます。
(define-key generic-on-key? '("a" "b"))
(define-key anthy-on-key? '(generic-on-key? "c"))
修飾キーは<>で囲みます。
(define-key generic-on-key? '("<Shift>a"))
また修飾キーを一般のキーとして使う時は_keyをつけます
(define-key generic-on-key? '("<Control>Alt_key"))
キー名の表記方法はUimFepの'''-K'''オプションが役に立ちます。
uim | Xmodmap |
---|---|
" " | "space" |
"up" | "Up" |
"down" | "Down" |
"left" | "Left" |
"right" | "Right" |
"home" | "Home" |
"next" | "Next" |
"prior" | "Prior" |
"delete" | "Delete" |
"end" | "End" |
"insert" | "Insert" |
"backspace" | "BackSpace" |
"return" | "Return" |
"tab" | "Tab" |
"F1" | "F1" |
"F35" | "F35" |
uim | Xmodmap |
---|---|
" |
<Control>
" | "Control_L" "Control_R" | | "
<Alt>
" | "Alt_L" "Alt_R" | | "
<Shift>
" | "Shift_L" "Shift_R" | | "
<Meta>
" | "Meta_L" "Meta_R" | | "
<Super>
" | "Super_L" "Super_R" | | "
<Hyper>
" | "Hyper_L" "Hyper_R" |
uim | Xmodmap |
---|---|
"Multi_key" | "Multi_key" |
"codeinput" | "Codeinput" |
"single-candidate" | "SingleCandidate" |
"multiple-candidate" | "MultipleCandidate" |
"previous-candidate" | "PreviousCandidate" |
"Mode_switch" | "Mode_switch" |
"Kanji" | "Kanji" |
"Muhenkan" | "Muhenkan" |
"Henkan_Mode" | "Henkan_Mode" |
"romaji" | "Romaji" |
"hiragana" | "Hiragana" |
"katakana" | "Katakana" |
"hiragana-katakana" | "Hiragana_Katakana" |
"zenkaku" | "Zenkaku" |
"hankaku" | "Hankaku" |
"zenkaku-hankaku" | "Zenkaku_Hankaku" |
"touroku" | "Touroku" |
"massyo" | "Massyo" |
"kana-lock" | "Kana_Lock" |
"kana-shift" | "Kana_Shift" |
"eisu-shift" | "Eisu_Shift" |
"eisu-toggle | "Eisu_toggle" |
"Private1" | |
"Private30" |
基本的な書式
(require-module "anthy")
(define 変数名 値)
(define 変数名 値)
...
ftp://ftp.linet.gr.jp/pub/Plamo/Plamo-4.2/contrib/FEP/
http://pc10.2ch.net/test/read.cgi/linux/1135968795/581
--- /usr/local/share/uim/anthy.scm.orig
+++ /usr/local/share/uim/anthy.scm
@@ -1092,9 +1092,9 @@
(ustr-cursor-move-end! raw-str))
;; modifiers (except shift) => ignore
- ((and (modifier-key-mask key-state)
- (not (shift-key-mask key-state)))
- #f)
+;; ((and (modifier-key-mask key-state)
+;; (not (shift-key-mask key-state)))
+;; #f)
((symbol? key)
#f)
~/.uimに
(require "japanese.scm")
(define ja-rk-rule-basic (append '((((" ") . ())(" " " " " "))) ja-rk-rule-basic))
(ja-rk-rule-update)
で、修飾キー+SPC。
基本的な書式
(require-module "skk")
(define 変数名 値)
(define 変数名 値)
...
基本的な書式
(require-module "skk")
(define skk-style-スタイル名
'((変数名 . 値)
...
(変数名 . 値)))
(define skk-style 'skk-style-スタイル名)
; 例
(require-module "skk")
(define skk-style-simple
'((skk-preedit-attr-mode-mark . preedit-none)
(skk-preedit-attr-head . preedit-none)
(skk-preedit-attr-okuri . preedit-none)
(skk-preedit-attr-pending-rk . preedit-none)
(skk-preedit-attr-conv-body . preedit-none)
(skk-preedit-attr-conv-okuri . preedit-none)
(skk-preedit-attr-conv-appendix . preedit-none)
(skk-preedit-attr-direct-pending-rk . preedit-none)
(skk-preedit-attr-child-beginning-mark . preedit-none)
(skk-preedit-attr-child-end-mark . preedit-none)
(skk-preedit-attr-child-committed . preedit-none)
(skk-preedit-attr-child-dialog . preedit-none)
(skk-preedit-attr-dcomp . preedit-none)
(skk-child-context-beginning-mark . "[")
(skk-child-context-end-mark . "]")
(skk-show-cursor-on-preedit? . #t)
(skk-show-candidates-with-okuri? . #f)))
(define skk-style 'skk-style-simple)
動作 | 変数名 | 指定できる値 |
---|---|---|
モードマーク | skk-preedit-attr-mode-mark | preedit-none preedit-reverse preedit-underline preedit-cursor preedit-separator |
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 再帰学習モードの送り仮名 skk-preedit-attr-okuri preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator ▽モードのローマ字プレフィックス skk-preedit-attr-pending-rk preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator ▼モードの見出し語 skk-preedit-attr-conv-body preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator ▼モードの送り仮名 skk-preedit-attr-conv-okuri preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator skk-preedit-attr-conv-appendix preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator ローマ字プレフィックス skk-preedit-attr-direct-pending-rk preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 再帰学習エリアの先頭 skk-preedit-attr-child-beginning-mark preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 再帰学習エリアの終わり skk-preedit-attr-child-end-mark preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 再帰学習エリア skk-preedit-attr-child-committed preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 単語削除エリア skk-preedit-attr-child-dialog preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 動的補完エリア skk-preedit-attr-dcomp preedit-none
preedit-reverse
preedit-underline
preedit-cursor
preedit-separator 再帰学習エリアの先頭を示す文字 skk-child-context-beginning-mark "文字" 再帰学習エリアの終わりを示す文字 skk-child-context-end-mark "文字" ▽モードで文字を入力している時にカーソルを表示するか skk-show-cursor-on-preedit? #t #f 候補選択ウィンドウ中に表示される候補に送り仮名を付加するか skk-show-candidates-with-okuri? #t #f
(require-module "skk")
(define skk-ddskk-like-heading-label-char-list '("a" "s" "d" "f" "j" "k" "l"))
(require-module "skk")
(define skk-auto-start-henkan-keyword-list
'("を" "、" "。" "." "," "?" "」" "!" ";" ":" ")" ";" ":" ")" "”"
"】" "』" "》" "〉" "}" "]" "〕" "}" "]" "?" "." "," "!"))
$prefix/share/uim/skk.scmに2箇所ある
;; don't clear dcomp (not compatible with ddskk's behavior)
;;(skk-reset-dcomp-word sc)
のコメントを外してください。
基本的な書式
(require-module "prime")
(define キー変数名 '("キー名")
(define キー変数名 '("キー名")
...
動作 | キー変数名 |
---|---|
全角スペース | prime-space-key? |
半角スペース | prime-altspace-key? |
全角/半角キーは端末では認識できないので、端末で認識できるキーシーケンスを割り当てます。 ここでは全角/半角キーをF10にしますが、この場合、端末以外のアプリケーションでも全角/半角キーがF10になるので注意してください。
ktermを使っている場合、/.Xresource(/.Xdefaults)に次のように書きます。
kterm.VT100.Translations: #override \
<Key>Zenkaku_Hankaku: string("\033[21~")
xtermを使っている場合、/.Xresource(/.Xdefaults)に次のように書きます。
xterm.VT100.Translations: #override \
<Key>Zenkaku_Hankaku: string("\033[21~")
rxvtを使っている場合、/.Xresource(/.Xdefaults)に次のように書きます。
rxvt.keysym.Zenkaku_Hankaku: "\033[21~"
atermを使っている場合、/.Xresource(/.Xdefaults)に次のように書きます。
aterm.keysym.Zenkaku_Hankaku: "\033[21~"
そしてログインしなおすか、次のコマンドを入力します。
$ xrdb -m ~/.Xresources
mltermを使っている場合、~/.mlterm/keyに次のように書きます。
Zenkaku_Hankaku="^[21~"
^[21の部分はF10のキーシーケンスです。 vimではCtrl+v F10、emacsではCtrl+q F10で入力できます。/.Eterm/user.cfgに次のように書きます。
Etermを使っている場合、
<Eterm-0.9>
begin actions
bind Zenkaku_Hankaku to echo "\e[21~"
end actions
その他のXの端末を使っている場合 ~/.Xmodmapに次のように書きます。
keysym Zenkaku_Hankaku = F10
ログインしなおすか、次のコマンドを入力します。
$ xmodmap ~/.Xmodmap
teratermを使っている場合、TTERMPRO\keycode.exeを起動して全角/半角キーのキーコードを調べます。 全角/半角キーのキーコードは41であることが分かります。 TTERMPRO\KEYBOARDに次のように書きます。
[User Keys]
User1=41,0,$1b[21~
しかし全角/半角キーを押してもWindowsのIMEに取られるので使えません。
Linuxコンソールではloadkeysを使ってキーシーケンスを変えることができます。 まずキーマップの定義ファイルを編集します。 キーマップの定義ファイルはLinuxディストリビューションによってはパスが違うかもしれません。
$ zcat /lib/kbd/keymaps/i386/qwerty/jp106.map.gz > jp.map
$ echo 'keycode 41 = F10' >> jp.map
keycodeの41は全角/半角キーに対応しています。 showkeyコマンドで確かめてください。 showkeyは10秒間入力しないと終了します。
loadkeysでこのキーマップを読み込めば全角/半角キーがF10になります。
$ loadkeys jp
Debianではキーマップの定義ファイルを編集する必要はありません。
# echo 's/keycode 41 = Escape/Keycode 41 = F10/;' >> /etc/console-tools/remap
# /etc/init.d/console-screen.sh(その場で有効化)
FreeBSDでキーマップというとkeymap(5)やkbdcontrol(1)、そして/usr/share/syscons/ファイルが関連するようです。 jp.106x.kbdを参考にしてjp.106.kbdをjp.106z.kbdにコピーして作業開始。
jp.106.kbd:: 普通のキーマップjp.106x.kbd:: Caps LockをCtrlと入れ換えたもの
なので
jp.106z.kbd:: 全角半角をF10にするもの
としました。
以下jp.106.kbdとjp.106z.kbdの差分
--- jp.106.kbd Mon Jun 9 08:55:15 2003
+++ jp.106z.kbd Sun May 9 16:23:41 2004
@@ -1,5 +1,7 @@
# $FreeBSD: src/share/syscons/keymaps/jp.106.kbd,v 1.9 2001/03/11 23:41:18 ache Exp $
# alt
+# (this one has zenkakuhankaku switch to F10)
+#
# scan cntrl alt alt cntrl lock
# code base shift cntrl shift alt shift cntrl shift state
# ------------------------------------------------------------------
@@ -44,7 +46,7 @@
038 'l' 'L' ff ff 'l' 'L' ff ff C
039 ';' '+' nop nop ';' '+' nop nop O
040 ':' '*' nop nop ':' '*' nop nop O
- 041 esc esc esc esc esc esc debug esc O
+ 041 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O
042 lshift lshift lshift lshift lshift lshift lshift lshift O
043 ']' '}' gs gs ']' '}' gs gs O
044 'z' 'Z' sub sub 'z' 'Z' sub sub C
068がF10のようだったのでこれを半角全角の041エントリにしました。
068 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O
http://pc5.2ch.net/test/read.cgi/linux/1084073229/13-14
全角/半角キーをF10にマッピングできたら、~/.uimにこのように書けば全角/半角キーでオン/オフができるようになります。
(define-key generic-on-key? '("zenkaku-hankaku" "<Shift> " "F10"))
(define-key generic-off-key? '("zenkaku-hankaku" "<Shift> " "F10"))
w3mでの日本語入力は一行入力だけです。 そこでw3mでの日本語入力は以下のようになってほしいと思います。 ここではIMの起動キーはCtrl+jとしていますが、好きなキーに変えることができます。
- 一行入力のときにCtrl+jを押すとIMオン
- 一行入力が終わるとIMオフ
- 一行入力以外ではCtrl+jは他の機能
一行入力のときにCtrl+jでIMをオンにして、一行入力が終わったときにIMをオフにするにはw3mを改造する必要があります。
w3mのホームページからw3m-0.5.1.tar.gzをダウンロードします。 次にw3m-uim-fep.diffをダウンロードします。
*** linein.c.orig 2003-09-27 02:59:51.000000000 +0900
--- linein.c 2004-05-20 18:32:36.000000000 +0900
***************
*** 49,60 ****
static void next_dcompl(int next);
static Str doComplete(Str ifn, int *status, int next);
/* *INDENT-OFF* */
void (*InputKeymap[32]) () = {
/* C-@ C-a C-b C-c C-d C-e C-f C-g */
_compl, _mvB, _mvL, _inbrk, delC, _mvE, _mvR, _inbrk,
/* C-h C-i C-j C-k C-l C-m C-n C-o */
! _bs, iself, _enter, killn, iself, _enter, _next, _editor,
/* C-p C-q C-r C-s C-t C-u C-v C-w */
_prev, _quo, _bsw, iself, _mvLw, killb, _quo, _bsw,
/* C-x C-y C-z C-[ C-\ C-] C-^ C-_ */
--- 49,64 ----
static void next_dcompl(int next);
static Str doComplete(Str ifn, int *status, int next);
+ static void im_set_mode(int mode);
+ static void im_on();
+ static void im_off();
+
/* *INDENT-OFF* */
void (*InputKeymap[32]) () = {
/* C-@ C-a C-b C-c C-d C-e C-f C-g */
_compl, _mvB, _mvL, _inbrk, delC, _mvE, _mvR, _inbrk,
/* C-h C-i C-j C-k C-l C-m C-n C-o */
! _bs, iself, im_on, killn, iself, _enter, _next, _editor,
/* C-p C-q C-r C-s C-t C-u C-v C-w */
_prev, _quo, _bsw, iself, _mvLw, killb, _quo, _bsw,
/* C-x C-y C-z C-[ C-\ C-] C-^ C-_ */
***************
*** 255,260 ****
--- 261,267 ----
if (CLen && (flag & IN_CHAR))
break;
} while (i_cont);
+ im_off();
if (CurrentTab) {
if (need_redraw)
***************
*** 1133,1135 ****
--- 1140,1168 ----
if (CurrentTab)
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
+
+ static void
+ im_set_mode(int mode)
+ {
+ char *setmode = getenv("UIM_FEP_SETMODE");
+ if (setmode != NULL) {
+ FILE *fp = fopen(setmode, "w");
+ if (fp) {
+ fprintf(fp, "%d\n", mode);
+ fflush(fp);
+ fclose(fp);
+ }
+ }
+ }
+
+ static void
+ im_on()
+ {
+ im_set_mode(1);
+ }
+
+ static void
+ im_off()
+ {
+ im_set_mode(0);
+ }
w3mのソースにパッチを当ててコンパイル、インストールします。
$ tar xvf w3m-0.5.1.tar.gz
$ cd w3m-0.5.1
$ patch <../w3m-uim-fep.diff
$ ./configure
$ make
# make install
一行入力以外のときのCtrl+jに機能を割り当てます。 例えばNEXT_DOWNを割り当てる場合は~/.w3m/keymapに次のように書きます。
keymap C-j NEXT_DOWN
次に~/.uim-w3mを用意します。 ~/.uimに書いてしまうと、w3m以外でもCtrl+jでIMが起動しなくなってしまうので注意。
;; uim-anthyの場合
(define-key anthy-on-key? '())
;; uim-skkの場合
(define-key skk-on-key? '())
;; uim-primeの場合
(define-key prime-on-key? '())
...
そして以下のような起動用スクリプトからw3mを起動します。
#!/bin/sh
# Ctrl+jとCtrl+mが区別させる
stty -icrnl
trap "stty icrnl" 0 1 2 3 15
# w3mのパスは手元の環境に合わせてください
LIBUIM_USER_SCM_FILE=~/.uim-w3m uim-fep -e /usr/local/bin/w3m "$@"
以下の方法より、uim-ctlを使うほうがいいかもしれません。
vim 6.4にKaoriYaさんのパッチを当てると、vimからuim-fepを制御できるようになります。 その他にもmigemoなどの便利な機能が使えるようになります。 ここではKaoriYaさんのパッチが6.4用のものであるとしてインストールの説明をします。
cmigemoのインストール migemoを使わない場合はインストールする必要はありません。
$ cvs -d :pserver:anonymous@cvs.kaoriya.net:/anonycvs login
$ cvs -d :pserver:anonymous@cvs.kaoriya.net:/anonycvs checkout -r dev-1_3
migemo
$ cd migemo
$ ./configure
$ make gcc
$ make gcc-dict
$ su
# make gcc-install
ダウンロード vim.orgのダウンロードのページから vim-6.4.tar.bz2、 vim-6.4-extra.tar.gz、 vim-6.4-lang.tar.gz、 KaoriYaさんからVim 6.4 差分パッケージをダウンロードします。
$ wget ftp://ftp.vim.org/pub/vim/unix/vim-6.4.tar.bz2
$ wget ftp://ftp.vim.org/pub/vim/extra/vim-6.4-extra.tar.gz
$ wget ftp://ftp.vim.org/pub/vim/extra/vim-6.4-lang.tar.gz
$ wget http://www.kaoriya.net/dist/vim-6.4-difj.tar.bz2
コンパイル 展開します。
$ tar jxvf vim-6.4-difj.tar.bz2
$ tar jxvf vim-6.4.tar.bz2
$ tar zxvf vim-6.4-extra.tar.gz
$ tar zxvf vim-6.4-lang.tar.gz
gnu tarがない場合は
$ bunzip2 -c vim-6.4-difj.tar.bz2|tar xvf -
$ bunzip2 -c vim-6.4.tar.bz2|tar xvf -
$ gunzip -c vim-6.4-extra.tar.gz|tar xvf -
$ gunzip -c vim-6.4-lang.tar.gz|tar xvf -
パッチを当ててconfigureします。
$ cd vim64
$ patch -p0 <../vim-6.4-difj/diffs/kaoriya.diff
$ ./configure --with-features=big --enable-multibyte
あとはmakeするだけです。
$ make
$ su
# make install
必要な設定
:set ttimeoutlen=10
操作方法 インサートモードでCtrl+を押すとIMがオンになります。 IMがオンの状態で、Ctrl+を押すとIMがオフになります。 Escを押してノーマルモードになるとIMは自動的にオフになります。 再度インサートモードにすると、以前のインサートモードのIMの状態に戻ります。
キーバインドの変更 IMをオンにするキーを変更する方法です。 例えばCtrl+jにするには~/.vimrcで以下のように設定します。
:inoremap <C-j> <C-^>
:cnoremap <C-j> <C-^>
ただし、cnoremapで
にマップすると、@:を押すとIMがオンになってしまい、前回のexコマンドを繰り返せなくなります。
uimの方は以下のように設定します。 skkのF10は全角英数モードになったときにひらがなモードに戻すためです。
(define-key skk-on-key? '("F10"))
(define-key anthy-on-key? '())
(define-key prime-on-key? '())
IMの状態を保存しない インサートモードになったときに常にIMがオフになるようにする方法です。 ただし、インサートモードで矢印キーなどが効かなくなります。
:inoremap <silent> <esc> <esc>:se imi=0<cr>
デフォルトでIMをオフにする vimを起動して最初にインサートモードになったときにIMをオフにする方法です。
:se imi=0
:se ims=0
パッチを当てる ノーマルモードのfコマンドでIMがオンになったりするなど使いにくいところがあっ たのでパッチを作りました。
f, F, t, T, rでIMをオンにしない IMをオンにした状態でノーマルモードになってfなどを押すとIMがオンになっ てしまいます。これを回避するためのパッチです。 6.3.054用 6.3.085用 6.4用
<C->でIMをオフにしない <C->はIMをトグルするキーですが、<C-^>でIMをオフにしないようにするため のパッチです。IMをオフにするときはuimのキーバインドで行います。 6.3.054用 6.3.085用 6.4用
/(検索)のときにIMをオンにしない /や?で検索するときにIMをオフにするパッチです。 6.3.054用 6.3.085用 6.4用
<C-^>で常にひらがなモードにする skkでは全角英数からIMをオフにして再度オンにすると全角英数になってしまいます。 IMがオンになったときは常にひらがなモードにするためのパッチです。 6.3.054用 6.3.085用 6.4用
@:でIMがオンにならないようにする cnoremapで
にマップしていると、@:が効かなくなるのを回避するためのパッチです。 6.3.054用 6.3.085用 6.4用
パッチの当て方 KaoriYaパッチを当てたあとにvim64ディレクトリで、このように当てます。
$for i in uim-fep-vim-*.diff
do
patch -p0 < $i
done
上の5つのパッチを全部当てる場合は5つのパッチをまとめたこのパッチを使ってください。 6.3.054用 6.3.085用 6.4用
起動スクリプト
#!/bin/sh
LIBUIM_USER_SCM_FILE=~/.uim-vim exec uim-fep -e /usr/local/bin/vim "$@"
この起動スクリプトをvimという名前にする場合は最後の行の-eの後のvimを本物の vimのフルパスにしてください。
http://d.hatena.ne.jp/higepon/20061002/1159797987
;; uim-mode by higepon
;; ON/OFFでカーソルの色を変更。
;; ON時に必ず日本語入力モードにする
(defadvice uim-this-command-keys (around uim-send-zenkaku-hankaku)
(setq ad-return-value `[zenkaku-hankaku]))
(defadvice uim-mode (around my-uim-mode)
ad-do-it
(set-face-background 'cursor (if ad-return-value "blue" "indian red"))
(ad-activate-regexp "uim-send-zenkaku-hankaku")
(uim-process-input)
(ad-deactivate-regexp "uim-send-zenkaku-hankaku"))
(ad-activate-regexp "my-uim-mode")
基本的な書式
(require "util.scm")
(define uim-color-配色名
'((変数 . 値)
...
(変数 . 値)))
(define uim-color 'uim-color-配色名)
; 例
(require "util.scm")
(define uim-color-mono
'((reversed-preedit-foreground . "white")
(reversed-preedit-background . "black")
(separator-foreground . "white")
(separator-background . "black")
(reversed-separator-foreground . "white")
(reversed-separator-background . "black")))
(define uim-color 'uim-color-mono)
動作 | 変数名 | 指定できる値 |
---|---|---|
reversed-preedit-foreground | "色名" | |
reversed-preedit-background | "色名" | |
separator-foreground | "色名" | |
separator-background | "色名" | |
reversed-separator-foreground | "色名" | |
reversed-separator-background | "色名" |
http://groups.google.com/group/uim-en/t/b64641ed041ea9a6
$prefix/share/uim/im.scmを
Index: im.scm
===================================================================
--- im.scm (revision 5780)
+++ im.scm (working copy)
@@ -456,6 +456,15 @@
((and enable-im-switch?
(switch-im-key? key state))
(switch-im uc (im-name im)))
+
+ ;; im switch hack
+ ((switch-to-im1-key? key state)
+ (im-switch-im uc switch-im1))
+ ((switch-to-im2-key? key state)
+ (im-switch-im uc switch-im2))
+ ((switch-to-im3-key? key state)
+ (im-switch-im uc switch-im3))
+
((modifier-key? key state)
;; don't discard modifier press/release edge for apps
(im-commit-raw c))
~/.uimに
(define switch-to-im1-key '("<Alt>1"))
(define switch-to-im1-key? (make-key-predicate switch-to-im1-key))
(define switch-im1 'direct)
(define switch-to-im2-key '("<Alt>2"))
(define switch-to-im2-key? (make-key-predicate switch-to-im2-key))
(define switch-im2 'm17n-ru-kbd)
(define switch-to-im3-key '("<Alt>3"))
(define switch-to-im3-key? (make-key-predicate switch-to-im3-key))
(define switch-im3 'anthy)
この例では、Alt+1で直接入力、Alt+2でm17n-ru-kbd、Alt+3でAnthyに切り換わります。
uimアーカイブには含まれていないモジュールが色々と公開されています。 どんなモジュールがあるかは、UimLinksページの「関係ソフトウェア」の項をどうぞ。
幾つか注意点あります。
インストール先に注意してください。 uimが/usr/lib下にインストールされているなら、モジュールも/usr/lib下にインストールする必要があります。
インストールが完了したら、UimModuleManagerでuimのモジュールリストへ追加してください。 例えばuim-festivalモジュールを追加するには
# uim-module-manager --register festival
後はUimPrefで「使用可能にする入力方式」の有効リストに入れましょう。
基本的な書式 (for uim >= 1.6)
(require "japanese.scm")
(set! ja-rk-rule-basic (cons '(
(("キー名") . ()) ("ひらがな入力モード" "カタカナ入力モード" "半角カタカナ入力モード")
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic (append '(
((("キー名") . ()) ("ひらがな入力モード" "カタカナ入力モード" "半角カタカナ入力モード"))
...
((("キー名") . ()) ("ひらがな入力モード" "カタカナ入力モード" "半角カタカナ入力モード")))
ja-rk-rule-basic))
(ja-rk-rule-update)
uim-skkでは、ja-rk-ruleではなくskk-ja-rk-ruleが使用されるため、
上記の設定をした後に、
(define skk-ja-rk-rule (append ja-rk-rule-basic ja-rk-rule-additional)
を設定。
スペースには''ja-space''と''ja-alnum-space''という専用の変数が用意されている。
(require "japanese.scm")
(define ja-space '("ひらがな入力モード "カタカナ入力モード" "半角カタカナ入力モード"))
(define ja-alnum-space '("半角英数入力モード" "全角英数入力モード"))
入力後、即座に確定するキーは''ja-direct-rule''という変数を使う。
(require "japanese.scm")
(set! ja-direct-rule (cons '(
("キー名" "文字")
)
ja-direct-rule))
としてください。
変換用テーブルは、基礎的なテーブルの'''ja-rk-rule-basic'''と、付加的なテーブルの'''ja-rk-rule-additional'''に分かれています。 ja-rk-rule-additionalを使わないように設定することで、一風変わった変換ルールをまとめて無効にできます。
(require "japanese.scm")
(define ja-rk-rule-update
(lambda ()
(if ja-rk-rule-keep-consonant?
(set! ja-rk-rule (append ja-rk-rule-consonant-to-keep
ja-rk-rule-basic))
(set! ja-rk-rule ja-rk-rule-basic))))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
(((",") . ()) ("," "," ","))
(((".") . ()) ("." "." "."))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("/") . ()) ("・" "・" "・"))
((("\\") . ()) ("¥" "¥" "¥"))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
'''これはUimSkkでのみ有効です。'''
(require-module "skk")
(define skk-ja-rk-rule
(append '(
((("z" " "). ())(" " " " " "))
)
skk-ja-rk-rule))
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("c" "a"). ())("か" "カ" "カ"))
((("c" "i"). ())("し" "シ" "シ"))
((("c" "u"). ())("く" "ク" "ク"))
((("c" "e"). ())("せ" "セ" "セ"))
((("c" "o"). ())("そ" "ソ" "ソ"))
((("q" "q"). ("q"))("っ" "ッ" "ッ"))
((("v" "y" "i"). ())(("う゛" "ヴ" "ヴ") ("ぃ" "ィ" "ィ")))
((("x" "n"). ())("ん" "ン" "ン"))
((("x" "x"). ("x"))("っ" "ッ" "ッ"))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("l" "k" "a"). ())("ヵ" "ヵ" "カ"))
((("l" "k" "e"). ())("ヶ" "ヶ" "ケ"))
((("l" "w" "a"). ())("ゎ" "ヮ" "ワ"))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("\\" "a"). ())("ぁ" "ァ" "ァ"))
((("\\" "i"). ())("ぃ" "ィ" "ィ"))
((("\\" "u"). ())("ぅ" "ゥ" "ゥ"))
((("\\" "e"). ())("ぇ" "ェ" "ェ"))
((("\\" "o"). ())("ぉ" "ォ" "ォ"))
((("\\" "k" "a"). ())("ヵ" "ヵ" "カ"))
((("\\" "k" "e"). ())("ヶ" "ヶ" "ケ"))
((("\\" "y" "a"). ())("ゃ" "ャ" "ャ"))
((("\\" "y" "u"). ())("ゅ" "ュ" "ュ"))
((("\\" "y" "o"). ())("ょ" "ョ" "ョ"))
((("g" "w" "a"). ())(("ぐ" "グ" "グ") ("ゎ" "ヮ" "ワ")))
((("g" "w" "u"). ())("ぐ" "グ" "グ"))
((("k" "w" "a"). ())(("く" "ク" "ク") ("ゎ" "ヮ" "ワ")))
((("k" "w" "u"). ())("く" "ク" "ク"))
((("l" "a"). ())("ら" "ラ" "ラ"))
((("l" "i"). ())("り" "リ" "リ"))
((("l" "u"). ())("る" "ル" "ル"))
((("l" "e"). ())("れ" "レ" "レ"))
((("l" "o"). ())("ろ" "ロ" "ロ"))
((("m" "m"). ("m"))("ん" "ン" "ン"))
((("n" "'"). ())("ん" "ン" "ン"))
((("t" "c" "h"). ("h" "c"))("っ" "ッ" "ッ"))
((("t" "s" "a"). ())(("つ" "ツ" "ツ") ("ぁ" "ァ" "ァ")))
((("t" "s" "i"). ())(("つ" "ツ" "ツ") ("ぃ" "ィ" "ィ")))
((("t" "s" "e"). ())(("つ" "ツ" "ツ") ("ぇ" "ェ" "ェ")))
((("t" "s" "o"). ())(("つ" "ツ" "ツ") ("ぉ" "ォ" "ォ")))
((("w" "i"). ())("ゐ" "ヰ" "ィ"))
((("w" "e"). ())("ゑ" "ヱ" "ェ"))
((("x" "/"). ())("/" "/" "/"))
((("x" "-"). ())("-" "-" "-"))
((("x" ","). ())("," "," ","))
((("x" "."). ())("." "." "."))
((("x" "~"). ())("~" "~" "~"))
((("x" "^"). ())("^" "^" "^"))
((("x" "\\"). ())("\" "\" "\\"))
((("x" "["). ())("[" "[" "["))
((("x" ";"). ())(";" ";" ";"))
((("x" ":"). ())(":" ":" ":"))
((("x" "]"). ())("]" "]" "]"))
((("x" "/"). ())("/" "/" "/"))
((("x" "d" "i"). ())(("で" "デ" "デ") ("ぃ" "ィ" "ィ")))
((("x" "d" "u"). ())(("ど" "ド" "ド") ("ぅ" "ゥ" "ゥ")))
((("x" "d" "e"). ())(("で" "デ" "デ") ("ぇ" "ェ" "ェ")))
((("x" "d" "o"). ())(("ど" "ド" "ド") ("ぉ" "ォ" "ォ")))
((("x" "t" "i"). ())(("て" "テ" "テ") ("ぃ" "ィ" "ィ")))
((("x" "w" "i"). ())(("う" "ウ" "ウ") ("ぃ" "ィ" "ィ")))
((("x" "w" "e"). ())(("う" "ウ" "ウ") ("ぇ" "ェ" "ェ")))
((("x" "w" "o"). ())(("う" "ウ" "ウ") ("ぉ" "ォ" "ォ")))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("\\"). ())("¥" "¥" "\\"))
((("{"). ())("『" "『" "["))
((("}"). ())("』" "』" "]"))
((("@" "-"). ("/"))("-" "-" "-"))
((("@" "/"). ())("・" "・" "・"))
((("@" "\\"). ())("\" "\" "\\"))
((("@" ","). ())("," "," ","))
((("@" "."). ())("." "." "."))
((("@" "~"). ())("〜" "〜" "~"))
((("@" "|" "|"). ())("‖" "‖" ""))
((("@" "|"). ())("|" "|" "|"))
((("@" "3"). ())("…" "…" ""))
((("@" "2"). ())("‥" "‥" ""))
((("@" "("). ())("(" "(" "("))
((("@" ")"). ())(")" ")" ")"))
((("@" "["). ())("[" "[" "["))
((("@" "]"). ())("]" "]" "]"))
((("@" "{"). ())("{" "{" "{"))
((("@" "}"). ())("}" "}" "}"))
((("c" "a"). ())("か" "カ" "カ"))
((("c" "u"). ())("く" "ク" "ク"))
((("c" "o"). ())("こ" "コ" "コ"))
((("l" "a"). ())("ら" "ラ" "ラ"))
((("l" "i"). ())("り" "リ" "リ"))
((("l" "u"). ())("る" "ル" "ル"))
((("l" "e"). ())("れ" "レ" "レ"))
((("l" "o"). ())("ろ" "ロ" "ロ"))
((("m" "n"). ())("ん" "ン" "ン"))
((("n" "'"). ())("ん" "ン" "ン"))
((("q" "q"). ("q"))("っ" "ッ" "ッ"))
((("t" "c" "h"). ("h" "c"))("っ" "ッ" "ッ"))
((("w" "i"). ())("ゐ" "ヰ" "ィ"))
((("w" "e"). ())("ゑ" "ヱ" "ェ"))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("c" "a"). ())("か" "カ" "カ"))
((("c" "i"). ())("し" "シ" "シ"))
((("c" "u"). ())(("き" "キ" "キ") ("ゅ" "ュ" "ュ")))
((("c" "e"). ())("せ" "セ" "セ"))
((("c" "o"). ())("そ" "ソ" "ソ"))
((("g" "w" "a"). ())(("ぐ" "グ" "グ") ("ゎ" "ヮ" "ワ")))
((("g" "w" "u"). ())("ぐ" "グ" "グ"))
((("k" "w" "a"). ())(("く" "ク" "ク") ("ゎ" "ヮ" "ワ")))
((("k" "w" "u"). ())("く" "ク" "ク"))
((("l" "a"). ())("ら" "ラ" "ラ"))
((("l" "i"). ())("り" "リ" "リ"))
((("l" "u"). ())("る" "ル" "ル"))
((("l" "e"). ())("れ" "レ" "レ"))
((("l" "o"). ())("ろ" "ロ" "ロ"))
((("q" "a"). ())(("く" "ク" "ク") ("ぁ" "ァ" "ァ")))
((("q" "i"). ())(("く" "ク" "ク") ("ぃ" "ィ" "ィ")))
((("q" "u"). ())("く" "ク" "ク"))
((("q" "e"). ())(("く" "ク" "ク") ("ぇ" "ェ" "ェ")))
((("q" "o"). ())(("く" "ク" "ク") ("ぉ" "ォ" "ォ")))
((("x" "x"). ("x"))("っ" "ッ" "ッ"))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
ftp://ftp.linet.gr.jp/pub/Plamo/Plamo-4.2/contrib/FEP/
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("g" "s" "e"). ())(("つ" "ツ" "ツ") ("ぇ" "ェ" "ェ")))
((("g" "w" "u"). ())("ぐ" "グ" "グ"))
((("k" "w" "u"). ())("く" "ク" "ク"))
((("l" "a"). ())("ら" "ラ" "ラ"))
((("l" "i"). ())("り" "リ" "リ"))
((("l" "u"). ())("る" "ル" "ル"))
((("l" "e"). ())("れ" "レ" "レ"))
((("l" "o"). ())("ろ" "ロ" "ロ"))
((("n" "'"). ())("ん" "ン" "ン"))
((("w" "i"). ())("ゐ" "ヰ" "ィ"))
((("w" "e"). ())("ゑ" "ヱ" "ェ"))
((("x" "d" "i"). ())(("で" "デ" "デ") ("ぃ" "ィ" "ィ")))
((("x" "d" "u"). ())(("ど" "ド" "ド") ("ぅ" "ゥ" "ゥ")))
((("x" "d" "e"). ())(("で" "デ" "デ") ("ぇ" "ェ" "ェ")))
((("x" "d" "o"). ())(("ど" "ド" "ド") ("ぉ" "ォ" "ォ")))
((("x" "t" "i"). ())(("て" "テ" "テ") ("ぃ" "ィ" "ィ")))
((("x" "w" "i"). ())(("う" "ウ" "ウ") ("ぃ" "ィ" "ィ")))
((("x" "w" "e"). ())(("う" "ウ" "ウ") ("ぇ" "ェ" "ェ")))
((("x" "w" "o"). ())(("う" "ウ" "ウ") ("ぉ" "ォ" "ォ")))
((("z" "!"). ())("●" "●" ""))
((("z" "\""). ())("“" "“" ""))
((("z" "#"). ())("▲" "▲" ""))
((("z" "$"). ())("■" "■" ""))
((("z" "&"). ())("£" "£" ""))
((("z" "'"). ())("‘" "‘" ""))
((("z" "("). ())("【" "【" ""))
((("z" ")"). ())("】" "】" ""))
((("z" "~"). ())("¨" "¨" ""))
((("z" "="). ())("≠" "≠" ""))
((("z" "^"). ())("★" "★" ""))
((("z" "\\"). ())("\" "\" ""))
((("z" "|"). ())("‖" "‖" ""))
((("z" "`"). ())("´" "´" ""))
((("z" "@"). ())("▼" "▼" ""))
((("z" "{"). ())("〔" "〔" ""))
((("z" "+"). ())("±" "±" ""))
((("z" ";"). ())("゛" "゛" ""))
((("z" "*"). ())("×" "×" ""))
((("z" ":"). ())("゜" "゜" ""))
((("z" "}"). ())("〕" "〕" ""))
((("z" "<"). ())("≦" "≦" ""))
((("z" ">"). ())("≧" "≧" ""))
((("z" "?"). ())("∞" "∞" ""))
((("z" "_"). ())("∴" "∴" ""))
((("z" "1"). ())("○" "○" ""))
((("z" "2"). ())("▽" "▽" ""))
((("z" "3"). ())("△" "△" ""))
((("z" "4"). ())("□" "□" ""))
((("z" "5"). ())("◇" "◇" ""))
((("z" "6"). ())("☆" "☆" ""))
((("z" "7"). ())("◎" "◎" ""))
((("z" "8"). ())("¢" "¢" ""))
((("z" "9"). ())("♂" "♂" ""))
((("z" "0"). ())("♀" "♀" ""))
((("z" "b"). ())("°" "°" ""))
((("z" "c"). ())("〇" "〇" ""))
((("z" "d"). ())("ゝ" "ゝ" ""))
((("z" "f"). ())("〃" "〃" ""))
((("z" "g"). ())("‐" "‐" ""))
((("z" "m"). ())("″" "″" ""))
((("z" "n"). ())("′" "′" ""))
((("z" "p"). ())("〒" "〒" ""))
((("z" "q"). ())("《" "《" ""))
((("z" "r"). ())("々" "々" ""))
((("z" "s"). ())("ヽ" "ヽ" ""))
((("z" "t"). ())("〆" "〆" ""))
((("z" "v"). ())("※" "※" ""))
((("z" "w"). ())("》" "》" ""))
((("z" "x"). ())((":" ":" "") ("-" "-" "")))
((("z" "B"). ())("←" "←" ""))
((("z" "C"). ())("℃" "℃" ""))
((("z" "D"). ())("ゞ" "ゞ" ""))
((("z" "F"). ())("→" "→" ""))
((("z" "G"). ())("―" "―" ""))
((("z" "M"). ())("〓" "〓" ""))
((("z" "N"). ())("↓" "↓" ""))
((("z" "P"). ())("↑" "↑" ""))
((("z" "Q"). ())("〈" "〈" ""))
((("z" "R"). ())("仝" "仝" ""))
((("z" "S"). ())("ヾ" "ヾ" ""))
((("z" "T"). ())("§" "§" ""))
((("z" "V"). ())("÷" "÷" ""))
((("z" "W"). ())("〉" "〉" ""))
((("Z" "a"). ())("a" "a" ""))
((("Z" "b"). ())("b" "b" ""))
((("Z" "c"). ())("c" "c" ""))
((("Z" "d"). ())("d" "d" ""))
((("Z" "e"). ())("e" "e" ""))
((("Z" "f"). ())("f" "f" ""))
((("Z" "g"). ())("g" "g" ""))
((("Z" "h"). ())("h" "h" ""))
((("Z" "i"). ())("i" "i" ""))
((("Z" "j"). ())("j" "j" ""))
((("Z" "k"). ())("k" "k" ""))
((("Z" "l"). ())("l" "l" ""))
((("Z" "m"). ())("m" "m" ""))
((("Z" "n"). ())("n" "n" ""))
((("Z" "o"). ())("o" "o" ""))
((("Z" "p"). ())("p" "p" ""))
((("Z" "q"). ())("q" "q" ""))
((("Z" "r"). ())("r" "r" ""))
((("Z" "s"). ())("s" "s" ""))
((("Z" "t"). ())("t" "t" ""))
((("Z" "u"). ())("u" "u" ""))
((("Z" "v"). ())("v" "v" ""))
((("Z" "w"). ())("w" "w" ""))
((("Z" "x"). ())("x" "x" ""))
((("Z" "y"). ())("y" "y" ""))
((("Z" "z"). ())("z" "z" ""))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(define ja-rk-rule-basic
(append '(
((("t" "h" "a"). ())(("て" "テ" "テ") ("ぁ" "ァ" "ァ")))
((("n" "'"). ())("ん" "ン" "ン"))
((("x" "x"). ("x"))("っ" "ッ" "ッ"))
)
ja-rk-rule-basic))
(ja-rk-rule-update)
(require "japanese.scm")
(require "tcode.scm")
;; ja-rk-rule-update を無効に
(define ja-rk-rule-update
(lambda ()
'()))
(set! ja-rk-rule tcode-rule)