aboutsummaryrefslogtreecommitdiffhomepage
path: root/builtin_commandline.c
diff options
context:
space:
mode:
authorGravatar axel <axel@liljencrantz.se>2007-01-19 02:27:00 +1000
committerGravatar axel <axel@liljencrantz.se>2007-01-19 02:27:00 +1000
commit421aff7d67a82aa217550fd428fcf215f55ef4dc (patch)
tree796c177aab2f05033d64e69e2e47620e469fd4c8 /builtin_commandline.c
parent9e7094adfcbb2cfb63f1ea6ac587354dd3463e48 (diff)
Make command specific completions handle quoted and otherwise escaped tokens better by making sure that the output from the commandline builtin is properly unescaped
darcs-hash:20070118162700-ac50b-cd93d9a6aff5bb7629a790d60b241000eb1d0ac0.gz
Diffstat (limited to 'builtin_commandline.c')
-rw-r--r--builtin_commandline.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/builtin_commandline.c b/builtin_commandline.c
index 4aaadb05..7d29efc5 100644
--- a/builtin_commandline.c
+++ b/builtin_commandline.c
@@ -146,7 +146,6 @@ static void write_part( const wchar_t *begin,
if( tokenize )
{
-
buff = wcsndup( begin, end-begin );
// fwprintf( stderr, L"Subshell: %ls, end char %lc\n", buff, *end );
sb_init( &out );
@@ -159,20 +158,21 @@ static void write_part( const wchar_t *begin,
(tok_get_pos( &tok)+wcslen(tok_last( &tok)) >= pos) )
break;
-// fwprintf( stderr, L"Next token %ls\n", tok_last( &tok ) );
-
switch( tok_last_type( &tok ) )
{
case TOK_STRING:
- sb_append2( &out, tok_last( &tok), L"\n", (void *)0 );
+ {
+ wchar_t *tmp = unescape( tok_last( &tok ), UNESCAPE_INCOMPLETE );
+ sb_append2( &out, tmp, L"\n", (void *)0 );
+ free( tmp );
break;
-
+ }
+
}
}
-
- if( out.buff )
- sb_append( sb_out,
- (wchar_t *)out.buff );
+
+ sb_append( sb_out,
+ (wchar_t *)out.buff );
free( buff );
tok_destroy( &tok );
@@ -180,12 +180,24 @@ static void write_part( const wchar_t *begin,
}
else
{
+ wchar_t *buff, *esc;
+
if( cut_at_cursor )
{
end = begin+pos;
}
- sb_append_substring( sb_out, begin, end-begin );
- sb_append( sb_out, L"\n" );
+
+ buff = wcsndup( begin, end-begin );
+ esc = unescape( buff, UNESCAPE_INCOMPLETE );
+
+// debug( 0, L"woot2 %ls -> %ls", buff, esc );
+
+ sb_append( sb_out, esc );
+ sb_append( sb_out, L"\n" );
+
+ free( esc );
+ free( buff );
+
}
}