6年越しのBug 8009 [Editor Mgmt] Split File Editor

https://bugs.eclipse.org/bugs/show_bug.cgi?id=8009

Bugzillaに登録されたのが2002年1月22日。6年以上前です。どんな内容かというと

It would improve usability if it were possible to split the file
editor like you can in MS Word or emacs. That is to say, have
the equivalent of two editors open on the same file in the same
page.

登録されて以来、「その機能は実現済みだ」「いや、実現済みではない。このBugはこういう機能のことを言っている」みたいな感じで議論が繰り返されています。つい2008年5月2日にも、「その機能は実現済みだ」というコメントが。

上記コメントでも指摘されているように、現状のEclipseでは、同一ファイルを複数のエディタ画面で表示/編集可能です。まず、ファイルをエディタで開き、「タブを右クリック→New Editor」でエディタを複製した後、一方のエディタのタブをマウスを使ってドラッグ&ドロップすることで、上下や左右に分割することができます。

一方、「いや、実現済みではない。このBugはこういう機能のことを言っている」と反論したい方々にも、何通りかイメージがあるようで、一例が以下。単一EditorPart内で複数の画面をSashで表示するというものです。

個人的には、Emacsと同じようにマウスに手を持っていかずに画面を分割したり統合したりできればいいんです!別に単一EditorPart内で画面分割されなくてもいいです。
というわけで、例えばCtrl-X 2と入力すると以下の一連操作と同等の動作をプログラムで実行するプラグインの開発を昨日のeclipSKYで始めました。これであれば、上記のような特別なEditorを開発する必要はありません。(もちろん、このプラグインはマウスによるドラッグ&ドロップを忠実に再現するのではなく、ドラッグ&ドロップした際の結果のみを再現します。)

  1. タブを右クリック→New Editor
  2. 新規タブをマウスでドラッグ&ドロップ

今のところ、このようなアプローチで画面分割を実現可能にするプラグインはなさそうな気がします。

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さんに教えてもらったこと):

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

Ganymede M7でもそのまま動作しそうなんですが

Reflective Ecore Model Diagram Editor download | SourceForge.netsvnリポジトリからチェックアウトし、少しばかり動作確認したところ、まったく修正することなく動作してそうです。さすが、EMF、GMFともに後方互換性がしっかり確保されているようです。

そこで、sourceforge.net上のダウンロードサイトからダウンロードできるjarファイルを、Equinox/p2/Getting Started - Eclipsepediaに書いてあるように、$ECLIPSE_HOME/dropins以下にコピーしてみました。ところが、いっこうにプラグインを認識してくれません。従来通り$ECLIPSE_HOME/plugins以下にコピーしてもだめです。もう少し調査が必要です。

Ganymede M7のインストール


Reflective Ecore Model Diagram Editor download | SourceForge.netの開発を再開するにあたり、開発用プラットフォームをGanymede M7にしました。

まだEclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects...のようなパッケージサイトがないので、以下のように半手動でインストールしました。

Eclipse Platform SDKのインストール

以下のサイトからEclipse SDKをダウンロードし、適当なディレクトリに解凍します。

http://download.eclipse.org/eclipse/downloads/drops/S-3.4M7-200805020100/index.php

必要なSDKをUpdate Siteからインストール

Reflective Ecore Model Diagram Editorを開発/使用するには、http://www.eclipse.org/modeling/gmf/が必要です。このGMF自体がEMFやGEF等を必要とします。

Eclipse 3.4M6から、プラグインをUpdate Siteからインストールする仕組みが、p2という新システムに移行しました。それに伴い、各プロジェクトが提供するUpdate Siteが旧式向けとp2向けの2通り用意されています。したがって、今回は3.4M7を使用しているので、以下のp2向けUpdate Siteを使用します。

メニュー「ヘルプ」-「Software Updates...」から、「Available Software」ボタン、「Manage Sites...」ボタンを押すと以下のようなダイアログが表示され、「Add...」ボタンを押すと上記Update Siteを登録できます。

あとは、上記Update Siteに登録されているプラグイン群の中から必要なものを選択し、インストールするだけです。あるプラグインを選択しインストールを指示すると登録されたUpdate Site群の中からp2が勝手に依存プラグインを一緒にインストールしてくれます。ただ、今回は各プラグインソースコードも読めるようにしておきたいので、上記Update Siteから以下のSDKをひとつひとつ選択してインストールしました。

  • Eclipse Modeling Framework(EMF) All-In-One SDK
  • EMF Model Query SDK
  • EMF Model Transaction SDK
  • EMF Validation Framework SDK
  • Object Constraint Language(OCL) 2.0 SDK
  • Graphical Editing Framework GEF All-In-One SDK
  • Graphical Modeling Framework SDK

これで晴れてReflective Ecore Model Diagram Editorの開発環境が整いました。

ちなみに、Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects...から"Eclipse IDE for Software Architects and Modeling"をお手軽インストールした場合、"It includes a complete SDK, developer tools and source code."と書いてあるにもかかわらず、EMF関係のソースコードJavadocが関連づけられていませんでした。

再始動!

長らくオンラインでの活動を休止していましたが、今日から再始動します!

去年の11月ぐらいからオフラインでの活動が急激に忙しくなってしまい、大好きなプログラミング、読書、ブログを封印してきました。なんといっても気がかりだったのが、Reflective Ecore Model Diagram Editor download | SourceForge.netの開発中断でした。一部の方から開発状況に関する嬉しい問い合わせもあったからです。今日から開発再開です!あと約1ヶ月でGanymedeもリリースされることですし、これに合わせるかたちでReflective Ecore Model Diagram Editorをバージョンアップさせていければいいな、と思います。

しかも良いタイミングで5月のEclipseプラグイン開発勉強会があるではありませんかー!。。。都合が悪くて参加できそうにありません。リモートから参加可能ですかー?id:kompiroさん?

[Eclipse]Plug-in Spyソースコードリーディング

少し前ですが、11月のEclipseプラグイン勉強会では、Eclipseプラグインソースコードを読む、というのがテーマでした。(残念ながら私は参加できませんでしたが。ん?今日は1月のEclipseプラグイン勉強会が開催されてたかも。。。)
その勉強会で、毛利さんがPlug-in Spyソースコードを解説されたようです。以下にその際に使われたスライドを見ることができます。

http://www.slideshare.net/mouri/plug-in-spy

私もこのエントリで少し解説しましたが、上記スライドの方がはるかに詳しくわかりやすいです。

Plug-in Spyの日本語化

MergeDocやPleiadesを公開されているid:cypher256さんが、Plug-in Spyを日本語化してくださいました。

http://d.hatena.ne.jp/cypher256/20080101/p2

Eclipse 3.3以降、IBMによるEclipseの国際化が行われなくなり、日本のEclipseユーザにとってPleiadesプロジェクトの重要性が高まるばかりですね。