窓使いの憂鬱 8

このエントリーをはてなブックマークに追加
558名無しさん@お腹いっぱい。
のどかで独自定義のかな配列を使っていて、かな入力中に英数字を入力できるようにするために(具体的に言うと月配列2-263の最上段)

&SetImeConvStatus(0x0008) &Sync _1 &Sync &SetImeConvStatus(0x0009)

みたいにして英数オン→数字or記号→英数オフで実現してるんですが、メモ帳なんかだとこれで行けるのにFirefoxとかSkypeのテキスト入力では&Syncが効かない(&Syncが無いときと同じ挙動)みたいです。これって既知の問題なんでしょうか?

今のところ緊急避難的に&Wait(5)とかに差し替えてなんとかなってるんですが、&Syncの場合には起こらない問題(同時打鍵でかなが混じって入力されてしまう)が厄介なので、出来ればどのアプリでも&Syncで通したいところです。

def syncでスキャンコードいじればなんとかなったりするんでしょうか?
559名無しさん@お腹いっぱい。:2009/09/15(火) 00:32:16 ID:dpUp7URo0
Atok?
俺はまだその関数使ってないけど、IME周りの挙動がOSやIMEによっておかしくなるのは
仕様だと思ってる。
月配列ならカナモードじゃなくローマ字モードでやっちゃったほうが楽なんじゃね。
最上段いじらなくていいし。カナロックで配列いじってんのかな。
560名無しさん@お腹いっぱい。:2009/09/15(火) 02:18:29 ID:+lPx8sz10
ATOK2009です。本当はMS-IMEでも試してから書き込むべきだったんでしょうが、言語バーから削除しちゃって元に戻すの面倒だったんで……。
ただ、ATOKでも&SetImeConvStatus自体は正しく機能しているらしく、問題の一行も&Waitに置き換えれば問題ないので、やはり「特定のアプリにおいて&Syncで同期がとれていない」というのが原因なのではないかと思います。

かなモード実装にこだわるのは、菱とまったく同じ動作をする設定を繭で書きたいと思っていて、のどかの新しい関数を使えば楽だなー、と思いついたからです。署名取得も現実味を帯びてきたようだし、菱もこれから先使えるのかわからないし。
結果だけ見れば、かなとローマ字では確かにごくわずかな違いしかありませんが……(IMEの変換候補を英字インデックスにした時に誤操作が減ります)。

ローマ字モードで実装した例はたとえば↓のようなことですね。
ttp://kyoto.cool.ne.jp/mayuto64/dependence/mayu.htm
じつはここのやり方を参考にして、同じことを逆にやってみています。「濁点・半濁点の時だけカナロック」ではなく、「英数字の時だけ英数モードON」です。

――というような話は、月と新JISのスレでした方がいいのかも知れませんが、&Syncまわりのトラブルだとアタリがついているので、こちらで訊いてみました。

&Syncのデフォルト

def sync = 0x7e

をいじってみて、うまくいった経験のある方はいないですかね?
あるいは&Wait以外の回避策など……
561560:2009/09/15(火) 03:23:32 ID:+lPx8sz10
ちなみにChromeとIEでは&Syncで問題ありませんでした。
562名無しさん@お腹いっぱい。:2009/09/15(火) 13:02:59 ID:z4r5hL6V0
のどか本家の掲示板で聞いたら?
563名無しさん@お腹いっぱい。:2009/09/15(火) 13:27:30 ID:z4r5hL6V0
あと、言語バーから消しただけなら復活させるのは一瞬だろ、MS-IME。
564名無しさん@お腹いっぱい。:2009/09/15(火) 17:38:08 ID:+lPx8sz10
そうですね。公式のサポートで問い合わせた方がいいかな。

一応、問題の設定ファイルを貼っておきます。
上記のリンク先のものを拝借・改変しただけなので恐縮ですが。
ttp://sites.google.com/site/tsukihairetsu/Tsuki2-263.nodoka
興味のある方は試して感想をお聞かせください。
565名無しさん@お腹いっぱい。:2009/09/15(火) 19:40:41 ID:3c23b9BKP
>>564
Functionとキー入力を混ぜるときに&Syncが必要なわけで
Functionばかりにすれば良いのでは
&SetImeConvStatus(0x0008) &SendText("1") &SetImeConvStatus(0x0009)
566名無しさん@お腹いっぱい。:2009/09/15(火) 20:43:16 ID:+lPx8sz10
なるほど。
まぜ書きしなければ基本的に&Sync不要なんですね。

実は全部のキーを&SendTextで設定しちゃえばいいのでは?
と思って試したんですが、それだと数字や(シフトごしの)英字で
変換候補が選択できないっぽい。
目標は一応、菱の「過不足ない代替」なので残念ながらNGです。

ならば&VKで仮想キーを送ればいいのでは?とおもいついて、

&SetImeConvStatus(0x0008) &VK(D-_1) &VK(U-_1) &SetImeConvStatus(0x0009)

を試してみたところ、結果は&Syncなしの

&SetImeConvStatus(0x0008) _1 &SetImeConvStatus(0x0009)

と同じで、どうも記述順に実行されていない様子。
蛇足に思える&Syncを挟んで

&SetImeConvStatus(0x0008) &Sync &VK(D-_1) &VK(U-_1) &Sync &SetImeConvStatus(0x0009)

だと完璧に動作するのですが。
やはりキー入力が絡んでる局面では同期か遅延が必須みたいですねえ。
567名無しさん@お腹いっぱい。:2009/09/15(火) 22:57:16 ID:3c23b9BKP
>>566
FireFoxでは、&Syncが効いていないというよりも、最初の&SetImeConvStatus()が失敗しているように見えるので
先頭に&Syncを付けるのは、どうでしょうか?

&Sync &SetImeConvStatus(0x0008) &Sync _1 &Sync &SetImeConvStatus(0x0009)
568名無しさん@お腹いっぱい。:2009/09/15(火) 23:57:03 ID:+lPx8sz10
> &Syncが効いていないというよりも、最初の&SetImeConvStatus()が失敗しているように見える

たしかにそのようにも見えますね……。
内部でどうなっているのかわからないので、結果から推測するだけですが。

残念ながら、ご提案いただいた方法でも改善しないようです。

&Syncと差し替えた&Waitも3ms以下に設定するとダメなのですが、これは見た感じ
「&SetImeConvStatusの処理に3ms前後かかっており、それ以下の遅延だと
以降の処理に追い越されてしまう」
というようなことなのかなあ、と。だから英数字のかわりにかなが出力されてしまう。

やはり一度&SetImeConvStatusから切り離して、別の関数との組み合わせで
試してみないことには&Sync固有の問題とは言い切れないようです。
なにかわかりやすいサンプルを考えて試してみます。
569568:2009/09/16(水) 00:37:52 ID:uSRUn3Hp0
早速つくってやってみました。

include "109.nodoka"
key T = &ClipboardCopy("A") &Sync C-V B &Sync &ClipboardCopy("C") &Sync C-V

で、Tを連打すると理屈では「AbC」が出力されるはずですし、実際メモ帳などではそうなります。
(CapsLockがかかっていれば真ん中はBになるでしょうが)

ところがこれをFirefoxやSkype上でやると「CbC」とか「AbA」しか出ません。
ちなみにアタマに&Syncを足してみても結果は一緒でした。
やはり「&Syncが特定のアプリで有効にならない」ということでしょうか。

いくつか他のアプリケーションで試して確証を得たら、サポートに報告してみようと思います。
なにか、ここまでのところで致命的な勘違い等あったら、どうぞご指摘ください。
570名無しさん@お腹いっぱい。:2009/09/16(水) 00:56:43 ID:HlKczduD0
&Syncって1回しか効かないんじゃなかったっけ
571名無しさん@お腹いっぱい。:2009/09/16(水) 01:45:49 ID:/EXp32uK0
>>557
ご指摘通り、スキャンコード書き換え後は正しく動作するようになりました。ありがとうございます。
しかし副作用によりyamy無効時はCapsLockが機能しなくなったので、
個人的にはOneShotモディファイヤでキー本来の機能を残しておいた意義が
なくなってしまった…うーん悩ましい…。
572名無しさん@お腹いっぱい。:2009/09/16(水) 02:57:25 ID:JVhkBrzk0
>571
escapeNLSkeys=1 じゃいかんの?
573名無しさん@お腹いっぱい。:2009/09/16(水) 07:44:51 ID:uSRUn3Hp0
>>570
そういえば>>184でもちらっとそんな話題が出てましたね。

ヘルプには特に注意書きはないし、公式ブログ↓でもそういう例が取り上げられてるので
ttp://d.hatena.ne.jp/applet_at_h/20090603/1244031854
べつだん禁止されているというわけではないようです。

ただ、原因としては疑えるかも知れません。
現に片方の&Syncを&Waitに差し替えたらまともに動作しているような……。

&SetImeConvStatus(0x0008) &Wait(5) _1 &Sync &SetImeConvStatus(0x0009)

これでしばらく様子を見てみます。