2013年2月7日木曜日

MATLAB で figure にフォーカスを奪われない方法

MATLAB で figure(2) のように figure 関数を実行すると Figure 2 のウィンドウにフォーカスが移行し,キーボード操作は Figure 2 のウィンドウが受け付けるようになります.若干再現性に欠けるところもありますが,仕様ではそうなっているようです.
通常はこれで問題ないのですが,長時間の計算を行っていて途中経過を図で表示している場合,別の作業をしている最中に邪魔をされて不便な場合があります.
この場合
figure(2)
のかわりに
set(0,'CurrentFigure',2)
とすれば Figure 2 が描画の対象になりますがキーボードのフォーカスは移動しません. ただし, Figure 2 が存在しない場合エラーになるので,うっかりウインドウを消してしまったときのために
try
  set(0,'CurrentFigure',figidx)
catch
  figure(figidx);
end
としておくとより安全だと思います.