mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 12:53:13 +00:00
Make tab completion of process expansion consider other processes than those owned by the shell. Also makes tab completion of process expansion properly handle paths in command names
darcs-hash:20061214115811-ac50b-8569bcd30f97fe505dc1e7f2596d2fbd23f31525.gz
This commit is contained in:
parent
52b74f9f34
commit
a971d91a70
1 changed files with 26 additions and 14 deletions
40
expand.c
40
expand.c
|
@ -272,16 +272,18 @@ static int iswnumeric( const wchar_t *n )
|
||||||
*/
|
*/
|
||||||
static int match_pid( const wchar_t *cmd,
|
static int match_pid( const wchar_t *cmd,
|
||||||
const wchar_t *proc,
|
const wchar_t *proc,
|
||||||
int flags )
|
int flags,
|
||||||
|
int *offset)
|
||||||
{
|
{
|
||||||
/* Test for direct match */
|
/* Test for direct match */
|
||||||
|
|
||||||
if( wcsncmp( cmd, proc, wcslen( proc ) ) == 0 )
|
if( wcsncmp( cmd, proc, wcslen( proc ) ) == 0 )
|
||||||
|
{
|
||||||
|
if( offset )
|
||||||
|
*offset = 0;
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
if( flags & ACCEPT_INCOMPLETE )
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Test if the commandline is a path to the command, if so we try
|
Test if the commandline is a path to the command, if so we try
|
||||||
to match against only the command part
|
to match against only the command part
|
||||||
|
@ -309,7 +311,11 @@ static int match_pid( const wchar_t *cmd,
|
||||||
|
|
||||||
if( wcsncmp( start+1, proc, wcslen( proc ) ) == 0 )
|
if( wcsncmp( start+1, proc, wcslen( proc ) ) == 0 )
|
||||||
{
|
{
|
||||||
|
if( offset )
|
||||||
|
*offset = start+1-first_token;
|
||||||
|
|
||||||
free( first_token );
|
free( first_token );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -403,14 +409,16 @@ static int find_process( const wchar_t *proc,
|
||||||
|
|
||||||
for( j=first_job; j != 0; j=j->next )
|
for( j=first_job; j != 0; j=j->next )
|
||||||
{
|
{
|
||||||
|
int offset;
|
||||||
|
|
||||||
if( j->command == 0 )
|
if( j->command == 0 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( match_pid( j->command, proc, flags ) )
|
if( match_pid( j->command, proc, flags, &offset ) )
|
||||||
{
|
{
|
||||||
if( flags & ACCEPT_INCOMPLETE )
|
if( flags & ACCEPT_INCOMPLETE )
|
||||||
{
|
{
|
||||||
wchar_t *res = wcsdupcat2( j->command + wcslen(proc),
|
wchar_t *res = wcsdupcat2( j->command + offset + wcslen(proc),
|
||||||
COMPLETE_SEP_STR,
|
COMPLETE_SEP_STR,
|
||||||
COMPLETE_JOB_DESC,
|
COMPLETE_JOB_DESC,
|
||||||
(void *)0 );
|
(void *)0 );
|
||||||
|
@ -438,15 +446,16 @@ static int find_process( const wchar_t *proc,
|
||||||
continue;
|
continue;
|
||||||
for( p=j->first_process; p; p=p->next )
|
for( p=j->first_process; p; p=p->next )
|
||||||
{
|
{
|
||||||
|
int offset;
|
||||||
|
|
||||||
if( p->actual_cmd == 0 )
|
if( p->actual_cmd == 0 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( match_pid( p->actual_cmd, proc, flags ) )
|
if( match_pid( p->actual_cmd, proc, flags, &offset ) )
|
||||||
{
|
{
|
||||||
if( flags & ACCEPT_INCOMPLETE )
|
if( flags & ACCEPT_INCOMPLETE )
|
||||||
{
|
{
|
||||||
wchar_t *res = wcsdupcat2( p->actual_cmd + wcslen(proc),
|
wchar_t *res = wcsdupcat2( p->actual_cmd + offset + wcslen(proc),
|
||||||
COMPLETE_SEP_STR,
|
COMPLETE_SEP_STR,
|
||||||
COMPLETE_CHILD_PROCESS_DESC,
|
COMPLETE_CHILD_PROCESS_DESC,
|
||||||
(void *)0);
|
(void *)0);
|
||||||
|
@ -556,16 +565,19 @@ static int find_process( const wchar_t *proc,
|
||||||
|
|
||||||
if( cmd != 0 )
|
if( cmd != 0 )
|
||||||
{
|
{
|
||||||
if( match_pid( cmd, proc, flags ) )
|
int offset;
|
||||||
|
|
||||||
|
if( match_pid( cmd, proc, flags, &offset ) )
|
||||||
{
|
{
|
||||||
if( flags & ACCEPT_INCOMPLETE )
|
if( flags & ACCEPT_INCOMPLETE )
|
||||||
{
|
{
|
||||||
wchar_t *res = wcsdupcat2( cmd + wcslen(proc),
|
wchar_t *res = wcsdupcat2( cmd + offset + wcslen(proc),
|
||||||
COMPLETE_SEP_STR,
|
COMPLETE_SEP_STR,
|
||||||
COMPLETE_PROCESS_DESC,
|
COMPLETE_PROCESS_DESC,
|
||||||
(void *)0);
|
(void *)0);
|
||||||
if( res )
|
if( res )
|
||||||
al_push( out, res );
|
al_push( out, res );
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue