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

View File

@ -40,9 +40,24 @@
*/ */
#define BYTE_MAX 0xffu #define BYTE_MAX 0xffu
/*
Escape special fish syntax characters liek the semicolon
*/
#define UNESCAPE_SPECIAL 1 #define UNESCAPE_SPECIAL 1
/*
Allow incomplete escape sequences
*/
#define UNESCAPE_INCOMPLETE 2 #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 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) if( (c == COMPLETE_ITEM_SEP) || (c==COMPLETE_SEP) || !c)
{ {
*end = 0; *end = 0;
wchar_t * str = escape( start, 1 ); wchar_t * str = escape( start, ESCAPE_ALL | ESCAPE_NO_QUOTED );
comp->comp_width += my_wcswidth( str ); comp->comp_width += my_wcswidth( str );
halloc_register( global_context, 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' ) if( quote == L'\0' )
{ {
replaced = escape( val, 1 ); replaced = escape( val, ESCAPE_ALL | ESCAPE_NO_QUOTED );
} }
else else
{ {
@ -1031,7 +1031,7 @@ static void completion_insert( const wchar_t *val, int flags )
if( unescapable ) if( unescapable )
{ {
free( replaced ); free( replaced );
wchar_t *tmp = escape( val, 1 ); wchar_t *tmp = escape( val, ESCAPE_ALL | ESCAPE_NO_QUOTED );
replaced = wcsdupcat( L" ", tmp ); replaced = wcsdupcat( L" ", tmp );
free( tmp); free( tmp);
replaced[0]=quote; 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 else
{ {
foo = escape( el->completion, 1 ); foo = escape( el->completion, ESCAPE_ALL | ESCAPE_NO_QUOTED );
} }
} }