Make completion system not use quoted string escapes, since it generally looks a bit confusing there

darcs-hash:20071006105131-75c98-af770878124cc19946b964c0cf772818a5bf4216.gz
This commit is contained in:
liljencrantz 2007-10-06 20:51:31 +10:00
parent 3ca3b6209d
commit fcd474afe8
4 changed files with 26 additions and 8 deletions

View File

@ -719,10 +719,13 @@ static wchar_t *escape_simple( const wchar_t *in )
wchar_t *escape( const wchar_t *in_orig,
int escape_all )
int flags )
{
const wchar_t *in = in_orig;
int escape_all = flags & ESCAPE_ALL;
int no_quoted = flags & ESCAPE_NO_QUOTED;
wchar_t *out;
wchar_t *pos;
@ -735,7 +738,7 @@ wchar_t *escape( const wchar_t *in_orig,
FATAL_EXIT();
}
if( wcslen( in ) == 0 )
if( !no_quoted && (wcslen( in ) == 0) )
{
out = wcsdup(L"''");
if( !out )
@ -884,7 +887,7 @@ wchar_t *escape( const wchar_t *in_orig,
Use quoted escaping if possible, since most people find it
easier to read.
*/
if( need_escape && !need_complex_escape && escape_all )
if( !no_quoted && need_escape && !need_complex_escape && escape_all )
{
free( out );
out = escape_simple( in_orig );

View File

@ -40,9 +40,24 @@
*/
#define BYTE_MAX 0xffu
/*
Escape special fish syntax characters liek the semicolon
*/
#define UNESCAPE_SPECIAL 1
/*
Allow incomplete escape sequences
*/
#define UNESCAPE_INCOMPLETE 2
/**
Escape all characters, including magic characters like the semicolon
*/
#define ESCAPE_ALL 1
/**
Do not try to use 'simplified' quoted escapes, and do not use empty quotes as the empty string
*/
#define ESCAPE_NO_QUOTED 2
/**
Save the shell mode on startup so we can restore them on exit

View File

@ -953,7 +953,7 @@ static void mangle_completions( array_list_t *l, const wchar_t *prefix )
if( (c == COMPLETE_ITEM_SEP) || (c==COMPLETE_SEP) || !c)
{
*end = 0;
wchar_t * str = escape( start, 1 );
wchar_t * str = escape( start, ESCAPE_ALL | ESCAPE_NO_QUOTED );
comp->comp_width += my_wcswidth( str );
halloc_register( global_context, str );

View File

@ -1001,7 +1001,7 @@ static void completion_insert( const wchar_t *val, int flags )
if( quote == L'\0' )
{
replaced = escape( val, 1 );
replaced = escape( val, ESCAPE_ALL | ESCAPE_NO_QUOTED );
}
else
{
@ -1031,7 +1031,7 @@ static void completion_insert( const wchar_t *val, int flags )
if( unescapable )
{
free( replaced );
wchar_t *tmp = escape( val, 1 );
wchar_t *tmp = escape( val, ESCAPE_ALL | ESCAPE_NO_QUOTED );
replaced = wcsdupcat( L" ", tmp );
free( tmp);
replaced[0]=quote;
@ -1134,11 +1134,11 @@ static void run_pager( wchar_t *prefix, int is_quoted, array_list_t *comp )
foo = escape( el->completion + base_len, 1 );
foo = escape( el->completion + base_len, ESCAPE_ALL | ESCAPE_NO_QUOTED );
}
else
{
foo = escape( el->completion, 1 );
foo = escape( el->completion, ESCAPE_ALL | ESCAPE_NO_QUOTED );
}
}