5月Eclipseプラグイン開発勉強会(eclipSKY)にリモート参加しました

小一時間ほど遅刻してしまいましたが、遠隔地から東京開催の5月Eclipseプラグイン開発勉強会に参加しました。今回の勉強会では、基本的に黙々と各自がプラグイン開発をしつつ必要があれば互いに相談し合う、というものでした。

この勉強会の時間で、かねてから「あったらいいなー」と思っていた"Emacsキーバインドでエディタ画面を分割したりできる"プラグインの開発に着手してみました。その結果、案の定、エディタ画面をマウスで分割するコードをおっかけるだけで、勉強会の時間が終わってしまいました。

以下、今回の勉強会でわかったこと:
(新しいエディタを開いた後、画面を2分割する場合)

  • エディタのタブをマウスでドラッグすると、マウスのevent経由でorg.eclipse.ui.internal.dnd.DragUtil.performDrag()が呼ばれる。
  • 最終的に、org.eclipse.ui.internal.EditorSashContainer.createStack()で新しいエディタContainerが作成され、org.eclipse.ui.internal.PartStack.remove(LayoutPart)、org.eclipse.ui.internal.EditorStack.add(LayoutPart)が呼ばれる。

というわけで、画面を2分割する場合には、Ctrl-X 2が入力されると以下の処理をすればよさそう:

  1. org.eclipse.ui.internal.hanlders.NewEditorHandler.execute()のように新規エディタを作成
  2. org.eclipse.ui.internal.EditorSashContainer.createStack()をコール
  3. org.eclipse.ui.internal.EditorSashContainer.createStack()で新規エディタContainerを作成
  4. org.eclipse.ui.internal.PartStack.remove()で上記新規エディタをエディタのContainerからremove
  5. org.eclipse.ui.internal.EditorStack.add()で上記新規エディタContainerに上記新規エディタをadd

その他、今回の勉強会でわかったこと(というかid:kompiroさんに教えてもらったこと):

いろいろと勉強になりました。