Nette Documentation Preview

syntax
Как открыть файл в редакторе из Tracy? (интеграция с IDE)
*********************************************************

.[perex]
Когда отображается страница с ошибкой, вы можете кликать по именам файлов, и они откроются в вашем редакторе с курсором на соответствующей строке. Файлы можно также создавать (действие `create file`) или исправлять в них ошибки (действие `fix it`). Чтобы это работало, нужно настроить браузер и систему.

Tracy открывает файлы по URL вида `editor://open/?file=%file&line=%line`, то есть через протокол `editor://`. Для этого протокола нам нужно зарегистрировать собственный обработчик. Им может быть любой исполняемый файл, который обработает параметры и запустит ваш любимый редактор.

URL можно изменить в переменной `Tracy\Debugger::$editor` либо отключить открытие по клику, задав `Tracy\Debugger::$editor = null`.


Windows
=======

1. Скачайте на диск подходящие файлы "из репозитория Tracy":https://github.com/nette/tracy/tree/master/tools/open-in-editor/windows.

2. Отредактируйте файл `open-editor.js` и в объекте `settings` раскомментируйте и при необходимости измените путь к вашему редактору:

```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%"',

	...
}

...
```

Будьте внимательны и сохраните в путях двойные обратные слеши.

3. Зарегистрируйте в системе обработчик протокола `editor://`.

Это делается запуском `install.cmd`. **Запускать его нужно от имени администратора.** Теперь протокол `editor://` будет обслуживать скрипт `open-editor.js`.

Чтобы открывать ссылки, порождённые на других серверах, например на боевом сервере или в Docker, добавьте в `open-editor.js` отображение удалённых путей в локальные:

```js
	mappings: {
		// удалённый путь: локальный путь
		'/var/www/nette.app': 'W:\\Nette.web\\_web',
		'/var/www/second.app': 'W:\\Second.web'
	}
```

.[caution]
В Windows `open-editor.js` выполняется под Windows Script Host, чей движок JScript понимает только ECMA-262 3rd Edition (1999). При правке скрипта держитесь старомодного JavaScript: используйте `var` вместо `let` или `const`, избегайте стрелочных функций и не ставьте запятую после последнего элемента объекта. Современный синтаксис вызывает ошибку скрипта, и протокол `editor://` молча перестаёт открывать редактор.

