43 lines
1.0 KiB
Tcl
Executable File

#!/usr/bin/tclsh
set outputFilename [expr { \
[info exists env(ERRTAGS_CACHE_FILE)] ? \
$env(ERRTAGS_CACHE_FILE) : "$env(XDG_CACHE_HOME)/errtags.tags"
}]
set ERRTAGS_SESSION [expr { \
[info exists env(ERRTAGS_SESSION)] ? $env(ERRTAGS_SESSION) : "" \
}]
if {$ERRTAGS_SESSION eq ""} {
set ERRTAGS_SESSION [expr {int(rand() * 1000) + 1}]
}
# --- Setup output
proc getMode {fileName errtagsSession} {
if {[catch {set fileId [open $fileName r]}]} { return w }
set firstLine [gets $fileId]
close $fileId
return [expr {[string match "#$errtagsSession" $firstLine] ? "a" : "w"}]
}
set mode [getMode $outputFilename $ERRTAGS_SESSION]
set output [open $outputFilename $mode]
# --- Header rewrite
if {$mode == "w"} {
puts $output "#$ERRTAGS_SESSION"
}
# --- Error translation
set errex {(.+):(\d+):(\d+): error: (.*)}
while {[gets stdin line] >= 0} {
if {[regexp $errex $line ignore sfile sline scol msg]} {
puts $output "$sfile:$sline:$scol:$msg"
}
}
close $output