mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 05:28:49 +00:00
Migrate some more away from array_list_t
This commit is contained in:
parent
46fa2dd2f0
commit
78322a6321
5 changed files with 48 additions and 64 deletions
12
env.cpp
12
env.cpp
|
@ -1678,7 +1678,6 @@ char **env_export_arr( int recalc )
|
|||
|
||||
if( has_changed )
|
||||
{
|
||||
array_list_t uni;
|
||||
hash_table_t vals;
|
||||
int prev_was_null=1;
|
||||
int pos=0;
|
||||
|
@ -1690,16 +1689,15 @@ char **env_export_arr( int recalc )
|
|||
|
||||
get_exported( top, &vals );
|
||||
|
||||
al_init( &uni );
|
||||
env_universal_get_names( &uni, 1, 0 );
|
||||
for( i=0; i<al_get_count( &uni ); i++ )
|
||||
wcstring_list_t uni;
|
||||
env_universal_get_names2( uni, 1, 0 );
|
||||
for( i=0; i<uni.size(); i++ )
|
||||
{
|
||||
wchar_t *key = (wchar_t *)al_get( &uni, i );
|
||||
wchar_t *val = env_universal_get( key );
|
||||
const wchar_t *key = uni.at(i).c_str();
|
||||
const wchar_t *val = env_universal_get( key );
|
||||
if( wcscmp( val, ENV_NULL) && !hash_get( &vals, key ) )
|
||||
hash_put( &vals, key, val );
|
||||
}
|
||||
al_destroy( &uni );
|
||||
|
||||
export_buffer.used=0;
|
||||
|
||||
|
|
49
reader.cpp
49
reader.cpp
|
@ -236,13 +236,13 @@ class reader_data_t
|
|||
/**
|
||||
Name of the current application
|
||||
*/
|
||||
wchar_t *name;
|
||||
wcstring app_name;
|
||||
|
||||
/** The prompt command */
|
||||
wchar_t *prompt;
|
||||
wcstring prompt;
|
||||
|
||||
/** The output of the last evaluation of the prompt command */
|
||||
string_buffer_t prompt_buff;
|
||||
wcstring prompt_buff;
|
||||
|
||||
/**
|
||||
Color is the syntax highlighting for buff. The format is that
|
||||
|
@ -424,7 +424,7 @@ static void reader_repaint()
|
|||
parser_test( data->buff, data->indent, 0, 0 );
|
||||
|
||||
s_write( &data->screen,
|
||||
(wchar_t *)data->prompt_buff.buff,
|
||||
data->prompt_buff.c_str(),
|
||||
data->buff,
|
||||
data->color,
|
||||
data->indent,
|
||||
|
@ -606,7 +606,6 @@ int reader_interrupted()
|
|||
void reader_write_title()
|
||||
{
|
||||
const wchar_t *title;
|
||||
array_list_t l;
|
||||
wchar_t *term = env_get( L"TERM" );
|
||||
|
||||
/*
|
||||
|
@ -649,26 +648,23 @@ void reader_write_title()
|
|||
if( wcslen( title ) ==0 )
|
||||
return;
|
||||
|
||||
al_init( &l );
|
||||
wcstring_list_t lst;
|
||||
|
||||
proc_push_interactive(0);
|
||||
if( exec_subshell( title, &l ) != -1 )
|
||||
if( exec_subshell2( title, lst ) != -1 )
|
||||
{
|
||||
int i;
|
||||
if( al_get_count( &l ) > 0 )
|
||||
if( lst.size() > 0 )
|
||||
{
|
||||
writestr( L"\x1b]2;" );
|
||||
for( i=0; i<al_get_count( &l ); i++ )
|
||||
for( i=0; i<lst.size(); i++ )
|
||||
{
|
||||
writestr( (wchar_t *)al_get( &l, i ) );
|
||||
writestr( lst.at(i).c_str() );
|
||||
}
|
||||
writestr( L"\7" );
|
||||
}
|
||||
}
|
||||
proc_pop_interactive();
|
||||
|
||||
al_foreach( &l, &free );
|
||||
al_destroy( &l );
|
||||
proc_pop_interactive();
|
||||
set_color( FISH_COLOR_RESET, FISH_COLOR_RESET );
|
||||
}
|
||||
|
||||
|
@ -682,11 +678,11 @@ static void exec_prompt()
|
|||
array_list_t prompt_list;
|
||||
al_init( &prompt_list );
|
||||
|
||||
if( data->prompt )
|
||||
if( data->prompt.size() )
|
||||
{
|
||||
proc_push_interactive( 0 );
|
||||
|
||||
if( exec_subshell( data->prompt, &prompt_list ) == -1 )
|
||||
if( exec_subshell( data->prompt.c_str(), &prompt_list ) == -1 )
|
||||
{
|
||||
/* If executing the prompt fails, make sure we at least don't print any junk */
|
||||
al_foreach( &prompt_list, &free );
|
||||
|
@ -698,13 +694,13 @@ static void exec_prompt()
|
|||
|
||||
reader_write_title();
|
||||
|
||||
sb_clear( &data->prompt_buff );
|
||||
data->prompt_buff.resize(0);
|
||||
|
||||
for( i = 0; i < al_get_count( &prompt_list )-1; i++ )
|
||||
for( i = 0; i < al_get_count( &prompt_list ); i++ )
|
||||
{
|
||||
sb_append( &data->prompt_buff, (wchar_t *)al_get( &prompt_list, i ), L"\n" );
|
||||
if (i > 0) data->prompt_buff += L"\n";
|
||||
data->prompt_buff += (wchar_t *)al_get( &prompt_list, i );
|
||||
}
|
||||
sb_append( &data->prompt_buff, (wchar_t *)al_get( &prompt_list, i ));
|
||||
|
||||
al_foreach( &prompt_list, &free );
|
||||
al_destroy( &prompt_list );
|
||||
|
@ -2276,14 +2272,12 @@ void reader_push( const wchar_t *name )
|
|||
}
|
||||
reader_data_t *n = new(buff) reader_data_t;
|
||||
|
||||
n->name = wcsdup( name );
|
||||
n->app_name = name;
|
||||
n->next = data;
|
||||
sb_init( &n->kill_item );
|
||||
|
||||
data=n;
|
||||
|
||||
sb_init( &data->prompt_buff );
|
||||
|
||||
check_size();
|
||||
data->buff[0]=0;
|
||||
sb_init( &data->search_buff );
|
||||
|
@ -2317,16 +2311,12 @@ void reader_pop()
|
|||
|
||||
data=data->next;
|
||||
|
||||
free(n->name );
|
||||
free( n->prompt );
|
||||
free( n->buff );
|
||||
free( n->color );
|
||||
free( n->indent );
|
||||
sb_destroy( &n->search_buff );
|
||||
sb_destroy( &n->kill_item );
|
||||
|
||||
sb_destroy( &n->prompt_buff );
|
||||
|
||||
/*
|
||||
Clean up after history search
|
||||
*/
|
||||
|
@ -2345,15 +2335,14 @@ void reader_pop()
|
|||
else
|
||||
{
|
||||
end_loop = 0;
|
||||
history_set_mode( data->name );
|
||||
history_set_mode( data->app_name.c_str() );
|
||||
s_reset( &data->screen, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
void reader_set_prompt( const wchar_t *new_prompt )
|
||||
{
|
||||
free( data->prompt );
|
||||
data->prompt=wcsdup(new_prompt);
|
||||
data->prompt = new_prompt;
|
||||
}
|
||||
|
||||
void reader_set_complete_function( void (*f)( const wchar_t *,
|
||||
|
|
16
screen.cpp
16
screen.cpp
|
@ -70,7 +70,7 @@ static buffer_t *s_writeb_buffer=0;
|
|||
specified position of the specified wide character string. All of
|
||||
\c seq must match, but str may be longer than seq.
|
||||
*/
|
||||
static int try_sequence( char *seq, wchar_t *str )
|
||||
static int try_sequence( const char *seq, const wchar_t *str )
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -106,7 +106,7 @@ static int next_tab_stop( int in )
|
|||
to detect common escape sequences that may be embeded in a prompt,
|
||||
such as color codes.
|
||||
*/
|
||||
static int calc_prompt_width( wchar_t *prompt )
|
||||
static int calc_prompt_width( const wchar_t *prompt )
|
||||
{
|
||||
int res = 0;
|
||||
int j, k;
|
||||
|
@ -573,7 +573,7 @@ static void s_write_mbs( buffer_t *b, char *s )
|
|||
Convert a wide string to a multibyte string and append it to the
|
||||
buffer.
|
||||
*/
|
||||
static void s_write_str( buffer_t *b, wchar_t *s )
|
||||
static void s_write_str( buffer_t *b, const wchar_t *s )
|
||||
{
|
||||
int (*writer_old)(char) = output_get_writer();
|
||||
|
||||
|
@ -588,7 +588,7 @@ static void s_write_str( buffer_t *b, wchar_t *s )
|
|||
/**
|
||||
Update the screen to match the desired output.
|
||||
*/
|
||||
static void s_update( screen_t *scr, wchar_t *prompt )
|
||||
static void s_update( screen_t *scr, const wchar_t *prompt )
|
||||
{
|
||||
int i, j, k;
|
||||
int prompt_width = calc_prompt_width( prompt );
|
||||
|
@ -710,10 +710,10 @@ static int is_dumb()
|
|||
|
||||
|
||||
void s_write( screen_t *s,
|
||||
wchar_t *prompt,
|
||||
wchar_t *b,
|
||||
int *c,
|
||||
int *indent,
|
||||
const wchar_t *prompt,
|
||||
const wchar_t *b,
|
||||
const int *c,
|
||||
const int *indent,
|
||||
int cursor )
|
||||
{
|
||||
int i;
|
||||
|
|
8
screen.h
8
screen.h
|
@ -135,10 +135,10 @@ typedef struct
|
|||
as possible.
|
||||
*/
|
||||
void s_write( screen_t *s,
|
||||
wchar_t *prompt,
|
||||
wchar_t *commandline,
|
||||
int *colors,
|
||||
int *indent,
|
||||
const wchar_t *prompt,
|
||||
const wchar_t *commandline,
|
||||
const int *colors,
|
||||
const int *indent,
|
||||
int cursor_pos );
|
||||
|
||||
/**
|
||||
|
|
27
wildcard.cpp
27
wildcard.cpp
|
@ -388,23 +388,21 @@ static wchar_t *complete_get_desc_suffix_internal( const wchar_t *suff_orig )
|
|||
|
||||
wchar_t *suff = wcsdup( suff_orig );
|
||||
wchar_t *cmd = wcsdupcat( SUFFIX_CMD_STR, suff );
|
||||
wchar_t *desc = 0;
|
||||
array_list_t l;
|
||||
|
||||
if( !suff || !cmd )
|
||||
DIE_MEM();
|
||||
|
||||
al_init( &l );
|
||||
wcstring_list_t lst;
|
||||
wcstring desc;
|
||||
|
||||
if( exec_subshell( cmd, &l ) != -1 )
|
||||
if( exec_subshell2( cmd, lst ) != -1 )
|
||||
{
|
||||
|
||||
if( al_get_count( &l )>0 )
|
||||
if( lst.size()>0 )
|
||||
{
|
||||
wchar_t *ln = (wchar_t *)al_get(&l, 0 );
|
||||
if( wcscmp( ln, L"unknown" ) != 0 )
|
||||
const wcstring & ln = lst.at(0);
|
||||
if( ln.size() > 0 && ln != L"unknown" )
|
||||
{
|
||||
desc = wcsdup( ln);
|
||||
desc = ln;
|
||||
/*
|
||||
I have decided I prefer to have the description
|
||||
begin in uppercase and the whole universe will just
|
||||
|
@ -416,17 +414,16 @@ static wchar_t *complete_get_desc_suffix_internal( const wchar_t *suff_orig )
|
|||
}
|
||||
|
||||
free(cmd);
|
||||
al_foreach( &l, &free );
|
||||
al_destroy( &l );
|
||||
|
||||
if( !desc )
|
||||
if( ! desc.size() )
|
||||
{
|
||||
desc = wcsdup(COMPLETE_FILE_DESC);
|
||||
desc = COMPLETE_FILE_DESC;
|
||||
}
|
||||
|
||||
hash_put( suffix_hash, suff, desc );
|
||||
wchar_t *tmp = wcsdup(desc.c_str());
|
||||
hash_put( suffix_hash, suff, tmp );
|
||||
|
||||
return desc;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue