1
0
Эх сурвалжийг харах

Merge pull request #870 from armink/fix_shell

[Finsh] Stop push new history when current cmd is same as last cmd.
Bernard Xiong 7 жил өмнө
parent
commit
c5e8d9d757
1 өөрчлөгдсөн 23 нэмэгдсэн , 14 устгасан
  1. 23 14
      components/finsh/shell.c

+ 23 - 14
components/finsh/shell.c

@@ -372,26 +372,35 @@ static void shell_push_history(struct finsh_shell *shell)
         /* push history */
         if (shell->history_count >= FINSH_HISTORY_LINES)
         {
-            /* move history */
-            int index;
-            for (index = 0; index < FINSH_HISTORY_LINES - 1; index ++)
+            /* if current cmd is same as last cmd, don't push */
+            if (memcmp(&shell->cmd_history[FINSH_HISTORY_LINES - 1], shell->line, shell->line_position))
             {
-                memcpy(&shell->cmd_history[index][0],
-                       &shell->cmd_history[index + 1][0], FINSH_CMD_SIZE);
-            }
-            memset(&shell->cmd_history[index][0], 0, FINSH_CMD_SIZE);
-            memcpy(&shell->cmd_history[index][0], shell->line, shell->line_position);
+                /* move history */
+                int index;
+                for (index = 0; index < FINSH_HISTORY_LINES - 1; index ++)
+                {
+                    memcpy(&shell->cmd_history[index][0],
+                           &shell->cmd_history[index + 1][0], FINSH_CMD_SIZE);
+                }
+                memset(&shell->cmd_history[index][0], 0, FINSH_CMD_SIZE);
+                memcpy(&shell->cmd_history[index][0], shell->line, shell->line_position);
 
-            /* it's the maximum history */
-            shell->history_count = FINSH_HISTORY_LINES;
+                /* it's the maximum history */
+                shell->history_count = FINSH_HISTORY_LINES;
+            }
         }
         else
         {
-            memset(&shell->cmd_history[shell->history_count][0], 0, FINSH_CMD_SIZE);
-            memcpy(&shell->cmd_history[shell->history_count][0], shell->line, shell->line_position);
+            /* if current cmd is same as last cmd, don't push */
+            if (shell->history_count == 0 || memcmp(&shell->cmd_history[shell->history_count - 1], shell->line, shell->line_position))
+            {
+                shell->current_history = shell->history_count;
+                memset(&shell->cmd_history[shell->history_count][0], 0, FINSH_CMD_SIZE);
+                memcpy(&shell->cmd_history[shell->history_count][0], shell->line, shell->line_position);
 
-            /* increase count and set current history position */
-            shell->history_count ++;
+                /* increase count and set current history position */
+                shell->history_count ++;
+            }
         }
     }
     shell->current_history = shell->history_count;