- Offizieller Beitrag
Der SciTE Lexer bietet für die Konsole 4 Styles, die über das erste Zeichen in einer Zeile aktiviert werden. Standardmäßig sind das die Farben blau (>), rot (!), grün (+), orange (-).
2 Styles gibt es extra mit der Möglichkeit durch Doppelklick auf die Ausgabe, die enthaltene Zeilennummer im Editor anzuspringen.
Ich habe hier die Möglichkeit geschaffen, eigene Debugzeilen mit verschiedenen Farben zu erstellen. Auch die Möglichkeit der unterschiedlichen Färbung in Abhängigkeit von einer Bedingung besteht.
EDIT: Zeile UND Spalte können angegeben werden
Es kann also jeder eigene Debugzeilen zum Anspringen erstellen. Das Muster dafür:
erstes Zeichen: ! oder + oder - oder >
gefolgt von: @@
folgend beliebige Zeichen ausser: (
gefolgt von Sprunganweisung: (Zeilennummer) oder (Zeilennummer,Spaltennummer) - Zahlen 1-basiert.
danach kann weiterer beliebiger Text folgen.
Es wird außerdem am Editorrand ein temporärer Marker für die entsprechende Zeile gesetzt. (verschwindet wieder bei nächstem Syntaxcheck oder Skriptaufruf)
Der AutoIt-Teil
#cs Example:
Local $a =4, $b = 5, $column = 14
_ConsoleDebugCondition('Bedingung-False', $a=$b, @ScriptLineNumber, $column)
_ConsoleDebugCondition('Bedingung-True', $a<>$b, @ScriptLineNumber)
_ConsoleDebugColor('Text grün', @ScriptLineNumber, $column, 11)
_ConsoleDebugColor('Text orange', @ScriptLineNumber, $column, 12)
_ConsoleDebugColor('Text rot o. Spalte', @ScriptLineNumber, 0, 10)
; Output:
!@@ Debug(753,14) : Bedingung-False
>@@ Debug(755) : Bedingung-True
+@@ Debug(757,14) : Text grün
-@@ Debug(759,14) : Text orange
!@@ Debug(761) : Text rot o. Spalte
#ce
#cs
$iStyleErr Standard
4 (>) blau
10 (!) rot
11 (+) grün
12 (- <) orange
#ce
Func _ConsoleDebugColor($sText, $iLine, $iCol=0, $iStyleErr=10)
Local $sStyle
Switch $iStyleErr
Case 4
$sStyle = '>'
Case 10
$sStyle = '!'
Case 11
$sStyle = '+'
Case 12
$sStyle = '-'
EndSwitch
ConsoleWrite(StringFormat('%s@@ Debug(%d%s) : %s', $sStyle, $iLine, ($iCol > 0 ? ',' & $iCol : ''), $sText) & @CRLF)
EndFunc
Func _ConsoleDebugCondition($sText, $bCondition, $iLine, $iCol=0, $iStyleTrue=4, $iStyleFalse=10)
_ConsoleDebugColor($sText, $iLine, $iCol, ($bCondition ? $iStyleTrue : $iStyleFalse))
EndFunc
Alles anzeigen
Damit die Sprungmarke erkannt wird, muss das Lua-Skript installiert werden
-- coding:utf-8
OutputSciTE = EventClass:new(Common)
MARKER_JUMP = 0
editor:MarkerDefine(MARKER_JUMP, SC_MARK_SHORTARROW)
OutputSciTE.OnDoubleClick = function(self)
if editor.Focus then return end -- Fokus muss auf output sein
local pos = output.CurrentPos
local line = output:LineFromPosition(pos)
local text = output:GetLine(line) -- Text der angeklickten Zeile
-- Parsen nach Sprungmarke
local jumpmark = '@@'
local pattLC = '^[%+%-<>!]'..jumpmark..'[^(]+%((%d+),(%d+)%)'
local pattL = '^[%+%-<>!]'..jumpmark..'[^(]+%((%d+)%)'
local l, c = text:match(pattLC)
if not l then l = text:match(pattL) end
if l ~= nil then self:JumpLineCol(l, c) end
end
OutputSciTE.JumpLineCol = function(self, line, col)
local home = editor:PositionFromLine(line-1)
local pos = home
if col ~= nil then pos = home + col -1 end
editor:GotoPos(pos)
editor:GrabFocus()
editor:MarkerAdd(line-1, MARKER_JUMP)
end
Alles anzeigen
Dazu muss das Skript in der SciTEStartup.lua geladen werden.
Wie das geht, könnt ihr in dieser Anleitung nachlesen.