- the number of commands in the history list is now configureable via the
authorRobert Griebl <griebl@gmx.de>
Tue, 3 Dec 2002 22:45:46 +0000 (22:45 -0000)
committerRobert Griebl <griebl@gmx.de>
Tue, 3 Dec 2002 22:45:46 +0000 (22:45 -0000)
   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.

shell/ash.c
shell/cmdedit.c
shell/cmdedit.h
shell/config.in

index d20618d3cbf5c74a63b1237ee6795f266d470b25..bec37cfcc6f6b3fadc0b3b3bccc7933382380335 100644 (file)
@@ -7356,6 +7356,10 @@ int ash_main(int argc, char **argv)
 
        if (sflag || minusc == NULL) {
          state4:                       /* XXX ??? - why isn't this before the "if" statement */
+#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
+           if ( iflag )
+               load_history ( ".ash_history" );
+#endif
                cmdloop(1);
        }
 #if PROFILE
@@ -7546,6 +7550,11 @@ static int exitcmd(int argc, char **argv)
 {
        if (stoppedjobs())
                return 0;
+#ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY
+       if ( iflag )
+               save_history ( ".ash_history" );
+#endif                 
+               
        if (argc > 1)
                exitstatus = number(argv[1]);
        else
index b6e743eb4118f33532758d84d687043c7c01f2e6..73378e659f079719feec59fa1b2154a1889ad79c 100644 (file)
 
 
 /* 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
 #warning cmdedit: You set MAX_HISTORY < 1. The history algorithm switched off.
 #else
@@ -1125,6 +1130,55 @@ static int get_next_history(void)
                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
 
 enum {
index 83893572a259995a4f410c394ae218647c53459d..045588dc12b5e29b16c0cd1f15b1d8b21fff3d22 100644 (file)
@@ -3,4 +3,7 @@
 
 int     cmdedit_read_input(char* promptStr, char* command);
 
+void    load_history ( char *fromfile );
+void    save_history ( char *tofile );
+
 #endif /* CMDEDIT_H */
index b34c238456615fdf3ebbf118b0fa71ac1530c53e..cb1365b9dda9498b3b4383b924a7cac368127778 100644 (file)
@@ -52,6 +52,8 @@ comment 'Bourne Shell Options'
 bool 'command line editing'            CONFIG_FEATURE_COMMAND_EDITING
 bool 'tab completion'                  CONFIG_FEATURE_COMMAND_TAB_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 -- applets always win'  CONFIG_FEATURE_SH_APPLETS_ALWAYS_WIN
 bool 'Fancy shell prompts'     CONFIG_FEATURE_SH_FANCY_PROMPT