CIOC
CIOC

Reputation: 1427

Add custom console to Eclipse console list

Based on this tutorial, I'm creating an Eclipse plugin which provides a new console, The console is added to the view and I can print messages there, but for some reason it is not added to the consoles list (the dropdown list in the view's corner, see image below).

This is how I'm creating the console:

public void createConsole(String name) {
    ConsolePlugin plugin = ConsolePlugin.getDefault();
    IConsoleManager consoleManager = plugin.getConsoleManager();

    console = new MessageConsole(name, null);
    consoleManager.addConsoles(new IConsole[]{console});
}

And then I can print messages using this method:

public void print(String msg) {
    MessageConsoleStream out = console.newMessageStream();
    out.println(msg);
}

Also I'm using this method to bring the console view to the front:

public void bringToFront() {
    try{
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        String id = IConsoleConstants.ID_CONSOLE_VIEW;
        IConsoleView view = (IConsoleView) page.showView(id);
        view.display(console);
    } catch(PartInitException e) {
        e.printStackTrace();
    }
}

enter image description here

Any suggestions?

Upvotes: 3

Views: 2101

Answers (1)

Rüdiger Herrmann
Rüdiger Herrmann

Reputation: 20985

To add a new type of console to the console view, you need to provide a consoleFactories extension:

<extension
      point="org.eclipse.ui.console.consoleFactories">
   <consoleFactory
         class="com.example.MyConsoleFactory"
         icon="icons/etool16/my-console.png"
         label="My Console">
   </consoleFactory>
</extension>

The factory class needs to provide an implementation for openConsole in which your console is created and shown, just like you did in your existing code:

class ConsoleFactory implements IConsoleFactory {
   @Override
   public void openConsole() {
      IConsoleManager consoleManager =
         ConsolePlugin.getDefault().getConsoleManager();
      MyConsole console = new MyConsole();
      consoleManager.addConsoles( new IConsole[] { console } );
      consoleManager.showConsoleView( console );
   }
}

Upvotes: 4

Related Questions