- the number of commands in the history list is now configureable via the
config system - added a new config option to allow persistant history lists. This is currently only used by ash, but the calls ({load,save}_history) could be added to the other shells as well.
This commit is contained in:
parent
3ba7ceebfc
commit
350d26bbbb
@ -7356,6 +7356,10 @@ int ash_main(int argc, char **argv)
|
|||||||
|
|
||||||
if (sflag || minusc == NULL) {
|
if (sflag || minusc == NULL) {
|
||||||
state4: /* XXX ??? - why isn't this before the "if" statement */
|
state4: /* XXX ??? - why isn't this before the "if" statement */
|
||||||
|
#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
|
||||||
|
if ( iflag )
|
||||||
|
load_history ( ".ash_history" );
|
||||||
|
#endif
|
||||||
cmdloop(1);
|
cmdloop(1);
|
||||||
}
|
}
|
||||||
#if PROFILE
|
#if PROFILE
|
||||||
@ -7546,6 +7550,11 @@ static int exitcmd(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
if (stoppedjobs())
|
if (stoppedjobs())
|
||||||
return 0;
|
return 0;
|
||||||
|
#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
|
||||||
|
if ( iflag )
|
||||||
|
save_history ( ".ash_history" );
|
||||||
|
#endif
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
exitstatus = number(argv[1]);
|
exitstatus = number(argv[1]);
|
||||||
else
|
else
|
||||||
|
@ -90,7 +90,12 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Maximum length of the linked list for the command line history */
|
/* Maximum length of the linked list for the command line history */
|
||||||
#define MAX_HISTORY 15
|
#ifndef CONFIG_FEATURE_COMMAND_HISTORY
|
||||||
|
#define MAX_HISTORY 15
|
||||||
|
#else
|
||||||
|
#define MAX_HISTORY CONFIG_FEATURE_COMMAND_HISTORY
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MAX_HISTORY < 1
|
#if MAX_HISTORY < 1
|
||||||
#warning cmdedit: You set MAX_HISTORY < 1. The history algorithm switched off.
|
#warning cmdedit: You set MAX_HISTORY < 1. The history algorithm switched off.
|
||||||
#else
|
#else
|
||||||
@ -1125,6 +1130,55 @@ static int get_next_history(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern void load_history ( char *fromfile )
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
// cleanup old
|
||||||
|
while ( n_history ) {
|
||||||
|
if ( history [n_history - 1] )
|
||||||
|
free ( history [n_history - 1] );
|
||||||
|
n_history--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (( fp = fopen ( fromfile, "r" ))) {
|
||||||
|
char buffer [256];
|
||||||
|
int i, l;
|
||||||
|
|
||||||
|
for ( i = 0; i < MAX_HISTORY; i++ ) {
|
||||||
|
if ( !fgets ( buffer, sizeof( buffer ) - 1, fp ))
|
||||||
|
break;
|
||||||
|
l = xstrlen ( buffer );
|
||||||
|
if ( l && buffer [l - 1] == '\n' )
|
||||||
|
buffer [l - 1] = 0;
|
||||||
|
history [n_history++] = xstrdup ( buffer );
|
||||||
|
}
|
||||||
|
fclose ( fp );
|
||||||
|
}
|
||||||
|
cur_history = n_history;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void save_history ( char *tofile )
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
|
||||||
|
FILE *fp = fopen ( tofile, "w" );
|
||||||
|
|
||||||
|
if ( fp ) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for ( i = 0; i < n_history; i++ ) {
|
||||||
|
fputs ( history [i], fp );
|
||||||
|
fputc ( '\n', fp );
|
||||||
|
}
|
||||||
|
fclose ( fp );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -3,4 +3,7 @@
|
|||||||
|
|
||||||
int cmdedit_read_input(char* promptStr, char* command);
|
int cmdedit_read_input(char* promptStr, char* command);
|
||||||
|
|
||||||
|
void load_history ( char *fromfile );
|
||||||
|
void save_history ( char *tofile );
|
||||||
|
|
||||||
#endif /* CMDEDIT_H */
|
#endif /* CMDEDIT_H */
|
||||||
|
@ -52,6 +52,8 @@ comment 'Bourne Shell Options'
|
|||||||
bool 'command line editing' CONFIG_FEATURE_COMMAND_EDITING
|
bool 'command line editing' CONFIG_FEATURE_COMMAND_EDITING
|
||||||
bool 'tab completion' CONFIG_FEATURE_COMMAND_TAB_COMPLETION
|
bool 'tab completion' CONFIG_FEATURE_COMMAND_TAB_COMPLETION
|
||||||
bool 'username completion' CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION
|
bool 'username completion' CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION
|
||||||
|
int 'history size' CONFIG_FEATURE_COMMAND_HISTORY 15
|
||||||
|
bool 'history saving (currently only ash)' CONFIG_FEATURE_COMMAND_SAVEHISTORY
|
||||||
bool 'Standalone shell' CONFIG_FEATURE_SH_STANDALONE_SHELL
|
bool 'Standalone shell' CONFIG_FEATURE_SH_STANDALONE_SHELL
|
||||||
bool 'Standalone shell -- applets always win' CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
|
bool 'Standalone shell -- applets always win' CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
|
||||||
bool 'Fancy shell prompts' CONFIG_FEATURE_SH_FANCY_PROMPT
|
bool 'Fancy shell prompts' CONFIG_FEATURE_SH_FANCY_PROMPT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user