From 95a01f3c8f15034433ffce368d8f2d13d925139c Mon Sep 17 00:00:00 2001 From: axel Date: Fri, 17 Feb 2006 00:21:59 +1000 Subject: [PATCH] Use plgin support in output.c to make buffered pager output - noticably faster printing in many situations darcs-hash:20060216142159-ac50b-2c31025be7d12fcc32f4ba352b59ea4cc3cc1387.gz --- fish_pager.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/fish_pager.c b/fish_pager.c index abe6c5223..c545c7c38 100644 --- a/fish_pager.c +++ b/fish_pager.c @@ -76,6 +76,7 @@ static struct termios pager_modes; static int is_ca_mode = 0; +static buffer_t *pager_buffer; /** The environment variables used to specify the color of different @@ -216,6 +217,20 @@ static wint_t readch() return input_common_readch(0); } + +static int pager_buffered_writer( char c) +{ + b_append( pager_buffer, &c, 1 ); + return 0; +} + +static void pager_flush() +{ + write( 1, pager_buffer->buff, pager_buffer->used ); + pager_buffer->used = 0; +} + + static int print_max( const wchar_t *str, int max, int has_more ) { int i; @@ -239,7 +254,7 @@ static int print_max( const wchar_t *str, int max, int has_more ) static void completion_print_item( const wchar_t *prefix, comp_t *c, int width ) { - int comp_width, desc_width; + int comp_width=0, desc_width=0; int i; int written=0; @@ -346,7 +361,7 @@ static void completion_print( int cols, el = (comp_t *)al_get( l, j*rows + i ); completion_print_item( prefix, el, width[j] - (is_last?0:2) ); - + if( !is_last) writestr( L" " ); } @@ -507,6 +522,7 @@ static int completion_try_print( int cols, } completion_print( cols, width, 0, rows, prefix, is_quoted, l); + pager_flush(); } else { @@ -539,6 +555,7 @@ static int completion_try_print( int cols, percent ); writestr(msg); set_color( FISH_COLOR_NORMAL, FISH_COLOR_NORMAL ); + pager_flush(); int c = readch(); switch( c ) @@ -860,6 +877,9 @@ static void init() halloc_util_init(); env_universal_init( 0, 0, 0, 0); input_common_init( &interrupt_handler ); + output_set_writer( &pager_buffered_writer ); + pager_buffer = halloc( global_context, sizeof( buffer_t ) ); + halloc_register_function( global_context, (void (*)(void *))&b_destroy, pager_buffer ); sigemptyset( & act.sa_mask ); act.sa_flags=0;