Wie öffnet man eine Datei aus Tracy im Editor? (IDE-Integration)

Wenn die Fehlerseite angezeigt wird, können Sie auf Dateinamen klicken, und sie öffnen sich in Ihrem Editor mit dem Cursor auf der entsprechenden Zeile. Dateien lassen sich auch anlegen (Aktion create file) oder Fehler darin beheben (Aktion fix it). Dafür müssen Sie den Browser und das System konfigurieren.

Tracy öffnet Dateien über URLs der Form editor://open/?file=%file&line=%line, also über das Protokoll editor://. Für dieses Protokoll müssen wir einen eigenen Handler registrieren. Dieser Handler kann eine beliebige ausführbare Datei sein, die die Parameter verarbeitet und Ihren bevorzugten Editor startet.

Die URL können Sie in der Variablen Tracy\Debugger::$editor ändern oder das Anklicken mit Tracy\Debugger::$editor = null abschalten.

Windows

  1. Laden Sie die passenden Dateien aus dem Repository von Tracy auf die Festplatte.
  2. Bearbeiten Sie die Datei open-editor.js und kommentieren Sie im Objekt settings den Pfad zu Ihrem Editor ein und passen Sie ihn nötigenfalls an:
var settings = {

	// PhpStorm
	editor: '"C:\\Program Files\\JetBrains\\PhpStorm 2018.1.2\\bin\\phpstorm64.exe" --line %line% "%file%"',
	title: 'PhpStorm',

	// NetBeans
	// editor: '"C:\\Program Files\\NetBeans 8.1\\bin\\netbeans.exe" "%file%:%line%" --console suppress',

	// Sublime Text 2
	// editor: '"C:\\Program Files\\Sublime Text 2\\sublime_text.exe" "%file%:%line%"',

	...
}

...

Seien Sie vorsichtig und behalten Sie die doppelten Backslashes in den Pfaden bei.

3. Registrieren Sie den Handler für das Protokoll editor:// im System.

Das geschieht durch Ausführen von install.cmd. Sie müssen es als Administrator ausführen. Das Skript open-editor.js bedient nun das Protokoll editor://.

Um Links zu öffnen, die auf anderen Servern erzeugt wurden, etwa auf einem Produktionsserver oder in Docker, ergänzen Sie in open-editor.js eine Zuordnung von entfernten zu lokalen URLs:

	mappings: {
		// entfernter Pfad: lokaler Pfad
		'/var/www/nette.app': 'W:\\Nette.web\\_web',
		'/var/www/second.app': 'W:\\Second.web'
	}

Unter Windows läuft open-editor.js im Windows Script Host, dessen JScript-Engine nur ECMA-262 3rd Edition (1999) versteht. Halten Sie sich beim Bearbeiten des Skripts an altmodisches JavaScript: Verwenden Sie var statt let oder const, vermeiden Sie Arrow Functions und setzen Sie hinter das letzte Element eines Objekts kein abschließendes Komma. Moderne Syntax verursacht einen Skriptfehler, und das Protokoll editor:// öffnet den Editor stillschweigend nicht.

Die Zuordnung von entfernten zu lokalen Pfaden können Sie auch auf der PHP-Seite über Debugger::$editorMapping festlegen, was unabhängig vom Editor-Handler und von der Plattform funktioniert.

Linux

  1. Laden Sie die passenden Dateien aus dem Repository von Tracy in das Verzeichnis ~/bin.
  2. Bearbeiten Sie die Datei open-editor.sh und kommentieren Sie in der Variablen editor den Pfad zu Ihrem Editor ein und passen Sie ihn nötigenfalls an.
#!/bin/bash

# Emacs
#editor='emacs +$LINE "$FILE"'

# gVim
#editor='gvim +$LINE "$FILE"'

# gEdit
#editor='gedit +$LINE "$FILE"'

# Pluma
#editor='pluma +$LINE "$FILE"'

...

Machen Sie sie ausführbar:

chmod +x ~/bin/open-editor.sh

Wenn der Editor, den Sie verwenden, nicht aus einem Paket installiert ist, liegt seine Binary womöglich nicht im $PATH des Systems. Das lässt sich leicht beheben. Legen Sie im Verzeichnis ~/bin einen symbolischen Link auf die Binary des Editors an.

3. Registrieren Sie den Handler für das Protokoll editor:// im System.

Das geschieht durch Ausführen der Datei install.sh. Das Skript open-editor.sh bedient nun das Protokoll editor://.

macOS

Editoren wie PhpStorm, TextMate usw. erlauben das Öffnen von Dateien über eine spezielle URL, die Sie nur setzen müssen:

// PhpStorm
Tracy\Debugger::$editor = 'phpstorm://open?file=%file&line=%line';
// TextMate
Tracy\Debugger::$editor = 'txmt://open/?url=file://%file&line=%line';
// MacVim
Tracy\Debugger::$editor = 'mvim://open?url=file:///%file&line=%line';
// Visual Studio Code
Tracy\Debugger::$editor = 'vscode://file/%file:%line';

Wenn Sie Tracy eigenständig verwenden, setzen Sie die Zeile vor Tracy\Debugger::enable(). Wenn Sie Nette verwenden, setzen Sie sie in Bootstrap.php vor $configurator->enableTracy().

Leider funktionieren die Aktionen create file und fix it unter macOS nicht.

Demos

Einen Fehler beheben:

Eine neue Datei anlegen:

Fehlerbehebung

  • In Firefox müssen Sie eventuell in about:config die Ausführung eigener Protokolle erlauben, indem Sie network.protocol-handler.expose.editor auf false und network.protocol-handler.expose-all auf true setzen. Standardmäßig sollte es allerdings erlaubt sein.
  • Wenn es nicht sofort funktioniert, keine Panik. Versuchen Sie, die Seite vor dem Klick auf den Link ein paarmal neu zu laden, oder starten Sie den Browser oder den Rechner neu. Das sollte helfen.
  • Hier ist ein Link zur Behebung möglicher Fehler wie: Input Error: There is no script engine for file extension ".js" oder Maybe you associated ".js" file to another app, not JScript engine.

Ab Google Chrome Version 77 sehen Sie das Kästchen “Always open these types of links in the associated app” nicht mehr, wenn der Editor über einen Link gestartet wird. Behelfslösung für Windows: Legen Sie die Datei fix.reg an:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"AutoLaunchProtocolsFromOrigins"="[{\"allowed_origins\": [\"*\"],\"protocol\": \"editor\"}]"

Importieren Sie sie per Doppelklick und starten Sie Chrome neu. Die Richtlinie AutoLaunchProtocolsFromOrigins unterdrückt den Bestätigungsdialog des Browsers vollständig. Das Skript install.cmd setzt das automatisch, einschließlich einer auskommentierten Zeile für Vivaldi (dieselbe Richtlinie unter HKLM\SOFTWARE\Policies\Vivaldi).

Bei weiteren Fragen oder Anregungen besuchen Sie bitte das Forum.