Как открыть файл в редакторе из 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).

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