#!/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