Made it so changes to the prompt via "settings set prompt" get noticed by the command line. 

Added the ability for OptionValueString objects to take flags. The only flag is currently for parsing escape sequences. Not the prompt string can have escape characters translate which will allow colors in the prompt.

Added functions to Args that will parse the escape sequences in a string, and also re-encode the escape sequences for display. This was looted from other parts of LLDB (the Debugger::FormatString() function).



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@163043 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Interpreter/OptionValueString.cpp b/source/Interpreter/OptionValueString.cpp
index 35ab8c8..696e62b 100644
--- a/source/Interpreter/OptionValueString.cpp
+++ b/source/Interpreter/OptionValueString.cpp
@@ -14,6 +14,7 @@
 // Other libraries and framework includes
 // Project includes
 #include "lldb/Core/Stream.h"
+#include "lldb/Interpreter/Args.h"
 
 using namespace lldb;
 using namespace lldb_private;
@@ -29,10 +30,22 @@
             strm.PutCString (" = ");
         if (!m_current_value.empty() || m_value_was_set)
         {
-            if (dump_mask & eDumpOptionRaw)
-                strm.Printf ("%s", m_current_value.c_str());
+            if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
+            {
+                std::string expanded_escape_value;
+                Args::ExpandEscapedCharacters(m_current_value.c_str(), expanded_escape_value);
+                if (dump_mask & eDumpOptionRaw)
+                    strm.Printf ("%s", expanded_escape_value.c_str());
+                else
+                    strm.Printf ("\"%s\"", expanded_escape_value.c_str());                
+            }
             else
-                strm.Printf ("\"%s\"", m_current_value.c_str());
+            {
+                if (dump_mask & eDumpOptionRaw)
+                    strm.Printf ("%s", m_current_value.c_str());
+                else
+                    strm.Printf ("\"%s\"", m_current_value.c_str());
+            }
         }
     }
 }
@@ -53,7 +66,16 @@
 
     case eVarSetOperationAppend:
         if (value_cstr && value_cstr[0])
-            m_current_value += value_cstr;
+        {
+            if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
+            {
+                std::string str;
+                Args::EncodeEscapeSequences (value_cstr, str);
+                m_current_value += str;
+            }
+            else
+                m_current_value += value_cstr;
+        }
         break;
 
     case eVarSetOperationClear:
@@ -63,7 +85,14 @@
     case eVarSetOperationReplace:
     case eVarSetOperationAssign:
         m_value_was_set = true;
-        SetCurrentValue (value_cstr);
+        if (m_options.Test (eOptionEncodeCharacterEscapeSequences))
+        {
+            Args::EncodeEscapeSequences (value_cstr, m_current_value);
+        }
+        else
+        {
+            SetCurrentValue (value_cstr);
+        }
         break;
     }
     return error;