Jak otevřít soubor v editoru z Debuggeru?
Při zobrazení chybové stránky lze kliknout na jména souborů a ty se otevřou ve vašem editoru s kurzorem na příslušné řádce. Aby se tak stalo, je potřeba prohlížeč a systém nakonfigurovat.
Pokud proměnnou Nette\Diagnostics\Debugger::$editor
nenastavíte, bude Laděnka standardně
otevírat soubory přes URL
editor://open/?file=%file&line=%line, tj. s protokolem
„editor://“.
Pro ten si zaregistrujeme vlastní obsluhu. Tou může být libovolný spustitelný soubor, který „přežvýká“ parametry a spustí náš oblíbený editor.
Tento návod platí pro aktuální verzi Nette Framework 2.0
Windows
1. Vytvořte handler protokolu „editor://“ ve formě dávkového
souboru run-editor.js
// NetBeans
var editor = '"C:\\Program Files\\NetBeans 7.0\\bin\\netbeans.exe" "%file%:%line%" --console suppress --nosplash';
// PhpStorm
//~ var editor = '"C:\\Program Files\\PhpStorm\\PhpStorm.exe" --line "%line%" "%file%"';
// jEdit
//~ var editor = '"C:\\Program Files (x86)\\jEdit\\jedit.exe" "%file%" +line:%line% -reuseview';
// PHPEd
//~ var editor = '"C:\\Program Files\\NuSphere\\PhpED\\phped.exe" "%file%" --line=%line%';
// SciTE
//~ var editor = '"C:\\Program Files\\SciTE\\scite.exe" "-open:%file%" -goto:%line%';
// EmEditor
//~ var editor = '"C:\\Program Files\\EmEditor\\EmEditor.exe" "%file%" /l %line%';
// PSPad Editor
//~ var editor = '"C:\\Program Files\\PSPad editor\\PSPad.exe" -%line% "%file%"';
// gVim
//~ var editor = '"C:\\Program Files\\Vim\\vim73\\gvim.exe" "%file%" +%line%';
// Sublime Text 2
//~ var editor = 'C:\\Progra~1\\Sublim~1\\sublime_text.exe "%file%":%line%';
var url = WScript.Arguments(0);
var match = /^editor:\/\/open\/\?file=(.+)&line=(\d+)$/.exec(url);
if (match) {
var file = decodeURIComponent(match[1]).replace(/\+/g, ' ');
var command = editor.replace(/%line%/g, match[2]).replace(/%file%/g, file);
var shell = new ActiveXObject("WScript.Shell");
shell.Exec(command.replace(/\\/g, '\\\\'));
}
2. Zaregistrujte handler protokolu „editor://“ v systému
Vytvořte si a spusťte soubor editor.reg:
Pozor na dvojitá lomítka a úplnou cestu k souboru
run-editor.js
REGEDIT4 [HKEY_CLASSES_ROOT\editor] @="URL:editor Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\editor\shell\open\command] @="wscript \"C:\\path\\to\\run-editor.js\" \"%1\""
Linux
1. Vytvořte handler protokolu „editor://“ ve formě BASH skriptu
run-editor.sh.
V adresáři ~/bin si vytvořte soubor
~/bin/run-editor.sh,
touch ~/bin/run-editor.sh
učiňte jej spustitelným,
chmod +x ~/bin/run-editor.sh
a vložte do něj:
#!/bin/bash
url="$1"
url=${url#*file=}
line=${url##*line=}
file=${url%%&line*}
file=${file//\%2F/\/}
# Netbeans
netbeans "$file:$line"
# Kate
#kate --line $line "$file"
# Vim
#vim "$file" +$line
# Gedit
#gedit +$line "$file"
# Komodo
#komodo "$file#$line"
# PhpStorm
#/usr/local/bin/pstorm --line "$line" "$file"
# Sublime Text 2
#subl "$file:$line"
Pokud používáte Netbeans (nebo jiné IDE) a nemáte jej
nainstalované z balíku, pravděpodobně nebude Netbeans binárka v $PATH. To
lze jednoduše napravit. V adresáři ~/bin si vytvořte
symlink na binárku Netbeans.
2. Zaregistrujte handler protokolu „editor://“ v systému
KDE 4
V KDE 4 tak učiňte editací konfiguračního souboru.
Do souboru
/usr/share/kde4/services/editor.protocol vložte
[Protocol] exec=/home/<username>/bin/run-editor.sh "%u" protocol=editor input=none output=none helper=true listing= reading=false writing=false makedir=false deleting=false
Gnome
V Gnome zaregistrujeme handler protokolu „editor://“ pomocí volání konfigurační utility
gconftool-2 -s /desktop/gnome/url-handlers/editor/command --type String '/home/<username>/bin/run-editor.sh %s' gconftool-2 -s /desktop/gnome/url-handlers/editor/enabled --type Boolean true
pro Vim či jiný konzolový editor přidejte:
gconftool-2 -s /desktop/gnome/url-handlers/editor/needs_terminal --type Boolean true
Pozor na kompletní cestu. Zkratka pomocí ~/ nefunguje protože se jedná o globální konfigurák.
Xfce
V Xfce lze pro registraci protokolu využít balíček xdg-utils.
Vytvořte nový soubor
/usr/share/applications/editor-uri.desktop a do něj vložte
následující kód:
[Desktop Entry] Encoding=UTF-8 Name=Editor Url Type=Application Exec=/home/<username>/bin/run-editor.sh %u Terminal=false Categories=Application; MimeType=x-scheme-handler/editor NoDisplay=true
Následně editujte soubor /usr/share/applications/defaults.list
a přidejte do něj následující řádek:
x-scheme-handler/editor=editor-uri.desktop
Mac OS X
Pokud používáte editor TextMate nebo jiný, který umožňuje otevírat soubory přes speciální URL, bude vám stačit toto URL nastavit. Jako proměnné se tu používá %file a %line:
// TextMate
Debug::$editor = 'txmt://open/?url=file://%file&line=%line';
// MacVim
Debug::$editor = 'mvim://open/?url=file://%file&line=%line';
Troubleshooting:
- ve Firefoxu může být potřeba protokol povolit pomocí network.protocol-handler.expose.editor nebo network.protocol-handler.expose-all v about:config. Ve výchozím nastavení je to ovšem povoleno :)
- Pokud vám to hned nepůjde nepanikařte. A zkuste párkrát refreshnout stránku před klikem na onen odkaz. Rozjede se to!
S případnými dotazy nebo připomínkami se prosím obraťte na fórum.
Comments 
Vitek Jezek | 15. 1. 2011, 20:38 | comment
na Macu jde pouzit app RCDefaultApp pro zjisteni url schematu. Popr. jeho pridavani bylo zodpovezeno na stackoverflow
pekelnik | 11. 3. 2011, 12:25 | comment
Nevím proč – nezkoumal jsem to, ale nejnovější verze BASH skriptu mi nefunguje pro Netbeans na Ubuntu. Musel jsem použít starší (původní) verzi skriptu:
echo "$1" | eval `sed "s#%2F#/#g" | sed -n "s#^.*open/?file=\(.*\)\&line=\(.*\)#netbeans \1:\2#p"`
Tohle funguje bez problémů.
haldyr | 21. 2. 2012, 12:37 | comment
Jen upozorním, že pro Netbeans pod linuxem je potřeba změnit řádek v run-editor.sh na:
netbeans "$file":$line
MaJJ | 12. 3. 2012, 0:10 | comment
Nette\Debug už ne, Nette\Diagnostics\Debugger…
A ten MacVim handler je takhle:
mvim://open?url=file:///%file&line=%line
petr.pavel | 1. 5. 2012, 11:14 | comment
Komu to pod Windows nefunguje a chce si do run-editor.js přidat ladění:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.CreateTextFile("C:\\Temp\\log.txt", 2, true);
fh.WriteLine("Byl jsem tady, Fantomas.");
fh.Close();
A taky se přidávám k žádosti, aby tento dokument byl součástí oficiální dokumentace.
petr.pavel | 1. 5. 2012, 11:59 | comment
Ještě poznámka pro uživatele Eclipse – v současnosti není možné skočit na konkrétní řádku: https://bugs.eclipse.org/…show_bug.cgi?…
Eda | 5. 5. 2012, 15:54 | comment
V posledním Firefoxu je opravdu potřeba vložit do about:config nastavení: network.protocol-handler.expose.editor = false. Až potom mi to začlo fungovat. Tak třeba to někomu pomůže.
vrana | 11. 10. 2010, 10:44 | comment
Pokud by se někdo chtěl zbavit toho příšerného baťáku a spolu s tím také okna příkazového řádku, které problikne před spuštěním editoru, může použít tento skript:
Po uložení jako
run-editor.jsstačí spouštět pomocíwscript run-editor.js.Přimlouval bych se za oficializaci tohoto návodu.