{"thread":{"id":"25749","subject":"[PATCH] git-gui: fix ANSI-color parsing","startedAt":"2010-11-15T10:00:33Z","lastAt":"2010-11-19T09:34:00Z","messageCount":2,"participants":["Bert Wesarg","Pat Thoyts"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"155908","messageId":"1289815233-11391-1-git-send-email-bert.wesarg@googlemail.com","threadId":"25749","inReplyTo":null,"subject":"[PATCH] git-gui: fix ANSI-color parsing","fromName":"Bert Wesarg","fromEmail":"bert.wesarg@googlemail.com","sentAt":"2010-11-15T10:00:33Z","receivedAt":"2010-11-15T10:00:33Z","isPatch":true,"sender":{"key":"bert.wesarg@googlemail.com","avatar":"https://avatars.githubusercontent.com/u/111934?v=4"},"body":"git diff always outputs color reset commands, even when the color for the\ncurrent part is disabled (ie. normal). But the current ANSI-color parsing code\nassumes that color start and reset commands appear in matching pairs.\n\nRelax this assumption.\n\nSigned-off-by: Bert Wesarg <bert.wesarg@googlemail.com>\n\n---\n git-gui/lib/diff.tcl |   12 ++++++++++--\n 1 files changed, 10 insertions(+), 2 deletions(-)\n\ndiff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl\nindex dcf0711..0579fa6 100644\n--- a/git-gui/lib/diff.tcl\n+++ b/git-gui/lib/diff.tcl\n@@ -337,12 +337,20 @@ proc parse_color_line {line} {\n \tset result \"\"\n \tset markup [list]\n \tset regexp {\\033\\[((?:\\d+;)*\\d+)?m}\n+\tset need_reset 0\n \twhile {[regexp -indices -start $start $regexp $line match code]} {\n \t\tforeach {begin end} $match break\n \t\tappend result [string range $line $start [expr {$begin - 1}]]\n-\t\tlappend markup [string length $result] \\\n-\t\t\t[eval [linsert $code 0 string range $line]]\n+\t\tset pos [string length $result]\n+\t\tset col [eval [linsert $code 0 string range $line]]\n \t\tset start [incr end]\n+\t\tif {$col eq \"0\" || $col eq \"\"} {\n+\t\t\tif {!$need_reset} continue\n+\t\t\tset need_reset 0\n+\t\t} else {\n+\t\t\tset need_reset 1\n+\t\t}\n+\t\tlappend markup $pos $col\n \t}\n \tappend result [string range $line $start end]\n \tif {[llength $markup] < 4} {set markup {}}\n-- \ntg: (6f10c41..) bw/git-gui/fix-ansi-color-parsing (depends on: master)\n"},{"id":"156156","messageId":"87sjyxhd2v.fsf@fox.patthoyts.tk","threadId":"25749","inReplyTo":"1289815233-11391-1-git-send-email-bert.wesarg@googlemail.com","subject":"Re: [PATCH] git-gui: fix ANSI-color parsing","fromName":"Pat Thoyts","fromEmail":"patthoyts@users.sourceforge.net","sentAt":"2010-11-19T09:34:00Z","receivedAt":"2010-11-19T09:34:00Z","isPatch":true,"sender":{"key":"patthoyts@users.sourceforge.net","avatar":"https://avatars.githubusercontent.com/u/30739?v=4"},"body":"Bert Wesarg <bert.wesarg@googlemail.com> writes:\n\n>git diff always outputs color reset commands, even when the color for the\n>current part is disabled (ie. normal). But the current ANSI-color parsing code\n>assumes that color start and reset commands appear in matching pairs.\n>\n>Relax this assumption.\n>\n>Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>\n\nThanks for this. Applied to git-gui repository.\n-- \nPat Thoyts                            http://www.patthoyts.tk/\nPGP fingerprint 2C 6E 98 07 2C 59 C8 97  10 CE 11 E6 04 E0 B9 DD\n"}]}