Jak otworzyć plik w edytorze z Tracy? (integracja z IDE)
********************************************************
.[perex]
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
=======
1. Pobierz na dysk odpowiednie pliki "z repozytorium Tracy":https://github.com/nette/tracy/tree/master/tools/open-in-editor/windows.
2. Zmodyfikuj plik `open-editor.js` i w obiekcie `settings` odkomentuj, a w razie potrzeby zmodyfikuj ścieżkę do swojego edytora:
```js
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:
```js
mappings: {
// ścieżka zdalna: ścieżka lokalna
'/var/www/nette.app': 'W:\\Nette.web\\_web',
'/var/www/second.app': 'W:\\Second.web'
}
```
.[caution]
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.
.[note]
Mapowanie ścieżek zdalnych na lokalne możesz zdefiniować także po stronie PHP przez [Debugger::$editorMapping |configuring#Pozostałe], co działa niezależnie od handlera edytora i platformy.
Linux
=====
1. Pobierz odpowiednie pliki "z repozytorium Tracy":https://github.com/nette/tracy/tree/master/tools/open-in-editor/linux do katalogu `~/bin`.
2. Zmodyfikuj plik `open-editor.sh` i odkomentuj, a w razie potrzeby zmodyfikuj ścieżkę do swojego edytora w zmiennej `editor`.
```shell
#!/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:
```shell
chmod +x ~/bin/open-editor.sh
```
.[note]
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ć:
```php
// 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:
<iframe width="560" height="315" src="https://www.youtube.com/embed/3ITT4mC0Eq4?rel=0&showinfo=0" frameborder="0" allow="encrypted-media" allowfullscreen></iframe>
Utworzenie nowego pliku:
<iframe width="560" height="315" src="https://www.youtube.com/embed/AJ_FUivAGZQ?rel=0&showinfo=0" frameborder="0" allow="encrypted-media" allowfullscreen></iframe>
Rozwiązywanie problemów
=======================
- W Firefoksie możesz potrzebować [zezwolić |http://kb.mozillazine.org/Register_protocol#Firefox_3.5_and_above] na uruchamianie własnych protokołów w `about:config`, ustawiając `network.protocol-handler.expose.editor` na `false`, a `network.protocol-handler.expose-all` na `true`. 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|https://www.winhelponline.com/blog/error-there-is-no-script-engine-for-file-extension-when-running-js-files/] do naprawy ewentualnych błędów typu: `Input Error: There is no script engine for file extension ".js"` albo `Maybe 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 |https://forum.nette.org].
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.
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:
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.
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ć:
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ąc network.protocol-handler.expose.editor
na false, a network.protocol-handler.expose-all na true. 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"
albo Maybe 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.