はじめに
DTP Transitさんの別館(note)で、ドキュメントをスムーズに切り替えるスクリプトを紹介されていました。
その中で、下記懸念事項があるとのことでした。
クリックで選択すると実際にアクティブなウインドウが切り替わりますが、↓キーの場合、フォーカスがドキュメントから戻ってきません…
これを解消してみた、というのが本記事です。
できたもの
DTP Transitさんの公開版から改変した機能としては下記2点。
- 矢印キーでアクティブなウィンドウを切り替えられるようにした
- ダイアログを表示したタイミングで別のドキュメントをアクティブにするようにした
ほかに、中身の書き方をちょっといじったり、ということをしています。
コード
gistからダウンロード可能です。
改修部分の解説
矢印キーへの対応
docList.active = true;
を dialog.active = true;
に変えています。
これはScriptUIのクセみたいなもので、コントロール*1へのフォーカスがうまくいかないので、ダイアログそのものをアクティブにするとうまくいった例です。
実行時のドキュメント切り替え
ドキュメントを切り替えたいときに実行するスクリプトだと思うので、実行したタイミングで、フォーカスされたリストのドキュメントに切り替わる必要があると感じました。元のスクリプトではリストのフォーカスを移動して初めて切り替わる仕様だったので、そこを変更しています。
コードとしては、ダイアログを表示するタイミングでDialog.onChange()
メソッドを一度呼び出しています(docList.onChange();
の部分)。
その他
開かれているドキュメントが2つしかない場合、Documents
の要素は[0]
と[1]
で、アクティブでないドキュメントは[1]
と自明なので、for文を削除しました。
ScriptUIにコントロールを追加する際、座標を指定するやり方だと計算が面倒くさい、かつ、ScriptUIの表示仕様が変わると途端にUIが崩れるということがあるので、座標指定をやめています。
具体的には、preferredSize
というプロパティに、WとHを設定しています*2。
矢印キーを使ってアクティブなドキュメントを切り替える仕様のスクリプトになったため、元のスクリプトのままでは「開く」ボタンで「ダイアログを閉じる」という挙動になってしまいました。なのでボタンの表示名を「閉じる」に変更しています。
あわせて、ボタン自体もダイアログの幅めいっぱいに大きくしました(このあたりは好みかもしれない)。
さいごに
本当はもっと早く公開できたはずなんですが、遅くなってしまいました。
元のスクリプトを好き勝手に改変した上、僕のブログで公開していいよと許可をくださった鷹野さん、ありがとうございます!
たくさんの方に使っていただけたら嬉しいです。