Minor tweaks to previous fish_pager patch to fix two bugs

darcs-hash:20060822135815-ac50b-35d9f643385ec29f9d8f93ca83d01e060de93cc7.gz
This commit is contained in:
axel 2006-08-22 23:58:15 +10:00
parent dfe3dc1429
commit 480a29594e
4 changed files with 19 additions and 27 deletions

View file

@ -53,17 +53,6 @@
*/ */
#define COMPLETE_SEP_STR L"\004" #define COMPLETE_SEP_STR L"\004"
/**
Sent to the fish_pager to signify the end of input
*/
#define PAGER_EOT '\003'
/**
Sent to the fish_pager to signify the end of input
*/
#define PAGER_EOT_STR L"\003"
/** /**
Separator between completion items in fish_pager. This is used for Separator between completion items in fish_pager. This is used for
completion grouping, e.g. when putting completions with the same completion grouping, e.g. when putting completions with the same

2
exec.c
View file

@ -1055,8 +1055,6 @@ void exec( job_t *j )
case INTERNAL_BUFFER: case INTERNAL_BUFFER:
{ {
debug( 0, L"fork internal buffer" );
pid = fork(); pid = fork();
if( pid == 0 ) if( pid == 0 )

View file

@ -990,9 +990,9 @@ void destroy()
void read_array( FILE* file, array_list_t *comp ) void read_array( FILE* file, array_list_t *comp )
{ {
char buffer[BUFSIZE]; char buffer[BUFSIZE];
char c; int c;
int i; int i;
wchar_t *wcs; wchar_t *wcs, *unescaped;
while( !feof( file ) ) while( !feof( file ) )
{ {
@ -1000,23 +1000,27 @@ void read_array( FILE* file, array_list_t *comp )
while( i < BUFSIZE-1 ) while( i < BUFSIZE-1 )
{ {
c = getc( file ); c = getc( file );
if( c == '\n' || c == PAGER_EOT ) if( c == EOF )
{
return;
}
if( c == '\n' )
{ {
break; break;
} }
buffer[ i++ ] = c; buffer[ i++ ] = c;
} }
buffer[ i ] = '\0'; buffer[ i ] = '\0';
wcs = str2wcs( buffer ); wcs = str2wcs( buffer );
if( wcs ) if( wcs )
{ {
al_push( comp, wcs ); unescaped = unescape( wcs, 0 );
} al_push( comp, unescaped );
if( c == PAGER_EOT ) free( wcs );
{
break;
} }
} }
} }

View file

@ -1485,10 +1485,11 @@ static void run_pager( wchar_t *prefix, int is_quoted, array_list_t *comp )
for( i=0; i<al_get_count( comp); i++ ) for( i=0; i<al_get_count( comp); i++ )
{ {
wchar_t *el = (wchar_t*)al_get( comp, i ); wchar_t *el = escape((wchar_t*)al_get( comp, i ), 0);
sb_printf( &msg, L"%ls\n", el ); sb_printf( &msg, L"%ls\n", el );
free( el );
} }
sb_printf( &msg, PAGER_EOT_STR );
foo = wcs2str( (wchar_t *)msg.buff ); foo = wcs2str( (wchar_t *)msg.buff );
b_append( in->param2.out_buffer, foo, strlen(foo) ); b_append( in->param2.out_buffer, foo, strlen(foo) );