From: <sy...@us...> - 2013-05-31 09:45:19
|
Revision: 23018 http://jedit.svn.sourceforge.net/jedit/?rev=23018&view=rev Author: synh Date: 2013-05-31 09:45:12 +0000 (Fri, 31 May 2013) Log Message: ----------- Fix #3613991: Merge Stdout + Stderr on Windows duplicates output Modified Paths: -------------- plugins/Console/trunk/console/ParsingOutputStreamTask.java plugins/Console/trunk/docs/CHANGELOG.txt Modified: plugins/Console/trunk/console/ParsingOutputStreamTask.java =================================================================== --- plugins/Console/trunk/console/ParsingOutputStreamTask.java 2013-05-29 17:46:15 UTC (rev 23017) +++ plugins/Console/trunk/console/ParsingOutputStreamTask.java 2013-05-31 09:45:12 UTC (rev 23018) @@ -254,10 +254,16 @@ */ public void push(SimpleAttributeSet currentAttrs, String str) { - if ( pop(currentAttrs != cache_lastAttrs) ) + if (currentAttrs != cache_lastAttrs) { + pop(true); + cache_lastAttrs = currentAttrs; } + else + { + pop(false); + } buffer_start = lineBuffer.append(str).length(); } // }}} @@ -271,23 +277,26 @@ */ public boolean pop(boolean forced) { - if (forced || cache_strCount >= CACHE_SIZE_LIMIT) + if (buffer_start > 0) { - output.writeAttrs(cache_lastAttrs, lineBuffer.substring(0, buffer_start)); + if (forced || cache_strCount >= CACHE_SIZE_LIMIT) + { + output.writeAttrs(cache_lastAttrs, lineBuffer.substring(0, buffer_start)); + + if ( buffer_start < lineBuffer.length() ) // data over cache + { + lineBuffer.delete(0, buffer_start); + } + else // only cache + { + lineBuffer.setLength(0); + } + + buffer_start = 0; + cache_strCount = 0; - if ( buffer_start < lineBuffer.length() ) // data over cache - { - lineBuffer.delete(0, buffer_start); + return true; } - else // only cache - { - lineBuffer.setLength(0); - } - - buffer_start = 0; - cache_strCount = 0; - - return true; } return false; @@ -432,33 +441,32 @@ protected void outputData() throws Exception { /* the idea: - * 1. save "external" buffer (lineBuffer) to "internal" (line) + * 1. save data from "external" buffer (lineBuffer) to "internal" (line) * 2. use "external" buffer as an outputting cache * 3. if we have an unbreaked input string - append it to "external" * buffer AFTER the cached data; use "buffer_start" for navigation * purposes */ - String line = lineBuffer.substring(buffer_start); + // extract noncached data + String line = trim_cache(); // convert all line breaks to internal "standard": "\n" if ( ConsolePane.eolExchangeRequired() ) { - lineBuffer.setLength(buffer_start); - line = lineBuffer.append( ConsolePane.eolExchanging(line) ).toString(); + line = ConsolePane.eolExchanging(line); } // remove all ANSI escape sequences if ( ansiParser != null && ansiParser.touch(AnsiEscapeParser.Behaviour.REMOVE_ALL, line) ) { - lineBuffer.setLength(buffer_start); - line = lineBuffer.append( ansiParser.removeAll(line) ).toString(); + line = ansiParser.removeAll(line); } - // now there is no necessity to use external buffer -> clean - lineBuffer.ensureCapacity(buffer_start + line.length()); - trim_cache(); + //****************************************** + // parse error messages and escape sequences + Matcher matcher = eolPattern.matcher(line); int bPosition = 0; Modified: plugins/Console/trunk/docs/CHANGELOG.txt =================================================================== --- plugins/Console/trunk/docs/CHANGELOG.txt 2013-05-29 17:46:15 UTC (rev 23017) +++ plugins/Console/trunk/docs/CHANGELOG.txt 2013-05-31 09:45:12 UTC (rev 23018) @@ -10,6 +10,8 @@ Instead of VFSNodeSelected messages, SshConsole always gets textArea buffer chdir messages. Re-added "change to PV selected node" action. Bugfix in "change to PV root dir" and corresponding option in ProjectCommandOptionPane + [Artem Bryantsev] + Fix #3613991: Merge Stdout + Stderr on Windows duplicates output Version 5.1.1 Requires jEdit 5.0, Java 1.6, ErrorList 2.1, and ProjectViewer 3.5 (optional). [Alan Ezust] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |