|  |  | @@ -242,15 +242,26 @@ Loggable::undo ( void ) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int ui = _undo_index; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | block_start(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if ( strcmp( b, "{" ) ) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | /* It's a single undo, get rid of trailing messages in this block */ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | n = 1; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | s = b + 2; | 
		
	
		
			
			|  |  |  | s += strlen( s ) - 1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | while ( n-- ) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | while ( s >= b && *(--s) ); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | s++; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if ( ( ! strcmp( s, "{" ) ) | 
		
	
		
			
			|  |  |  | || ( ! strcmp( s, "}" ) ) ) | 
		
	
		
			
			|  |  |  | continue; | 
		
	
		
			
			|  |  |  | if ( ! strcmp( s, "{" ) ) | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if ( *s == '\t' ) | 
		
	
		
			
			|  |  |  | s++; | 
		
	
	
		
			
				|  |  | @@ -313,6 +324,8 @@ Loggable::undo ( void ) | 
		
	
		
			
			|  |  |  | s -= 2; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | block_end(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // FIXME: bogus... needs to account for multiple events. | 
		
	
		
			
			|  |  |  | _undo_index = ui + 1; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | 
 |