43 lines
1.0 KiB
Tcl
Executable File
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
|