Browse Source

[shell] add finsh_set_prompt().

aozima 6 years ago
parent
commit
4f1112f838
2 changed files with 34 additions and 7 deletions
  1. 32 3
      components/finsh/shell.c
  2. 2 4
      components/finsh/shell.h

+ 32 - 3
components/finsh/shell.c

@@ -56,11 +56,35 @@ ALIGN(RT_ALIGN_SIZE)
 static char finsh_thread_stack[FINSH_THREAD_STACK_SIZE];
 #endif
 struct finsh_shell *shell;
+static char *finsh_prompt_custom = RT_NULL;
+
+#ifdef RT_USING_HEAP
+int finsh_set_prompt(const char * prompt)
+{
+    if(finsh_prompt_custom)
+    {
+        rt_free(finsh_prompt_custom);
+        finsh_prompt_custom = RT_NULL;
+    }
+
+    /* strdup */
+    if(prompt)
+    {
+        finsh_prompt_custom = rt_malloc(strlen(prompt)+1);
+        if(finsh_prompt_custom)
+        {
+            strcpy(finsh_prompt_custom, prompt);
+        }
+    }
+
+    return 0;
+}
+#endif /* RT_USING_HEAP */
 
-#if defined(FINSH_USING_MSH) || (defined(RT_USING_DFS) && defined(DFS_USING_WORKDIR))
 #if defined(RT_USING_DFS)
 #include <dfs_posix.h>
-#endif
+#endif /* RT_USING_DFS */
+
 const char *finsh_get_prompt()
 {
 #define _MSH_PROMPT "msh "
@@ -74,6 +98,12 @@ const char *finsh_get_prompt()
         return finsh_prompt;
     }
 
+    if(finsh_prompt_custom)
+    {
+        strncpy(finsh_prompt, finsh_prompt_custom, sizeof(finsh_prompt)-1);
+        return finsh_prompt;
+    }
+
 #ifdef FINSH_USING_MSH
     if (msh_is_used()) strcpy(finsh_prompt, _MSH_PROMPT);
     else
@@ -89,7 +119,6 @@ const char *finsh_get_prompt()
 
     return finsh_prompt;
 }
-#endif
 
 /**
  * @ingroup finsh

+ 2 - 4
components/finsh/shell.h

@@ -44,12 +44,10 @@
 #endif
 
 #define FINSH_OPTION_ECHO   0x01
-#if defined(FINSH_USING_MSH) || (defined(RT_USING_DFS) && defined(DFS_USING_WORKDIR))
+
 #define FINSH_PROMPT        finsh_get_prompt()
 const char* finsh_get_prompt(void);
-#else
-#define FINSH_PROMPT        "finsh>>"
-#endif
+int finsh_set_prompt(const char * prompt);
 
 #ifdef FINSH_USING_HISTORY
     #ifndef FINSH_HISTORY_LINES