# Eclipse-Console: Hyperlink ausgeben, der Datei öffnet



## BlackFlash (12. Dez 2008)

Hallo zusammen,

hab mich gerade frisch angemeldet und hoffe, dass ich mit meinem Problem in der richtigen Kategorie gelandet bin. 

Es geht um folgendes: Ihr kennt ja sicher unter Eclipse die Console, in der z.B. auftretende Exceptions näher beschrieben werden. Zu diesen Exceptions gibt's ja auch immer Hyperlinks, die einen an genau die Stelle in der entsprechenden Datei leiten, an der die Exception geworfen wurde. Genau solche Links (genauer gesagt wird es nur einer) möchte ich nun auch dort platzieren - natürlich in meiner eigenen Ausgabe. 

Ich hab das mit der Methode addHyperlink aus der Klasse TextConsole.class versucht, jedoch verlangt diese ein int offset als Parameter, um den Link an genau dieser Stelle zu platzieren. Problem: Ich hab keine feste Stelle für den Link, die Position ist flexibel. Ich bräuchte also eigentlich, wenn ich einem offset zwingend angeben muss, sowas wie getPosition() um die aktuelle Position in der Console herauszufinden. Das scheint die Console jedoch nicht zu können.

Hat jemand eine Idee, wie ich das Problem, vielleicht auch anders als oben erwähnt, mit dem Hyperlink lösen könnte? Bei den Exceptions klappts ja auch, und im Grunde brauch ich genau sowas. Allerdings finde ich nichts dazu.

Sinn der Sache: Ich kompiliere eine Datei und wenn in dieser Datei z.B. Syntaxfehler auftreten gebe ich die entsprechnden Zeilen in der Console aus. Zusätzlich will in den Link angeben, der mich dann direkt zur entsprechenden Datei leitet.

Ich hoffe jemand von euch hat ne Idee. Danke schonmal!!


----------



## Wildcard (12. Dez 2008)

Registrier einene PatternMatchListener und darin addest du die Hyperlinks.

*verschieb*


----------



## BlackFlash (12. Dez 2008)

vielleicht etwas genauer?  :bahnhof:


----------



## BlackFlash (15. Dez 2008)

Hallo,

kann mir das einer mit dem PatternMatchListener genauer erklären? Hab mir das mal angeschaut, erkenne aber noch nicht wie mir das helfen kann/soll.


----------



## Wildcard (23. Dez 2008)

Die Konsole kennt nur Text, du musst also den Text Parsen um Links setzen zu können, daher der Listener.
Schau dir einfach mal die Implementierung der Java Konsole an, ist ja Open Source.


----------



## BlackFlash (21. Jan 2009)

Hallo,

ich hab das jetzt mit dem PatternMatchListener mal ausprobiert komme aber nicht weiter. Hier mein Code:


```
private TextConsole currentListeningConsole;

	@Override
	public void connect(TextConsole console) {
		System.out.println("connect");
		currentListeningConsole = console;
	}

	@Override
	public void disconnect() {
		currentListeningConsole = null;
	}

	@Override
	public void matchFound(PatternMatchEvent event) {
		System.out.println("matchFound");
		if (currentListeningConsole != null) {
			try {
				currentListeningConsole.addHyperlink(createNewHyperLink(event), event.getOffset(), event
						.getLength());
			} catch (BadLocationException e) {
				e.printStackTrace();
			}
		}
	}
```

und hier der code der plugin.xml:


```
<extension
         point="org.eclipse.ui.console.consolePatternMatchListeners">
	<consolePatternMatchListener
            class="//meinPackage\\.JavaScriptShell"
            id="//meinPackage\\"
            regex="Open">
             <enablement>
            <instanceof
                  value="org.eclipse.ui.console.IOConsole">
            </instanceof>
         </enablement>
      	</consolePatternMatchListener>
	</extension>
```

connect() rufe ich in meinem Konstruktor auf und gebe diesem "console" vom Typ IOConsole mit. 
Allerdings reagiert matchFound() nicht darauf, wenn "Open" auf meiner Konsole ausgegeben wird. Hab ich was vergessen oder was falsch gemacht?

Ich hoffe es kann mit jemand helfen. Danke schonmal!!


----------