.[note]
Отображение удалённых путей в локальные можно задать и на стороне PHP через [Debugger::$editorMapping |configuring#Прочее]: оно работает независимо от обработчика редактора и платформы.


Linux
=====

1. Скачайте подходящие файлы "из репозитория Tracy":https://github.com/nette/tracy/tree/master/tools/open-in-editor/linux в каталог `~/bin`.

2. Отредактируйте файл `open-editor.sh`, раскомментируйте и при необходимости измените путь к вашему редактору в переменной `editor`.

```shell
#!/bin/bash

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

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

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

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

...
```

Сделайте его исполняемым:

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

.[note]
Если ваш редактор установлен не из пакета, его исполняемого файла может не быть в системном `$PATH`. Это легко исправить: создайте в каталоге `~/bin` символическую ссылку на исполняемый файл редактора.


3. Зарегистрируйте в системе обработчик протокола `editor://`.

Это делается запуском файла `install.sh`. Теперь протокол `editor://` будет обслуживать скрипт `open-editor.sh`.


macOS
=====

Такие редакторы, как PhpStorm, TextMate и другие, позволяют открывать файлы по особому URL, который достаточно задать:

```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';
```

Если вы используете самостоятельную Tracy, поместите эту строку перед `Tracy\Debugger::enable()`. Если Nette - то перед `$configurator->enableTracy()` в `Bootstrap.php`.

К сожалению, действия `create file` и `fix it` в macOS не работают.


Демонстрации
============

Исправление ошибки:

<iframe width="560" height="315" src="https://www.youtube.com/embed/3ITT4mC0Eq4?rel=0&amp;showinfo=0" frameborder="0" allow="encrypted-media" allowfullscreen></iframe>

Создание нового файла:

<iframe width="560" height="315" src="https://www.youtube.com/embed/AJ_FUivAGZQ?rel=0&amp;showinfo=0" frameborder="0" allow="encrypted-media" allowfullscreen></iframe>


Решение проблем
===============

- В Firefox, возможно, придётся [разрешить |http://kb.mozillazine.org/Register_protocol#Firefox_3.5_and_above] выполнение собственных протоколов в `about:config`, задав `network.protocol-handler.expose.editor` в `false`, а `network.protocol-handler.expose-all` в `true`. Впрочем, по умолчанию это должно быть разрешено.
- Если сразу не заработает, не паникуйте. Попробуйте несколько раз обновить страницу перед щелчком по ссылке или перезапустить браузер либо компьютер. Это должно помочь.
- Вот [ссылка|https://www.winhelponline.com/blog/error-there-is-no-script-engine-for-file-extension-when-running-js-files/] на исправление возможных ошибок вроде: `Input Error: There is no script engine for file extension ".js"` или `Maybe you associated ".js" file to another app, not JScript engine.`

Начиная с Google Chrome версии 77 вы больше не увидите флажок "Always open these types of links in the associated app" при запуске редактора по ссылке. Обходной путь для Windows: создайте файл `fix.reg`:

```
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"AutoLaunchProtocolsFromOrigins"="[{\"allowed_origins\": [\"*\"],\"protocol\": \"editor\"}]"
```
Импортируйте его двойным щелчком и перезапустите Chrome. Политика `AutoLaunchProtocolsFromOrigins` полностью подавляет подтверждающее окно браузера. Скрипт `install.cmd` задаёт её автоматически, включая закомментированную строку для Vivaldi (та же политика в `HKLM\SOFTWARE\Policies\Vivaldi`).


С дальнейшими вопросами или предложениями заходите на [форум |https://forum.nette.org].

Как открыть файл в редакторе из Tracy? (интеграция с IDE)

Когда отображается страница с ошибкой, вы можете кликать по именам файлов, и они откроются в вашем редакторе с курсором на соответствующей строке. Файлы можно также создавать (действие create file) или исправлять в них ошибки (действие fix it). Чтобы это работало, нужно настроить браузер и систему.

Tracy открывает файлы по URL вида editor://open/?file=%file&line=%line, то есть через протокол editor://. Для этого протокола нам нужно зарегистрировать собственный обработчик. Им может быть любой исполняемый файл, который обработает параметры и запустит ваш любимый редактор.

URL можно изменить в переменной Tracy\Debugger::$editor либо отключить открытие по клику, задав Tracy\Debugger::$editor = null.

Windows

  1. Скачайте на диск подходящие файлы из репозитория Tracy.
  2. Отредактируйте файл open-editor.js и в объекте settings раскомментируйте и при необходимости измените путь к вашему редактору:
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%"',

	...
}

...

Будьте внимательны и сохраните в путях двойные обратные слеши.

3. Зарегистрируйте в системе обработчик протокола editor://.

Это делается запуском install.cmd. Запускать его нужно от имени администратора. Теперь протокол editor:// будет обслуживать скрипт open-editor.js.

Чтобы открывать ссылки, порождённые на других серверах, например на боевом сервере или в Docker, добавьте в open-editor.js отображение удалённых путей в локальные:

	mappings: {
		// удалённый путь: локальный путь
		'/var/www/nette.app': 'W:\\Nette.web\\_web',
		'/var/www/second.app': 'W:\\Second.web'
	}

В Windows open-editor.js выполняется под Windows Script Host, чей движок JScript понимает только ECMA-262 3rd Edition (1999). При правке скрипта держитесь старомодного JavaScript: используйте var вместо let или const, избегайте стрелочных функций и не ставьте запятую после последнего элемента объекта. Современный синтаксис вызывает ошибку скрипта, и протокол editor:// молча перестаёт открывать редактор.

Отображение удалённых путей в локальные можно задать и на стороне PHP через Debugger::$editorMapping: оно работает независимо от обработчика редактора и платформы.

Linux

  1. Скачайте подходящие файлы из репозитория Tracy в каталог ~/bin.
  2. Отредактируйте файл open-editor.sh, раскомментируйте и при необходимости измените путь к вашему редактору в переменной editor.
#!/bin/bash

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

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

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

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

...

Сделайте его исполняемым:

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

Если ваш редактор установлен не из пакета, его исполняемого файла может не быть в системном $PATH. Это легко исправить: создайте в каталоге ~/bin символическую ссылку на исполняемый файл редактора.

3. Зарегистрируйте в системе обработчик протокола editor://.

Это делается запуском файла install.sh. Теперь протокол editor:// будет обслуживать скрипт open-editor.sh.

macOS

Такие редакторы, как PhpStorm, TextMate и другие, позволяют открывать файлы по особому URL, который достаточно задать:

// 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';

Если вы используете самостоятельную Tracy, поместите эту строку перед Tracy\Debugger::enable(). Если Nette – то перед $configurator->enableTracy() в Bootstrap.php.

К сожалению, действия create file и fix it в macOS не работают.

Демонстрации

Исправление ошибки:

Создание нового файла:

Решение проблем

  • В Firefox, возможно, придётся разрешить выполнение собственных протоколов в about:config, задав network.protocol-handler.expose.editor в false, а network.protocol-handler.expose-all в true. Впрочем, по умолчанию это должно быть разрешено.
  • Если сразу не заработает, не паникуйте. Попробуйте несколько раз обновить страницу перед щелчком по ссылке или перезапустить браузер либо компьютер. Это должно помочь.
  • Вот ссылка на исправление возможных ошибок вроде: Input Error: There is no script engine for file extension ".js" или Maybe you associated ".js" file to another app, not JScript engine.

Начиная с Google Chrome версии 77 вы больше не увидите флажок „Always open these types of links in the associated app“ при запуске редактора по ссылке. Обходной путь для Windows: создайте файл fix.reg:

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

Импортируйте его двойным щелчком и перезапустите Chrome. Политика AutoLaunchProtocolsFromOrigins полностью подавляет подтверждающее окно браузера. Скрипт install.cmd задаёт её автоматически, включая закомментированную строку для Vivaldi (та же политика в HKLM\SOFTWARE\Policies\Vivaldi).

С дальнейшими вопросами или предложениями заходите на форум.