Jak otworzyć plik w edytorze z Tracy? (integracja z IDE)
Gdy wyświetli się strona błędu, możesz kliknąć w nazwy plików, a otworzą się w Twoim edytorze
z kursorem na odpowiedniej linii. Pliki można też tworzyć (akcja create file) albo naprawiać w nich błędy
(akcja fix it). Żeby to działało, trzeba skonfigurować przeglądarkę i system.
Tracy otwiera pliki przez URL-e postaci editor://open/?file=%file&line=%line, czyli za pomocą protokołu
editor://. Musimy zarejestrować dla tego protokołu własny handler. Handlerem tym może być dowolny plik
wykonywalny, który przetworzy parametry i uruchomi Twój ulubiony edytor.
URL możesz zmienić w zmiennej Tracy\Debugger::$editor, a klikalność wyłączyć, ustawiając
Tracy\Debugger::$editor = null.
Windows
- Pobierz na dysk odpowiednie pliki z repozytorium Tracy.
- Zmodyfikuj plik
open-editor.jsi w obiekciesettingsodkomentuj, a w razie potrzeby zmodyfikuj ścieżkę do swojego edytora:
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%"',
...
}
...
Uważaj i zachowaj w ścieżkach podwójne odwrotne ukośniki.
3. Zarejestruj w systemie handler dla protokołu editor://.
Robi się to, uruchamiając install.cmd. Musisz uruchomić go jako Administrator. Skrypt
open-editor.js będzie teraz obsługiwać protokół editor://.
Żeby otwierać odnośniki generowane na innych serwerach, na przykład na serwerze produkcyjnym albo w Dockerze, dodaj do
open-editor.js mapowanie ścieżek zdalnych na lokalne:
mappings: {
// ścieżka zdalna: ścieżka lokalna
'/var/www/nette.app': 'W:\\Nette.web\\_web',
'/var/www/second.app': 'W:\\Second.web'
}
W Windows open-editor.js działa pod Windows Script Host, którego silnik JScript rozumie tylko
ECMA-262 3rd Edition (1999). Modyfikując skrypt, trzymaj się staroszkolnego JavaScriptu: używaj var zamiast
let czy const, unikaj funkcji strzałkowych i nie zostawiaj przecinka za ostatnią pozycją obiektu.
Nowoczesna składnia powoduje błąd skryptu, a protokół editor:// po cichu nie otworzy edytora.
Mapowanie ścieżek zdalnych na lokalne możesz zdefiniować także po stronie PHP przez Debugger::$editorMapping, co działa niezależnie od handlera edytora i platformy.
Linux
- Pobierz odpowiednie pliki z repozytorium
Tracy do katalogu
~/bin. - Zmodyfikuj plik
open-editor.shi odkomentuj, a w razie potrzeby zmodyfikuj ścieżkę do swojego edytora w zmiennejeditor.
#!/bin/bash
# Emacs
#editor='emacs +$LINE "$FILE"'
# gVim
#editor='gvim +$LINE "$FILE"'
# gEdit
#editor='gedit +$LINE "$FILE"'
# Pluma
#editor='pluma +$LINE "$FILE"'
...
Nadaj mu prawo wykonywania:
chmod +x ~/bin/open-editor.sh
Jeśli edytor, którego używasz, nie jest zainstalowany z pakietu, jego binarka może nie być w systemowym
$PATH. Da się to łatwo naprawić. W katalogu ~/bin utwórz dowiązanie symboliczne do binarki
edytora.
3. Zarejestruj w systemie handler dla protokołu editor://.
Robi się to, uruchamiając plik install.sh. Skrypt open-editor.sh będzie teraz obsługiwać
protokół editor://.
macOS
Edytory takie jak PhpStorm, TextMate itd. pozwalają otwierać pliki przez specjalny URL, który wystarczy ustawić:
// 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';
Jeśli używasz samodzielnej Tracy, umieść tę linię przed Tracy\Debugger::enable(). Jeśli używasz Nette,
umieść ją przed $configurator->enableTracy() w Bootstrap.php.
Niestety akcje create file i fix it w macOS nie działają.
Dema
Naprawa błędu:
Utworzenie nowego pliku:
Rozwiązywanie problemów
- W Firefoksie możesz potrzebować zezwolić na
uruchamianie własnych protokołów w
about:config, ustawiającnetwork.protocol-handler.expose.editornafalse, anetwork.protocol-handler.expose-allnatrue. Domyślnie powinno to być jednak dozwolone. - Jeśli nie zadziała od razu, nie panikuj. Spróbuj kilka razy odświeżyć stronę przed kliknięciem w odnośnik albo zrestartuj przeglądarkę czy komputer. To powinno pomóc.
- Tutaj jest odnośnik
do naprawy ewentualnych błędów typu:
Input Error: There is no script engine for file extension ".js"alboMaybe you associated ".js" file to another app, not JScript engine.
Od wersji Google Chrome 77 nie zobaczysz już przy uruchamianiu edytora odnośnikiem checkboxa “Zawsze otwieraj tego typu
odnośniki w powiązanej aplikacji”. Obejście dla Windows: utwórz plik fix.reg:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"AutoLaunchProtocolsFromOrigins"="[{\"allowed_origins\": [\"*\"],\"protocol\": \"editor\"}]"
Zaimportuj go podwójnym kliknięciem i zrestartuj Chrome. Polityka AutoLaunchProtocolsFromOrigins całkowicie
wyłącza okno potwierdzenia przeglądarki. Skrypt install.cmd ustawia to automatycznie, wraz z zakomentowaną
linią dla Vivaldi (ta sama polityka pod HKLM\SOFTWARE\Policies\Vivaldi).
Z dalszymi pytaniami albo sugestiami zajrzyj na forum.