mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-23 06:41:42 +08:00
Merge commit 'refs/merge-requests/8' of git://gitorious.org/fish-shell/fish-shell into merge_request_8
This commit is contained in:
commit
2583638f4b
|
@ -887,7 +887,7 @@ clean:
|
|||
rm -rf doc;
|
||||
rm -rf fish-@PACKAGE_VERSION@
|
||||
rm -f $(TRANSLATIONS)
|
||||
-make -C $(XSEL) clean
|
||||
test ! -d "$(XSEL)" || make -C $(XSEL) clean
|
||||
.PHONY: clean
|
||||
|
||||
|
||||
|
|
|
@ -2070,7 +2070,7 @@ static int builtin_read( wchar_t **argv )
|
|||
}
|
||||
,
|
||||
{
|
||||
L"shell", required_argument, 0, 's'
|
||||
L"shell", no_argument, 0, 's'
|
||||
}
|
||||
,
|
||||
{
|
||||
|
@ -3871,7 +3871,7 @@ static int internal_help( wchar_t *cmd )
|
|||
{
|
||||
CHECK( cmd, 0 );
|
||||
return contains( cmd, L"for", L"while", L"function",
|
||||
L"if", L"end", L"switch" );
|
||||
L"if", L"end", L"switch", L"count" );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -125,6 +125,11 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
|||
{
|
||||
indent--;
|
||||
}
|
||||
/* case should have the same indent level as switch*/
|
||||
else if( wcscmp( unesc, L"case" ) == 0 )
|
||||
{
|
||||
indent--;
|
||||
}
|
||||
else if( wcscmp( unesc, L"end" ) == 0 )
|
||||
{
|
||||
indent--;
|
||||
|
@ -132,7 +137,7 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
|||
}
|
||||
|
||||
|
||||
if( do_indent && flags)
|
||||
if( do_indent && flags && prev_type != TOK_PIPE )
|
||||
{
|
||||
insert_tabs( out, indent );
|
||||
}
|
||||
|
@ -144,7 +149,9 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
|||
}
|
||||
else
|
||||
{
|
||||
sb_printf( out, L" %ls", last );
|
||||
if ( prev_type != TOK_REDIRECT_FD )
|
||||
sb_append( out, L" " );
|
||||
sb_append( out, last );
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -161,39 +168,60 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
|||
|
||||
case TOK_PIPE:
|
||||
{
|
||||
sb_append( out, L" | " );
|
||||
sb_append( out, L" " );
|
||||
if ( last[0] == '2' && !last[1] ) {
|
||||
sb_append( out, L"^" );
|
||||
} else if ( last[0] != '1' || last[1] ) {
|
||||
sb_append( out, last, L">" );
|
||||
}
|
||||
sb_append( out, L"| " );
|
||||
is_command = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_OUT:
|
||||
case TOK_REDIRECT_APPEND:
|
||||
case TOK_REDIRECT_IN:
|
||||
case TOK_REDIRECT_FD:
|
||||
{
|
||||
sb_append( out, last );
|
||||
switch( type )
|
||||
{
|
||||
case TOK_REDIRECT_OUT:
|
||||
sb_append( out, L"> " );
|
||||
break;
|
||||
|
||||
case TOK_REDIRECT_APPEND:
|
||||
sb_append( out, L">> " );
|
||||
break;
|
||||
|
||||
case TOK_REDIRECT_IN:
|
||||
sb_append( out, L"< " );
|
||||
break;
|
||||
|
||||
case TOK_REDIRECT_FD:
|
||||
sb_append( out, L">& " );
|
||||
break;
|
||||
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"2" ) == 0 ) {
|
||||
sb_append( out, L"^" );
|
||||
} else {
|
||||
if ( wcscmp( last, L"1" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L">" );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_APPEND:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"2" ) == 0 ) {
|
||||
sb_append( out, L"^^" );
|
||||
} else {
|
||||
if ( wcscmp( last, L"1" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L">>" );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_IN:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"0" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L"<" );
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_FD:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"1" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L">&" );
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_BACKGROUND:
|
||||
{
|
||||
|
@ -203,7 +231,6 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
case TOK_COMMENT:
|
||||
{
|
||||
if( do_indent && flags)
|
||||
|
|
95
mimedb.c
95
mimedb.c
|
@ -214,7 +214,7 @@ static char * search_ini( const char *filename, const char *match )
|
|||
buf[0]=0;
|
||||
done = 1;
|
||||
}
|
||||
else if( strncmp( buf, match,len )==0)
|
||||
else if( strncmp( buf, match, len ) == 0 && buf[len] == '=' )
|
||||
{
|
||||
done=1;
|
||||
}
|
||||
|
@ -240,7 +240,9 @@ static char * search_ini( const char *filename, const char *match )
|
|||
*/
|
||||
static char *file_exists( const char *dir, const char *in )
|
||||
{
|
||||
char *filename = my_malloc( strlen( dir ) + strlen(in) + 1 );
|
||||
int dir_len = strlen( dir );
|
||||
int need_sep = dir[dir_len - 1] != '/';
|
||||
char *filename = my_malloc( dir_len + need_sep + strlen( in ) + 1 );
|
||||
char *replaceme;
|
||||
struct stat buf;
|
||||
|
||||
|
@ -251,7 +253,9 @@ static char *file_exists( const char *dir, const char *in )
|
|||
return 0;
|
||||
}
|
||||
strcpy( filename, dir );
|
||||
strcat( filename, in );
|
||||
if ( need_sep )
|
||||
filename[dir_len++] = '/';
|
||||
strcpy( filename + dir_len, in );
|
||||
|
||||
if( !stat( filename, &buf ) )
|
||||
return filename;
|
||||
|
@ -285,9 +289,15 @@ static char *file_exists( const char *dir, const char *in )
|
|||
Try to find the specified file in any of the possible directories
|
||||
where mime files can be located. This code is shamelessly stolen
|
||||
from xdg_run_command_on_dirs.
|
||||
|
||||
\param list Full file paths will be appended to this list.
|
||||
\param f The relative filename search for the the data directories.
|
||||
\param all If zero, then stop after the first filename.
|
||||
\return The number of filenames added to the list.
|
||||
*/
|
||||
static char *get_filename( char *f )
|
||||
static int append_filenames( array_list_t *list, char *f, int all )
|
||||
{
|
||||
int prev_count = al_get_count( list );
|
||||
char *result;
|
||||
const char *xdg_data_home;
|
||||
const char *xdg_data_dirs;
|
||||
|
@ -297,8 +307,12 @@ static char *get_filename( char *f )
|
|||
if (xdg_data_home)
|
||||
{
|
||||
result = file_exists( xdg_data_home, f );
|
||||
if (result)
|
||||
return result;
|
||||
if ( result )
|
||||
{
|
||||
al_push( list, result );
|
||||
if ( !all )
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -309,23 +323,27 @@ static char *get_filename( char *f )
|
|||
{
|
||||
char *guessed_xdg_home;
|
||||
|
||||
guessed_xdg_home = my_malloc (strlen (home) + strlen ("/.local/share/") + 1);
|
||||
guessed_xdg_home = my_malloc (strlen (home) + strlen ("/.local/share") + 1);
|
||||
if( !guessed_xdg_home )
|
||||
return 0;
|
||||
|
||||
strcpy (guessed_xdg_home, home);
|
||||
strcat (guessed_xdg_home, "/.local/share/");
|
||||
strcat (guessed_xdg_home, "/.local/share");
|
||||
result = file_exists( guessed_xdg_home, f );
|
||||
free (guessed_xdg_home);
|
||||
|
||||
if (result)
|
||||
return result;
|
||||
if ( result )
|
||||
{
|
||||
al_push( list, result );
|
||||
if ( !all )
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xdg_data_dirs = getenv ("XDG_DATA_DIRS");
|
||||
if (xdg_data_dirs == NULL)
|
||||
xdg_data_dirs = "/usr/local/share/:/usr/share/";
|
||||
xdg_data_dirs = "/usr/local/share:/usr/share";
|
||||
|
||||
ptr = xdg_data_dirs;
|
||||
|
||||
|
@ -345,10 +363,7 @@ static char *get_filename( char *f )
|
|||
continue;
|
||||
}
|
||||
|
||||
if (*end_ptr == ':')
|
||||
len = end_ptr - ptr;
|
||||
else
|
||||
len = end_ptr - ptr + 1;
|
||||
len = end_ptr - ptr;
|
||||
dir = my_malloc (len + 1);
|
||||
if( !dir )
|
||||
return 0;
|
||||
|
@ -359,12 +374,32 @@ static char *get_filename( char *f )
|
|||
|
||||
free (dir);
|
||||
|
||||
if (result)
|
||||
return result;
|
||||
if ( result )
|
||||
{
|
||||
al_push( list, result );
|
||||
if ( !all ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
ptr = end_ptr;
|
||||
}
|
||||
return 0;
|
||||
return al_get_count( list ) - prev_count;
|
||||
}
|
||||
|
||||
/**
|
||||
Find at most one file relative to the XDG data directories.
|
||||
*/
|
||||
static char *get_filename( char *f )
|
||||
{
|
||||
array_list_t list;
|
||||
char *first = NULL;
|
||||
|
||||
al_init( &list );
|
||||
append_filenames( &list, f, 0 );
|
||||
first = al_pop( &list );
|
||||
al_destroy( &list );
|
||||
return first;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -638,22 +673,32 @@ static char *get_description( const char *mimetype )
|
|||
static char *get_action( const char *mimetype )
|
||||
{
|
||||
char *res=0;
|
||||
int i;
|
||||
|
||||
char *launcher;
|
||||
char *end;
|
||||
char *mime_filename;
|
||||
array_list_t mime_filenames;
|
||||
|
||||
char *launcher_str;
|
||||
char *launcher_str = NULL;
|
||||
char *launcher_filename, *launcher_command_str, *launcher_command;
|
||||
char *launcher_full;
|
||||
|
||||
mime_filename = get_filename( DESKTOP_DEFAULT );
|
||||
if( !mime_filename )
|
||||
al_init( &mime_filenames );
|
||||
if( !append_filenames( &mime_filenames, DESKTOP_DEFAULT, 1 ) )
|
||||
{
|
||||
al_destroy( &mime_filenames );
|
||||
return 0;
|
||||
}
|
||||
|
||||
launcher_str = search_ini( mime_filename, mimetype );
|
||||
for ( i = 0; i < al_get_count( &mime_filenames ); i++ )
|
||||
{
|
||||
launcher_str = search_ini( al_get( &mime_filenames, i ), mimetype );
|
||||
if ( launcher_str )
|
||||
break;
|
||||
}
|
||||
|
||||
free( mime_filename );
|
||||
al_foreach( &mime_filenames, free );
|
||||
al_destroy( &mime_filenames );
|
||||
|
||||
if( !launcher_str )
|
||||
{
|
||||
|
@ -717,7 +762,7 @@ static char *get_action( const char *mimetype )
|
|||
|
||||
free( launcher_full );
|
||||
|
||||
launcher_command_str = search_ini( launcher_filename, "Exec=" );
|
||||
launcher_command_str = search_ini( launcher_filename, "Exec" );
|
||||
|
||||
if( !launcher_command_str )
|
||||
{
|
||||
|
|
|
@ -46,9 +46,17 @@ function __fish_print_packages
|
|||
# This completes the package name from the portage tree.
|
||||
# True for installing new packages. Function for printing
|
||||
# installed on the system packages is in completions/emerge.fish
|
||||
if type -f emerge >/dev/null
|
||||
emerge -s \^(commandline -tc) |sgrep "^*" |cut -d\ -f3 |cut -d/ -f2
|
||||
|
||||
# eix is MUCH faster than emerge so use it if it is available
|
||||
if type -f eix > /dev/null
|
||||
eix --only-names "^"(commandline -tc) | cut -d/ -f2
|
||||
return
|
||||
else
|
||||
# FIXME? Seems to be broken
|
||||
if type -f emerge >/dev/null
|
||||
emerge -s \^(commandline -tc) |sgrep "^*" |cut -d\ -f3 |cut -d/ -f2
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -68,6 +68,8 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis
|
|||
bind \e\x7f backward-kill-word
|
||||
bind \eb backward-word
|
||||
bind \ef forward-word
|
||||
bind \e\[1\;5C forward-word
|
||||
bind \e\[1\;5D backward-word
|
||||
bind \ed forward-kill-word
|
||||
bind -k ppage beginning-of-history
|
||||
bind -k npage end-of-history
|
||||
|
|
|
@ -4,11 +4,13 @@ function funcsave --description "Save the current definition of all specified fu
|
|||
if count $argv >/dev/null
|
||||
switch $argv[1]
|
||||
case -h --h --he --hel --help
|
||||
__fish_print_help save_function
|
||||
__fish_print_help funcsave
|
||||
return 0
|
||||
end
|
||||
else
|
||||
__fish_print_help save_function
|
||||
printf (_ "%s: Expected function name\n") funcsave
|
||||
__fish_print_help funcsave
|
||||
return 1
|
||||
end
|
||||
|
||||
set -l res 0
|
||||
|
@ -21,7 +23,7 @@ function funcsave --description "Save the current definition of all specified fu
|
|||
for i in $configdir $configdir/fish $configdir/fish/functions
|
||||
if not test -d $i
|
||||
if not command mkdir $i >/dev/null
|
||||
printf (_ "%s: Could not create configuration directory\n") save_function
|
||||
printf (_ "%s: Could not create configuration directory\n") funcsave
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
@ -32,7 +34,7 @@ function funcsave --description "Save the current definition of all specified fu
|
|||
functions $i > $configdir/fish/functions/$i.fish
|
||||
functions -e $i
|
||||
else
|
||||
printf (_ "%s: Unknown function '%s'\n") save_function $i
|
||||
printf (_ "%s: Unknown function '%s'\n") funcsave $i
|
||||
set res 1
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user