私は EEGlab のeegplot
機能 (vim スタイルのナビゲーションなど) を修正する作業を行っていWindowKeyPressFcn
ます。
しかし、何らかの理由でコールバックが呼び出されていません。私はしばらく問題をデバッグしてきましたが、少し迷っています。何が間違っているのかについての提案を探しています。残念ながら、eegplot
関数は大きく、複雑で、やや複雑であり、簡単な例で問題を再現できませんでした。したがって、明らかに存在する関数ハンドルがある時点で使用されなくなる可能性がある理由について、一般的な提案を探していWindowKeyPressFcn
ます。
これまでに学んだことは次のとおりです。
- デバッグ モードに移行すると
eegplot
(setup 関数 [eegplot の前半] の終了近くにブレークポイントを設定)WindowKeyPressFcn
、少なくとも 1 回は実行できます。 - ただし、関数はデバッグ中のある時点で呼び出されなくなります (一度だけ呼び出された後でも)。
- デバッグなしで実行
eegplot
すると (つまり、終了して制御が返されるのを待ちます)WindowKeyPressFcn
、キーを押して呼び出すことができません。関数ハンドルはWindowKeyPressFcn
Figure のプロパティにまだ存在します。 キー
WindowKeyPressFcn
を押したときに が使用されていない場合でも、次のように呼び出すことができます。figh = gcf; fun = get(figh, 'WindowKeyPressFcn'); ev.Key = 'rightarrow'; ev.Character = ' '; ev.Modifier = []; feval(fun, figh, ev);
したがって、関数ハンドルはいわば「健全」ですが、キーが押されて Figure にフォーカスがある場合、何らかの理由で使用されなくなります。いつ、なぜこのようなことが起こり得るのでしょうか? この問題を理解するために確認する必要があることについてのアイデアはありますか?
更新:
WindowKeyPressFcn コールバックが一部のウィンドウ リスナーによってブロックされる場合があることがわかり、次の解決策を試しました。
hManager = uigetmodemanager(gcf);
set(hManager.WindowListenerHandles,'Enable','off');
動作しません - キーを押しても WindowKeyPressFcn は呼び出されません。:(
更新 2 :
動作しない別のこと:
chld = get(gcf, 'Children');
tp = get(chld, 'type');
chld = chld(strcmp(tp, 'uicontrol'));
set(chld, 'KeyPressFcn', @eegplot_readkey_new)
(eegplot_readkey_new
キープレスに反応するために使用する機能です)
更新 3 :
そして別の 1 つが動作していません:
addlistener(gcf, 'WindowKeyPress', @eegplot_readkey_new);