Eclipseでターミナルを開くプラグインを作ってみた

otaguro 114views 更新:2016年12月7日

StartExplorer Eclipse Plug-inでよくターミナルを開いているのですが、指定していたフォルダの位置ではなくホームディレクトリで開くようになるバグが起きるようになりました。
良い機会なのでEclipseのプラグイン開発の勉強がてら、Macで「ターミナルを開く」プラグインを作ってみました。

1.Plug-in Projectを作成する

  • 「File>New>Project…>Plug-in Project」を選択
  • プロジェクト名を適当に「jp.kn.runTerminal」と付けて、
  • テンプレートは「Plug-in with a popup menu」を選択。
  • 他はデフォルトでOK。

2.ファイルではなくフォルダを右クリックした時に実行されるように設定変更

プラグインの設定ファイル(plugin.xml)を開いて

  • objectContribution objectClass=”org.eclipse.core.resources.IFile”をIFolderに書き換え
  • ついでに、分かりやすいようにmenu label=”拡張機能”とaction label=”ターミナルを開く”に書き換えておく

3.呼び出されるプログラム(NewAction.java)を編集する

ポップアップの代わりに、「open -a /Applications/Utilities/Terminal.app {開きたいフォルダのパス}」コマンドを発行します。 開きたいフォルダのパスはselectionChanged()メソッド内で取得しておきます。

package jp.kn.runterminal.popup.actions;

import java.io.IOException;
import java.util.List;
import org.eclipse.core.internal.resources.Folder;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;

public class NewAction implements IObjectActionDelegate {

    private Shell shell;
    private String folderPath;

    /**
     * Constructor for Action1.
     */
    public NewAction() {
        super();
    }

    /**
     * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
     */
    public void setActivePart(IAction action, IWorkbenchPart targetPart) {
        shell = targetPart.getSite().getShell();
    }

    /**
     * @see IActionDelegate#run(IAction)
     */
    public void run(IAction action) {
        String[] cmd = { "open", "-a", "/Applications/Utilities/Terminal.app",folderPath};
        try {
            Process process = Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //MessageDialog.openInformation(
        //  shell,
        //  "RunTerminal",
        //  "New Action was executed.");
    }

    /**
     * @see IActionDelegate#selectionChanged(IAction, ISelection)
     */
    public void selectionChanged(IAction action, ISelection selection) {
        List<Folder> selectedItem = ((IStructuredSelection) selection).toList();
        Folder folder = selectedItem.get(0);
        folderPath = folder.getRawLocation().toOSString();
        //System.out.println(folderPath);
    }

}

4.動作確認

  • 自動作成されたファイルMANIFEST.MFを選択
  • 「Launch an Eclipse application in Debug mode」を選択
  • 新しく立ち上がったEclipseのナビゲータビューで、「フォルダを右クリック>拡張機能>ターミナルを開く」を実行する

参考


バグは、ターミナルで「open -a /Applications/Utilities/Terminal.app {開きたいパス}」を実行するか、StartExplorerをGithubからcloneしてきて「Launch an Eclipse application in Debug mode」でデバッグすれば特定できそうです

コメント

  1. otaguro のコメント (2016年12月8日)

    StartExplorer Eclipse Plug-inではなくて、bashの設定ファイルの問題だったようです。

    「open -a /Applications/Utilities/Terminal.app {開きたいパス}」をターミナルから実行した場合にもホームディレクトリが開かれていたので、bashの設定ファイルを「cat ~/.bash_profile」で確認。「cd ~/Document」の行があったので、削除したら直りました。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません