diff options
Diffstat (limited to 'include/lldb/Host/Editline.h')
-rw-r--r-- | include/lldb/Host/Editline.h | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/include/lldb/Host/Editline.h b/include/lldb/Host/Editline.h index b92de1052f29..5cba8465d654 100644 --- a/include/lldb/Host/Editline.h +++ b/include/lldb/Host/Editline.h @@ -23,9 +23,11 @@ #include <string> #include <vector> +#include "lldb/Core/ConnectionFileDescriptor.h" #include "lldb/Host/Condition.h" #include "lldb/Host/FileSpec.h" #include "lldb/Host/Mutex.h" +#include "lldb/Host/Predicate.h" namespace lldb_private { @@ -33,6 +35,10 @@ namespace lldb_private { /// @class Editline Editline.h "lldb/Host/Editline.h" /// @brief A class that encapsulates editline functionality. //---------------------------------------------------------------------- +class EditlineHistory; + +typedef std::shared_ptr<EditlineHistory> EditlineHistorySP; + class Editline { public: @@ -58,6 +64,7 @@ public: Editline(const char *prog, // Used for the history file and for editrc program name const char *prompt, + bool configure_for_multiline, FILE *fin, FILE *fout, FILE *ferr); @@ -65,10 +72,13 @@ public: ~Editline(); Error - GetLine (std::string &line); + GetLine (std::string &line, + bool &interrupted); Error - GetLines (const std::string &end_line, StringList &lines); + GetLines (const std::string &end_line, + StringList &lines, + bool &interrupted); bool LoadHistory (); @@ -97,7 +107,7 @@ public: void Refresh(); - void + bool Interrupt (); void @@ -118,11 +128,6 @@ public: size_t Push (const char *bytes, size_t len); - - // Cache bytes and use them for input without using a FILE. Calling this function - // will set the getc callback in the editline - size_t - SetInputBuffer (const char *c, size_t len); static int GetCharFromInputFileCallback (::EditLine *e, char *c); @@ -135,21 +140,21 @@ public: void SetPrompt (const char *p); - + + void + ShowLineNumbers (bool enable, uint32_t line_offset) + { + m_prompt_with_line_numbers = enable; + m_line_offset = line_offset; + } + private: Error PrivateGetLine(std::string &line); - FileSpec - GetHistoryFile(); - unsigned char HandleCompletion (int ch); - - int - GetChar (char *c); - static unsigned char CallbackEditPrevLine (::EditLine *e, int ch); @@ -169,9 +174,6 @@ private: static FILE * GetFilePointer (::EditLine *e, int fd); - static int - GetCharInputBufferCallback (::EditLine *e, char *c); - enum class Command { None = 0, @@ -179,22 +181,19 @@ private: EditNextLine, }; ::EditLine *m_editline; - ::History *m_history; - ::HistEvent m_history_event; - std::string m_program; + EditlineHistorySP m_history_sp; std::string m_prompt; std::string m_lines_prompt; - std::string m_getc_buffer; - Mutex m_getc_mutex; - Condition m_getc_cond; + lldb_private::Predicate<bool> m_getting_char; CompleteCallbackType m_completion_callback; void *m_completion_callback_baton; -// Mutex m_gets_mutex; // Make sure only one thread LineCompletedCallbackType m_line_complete_callback; void *m_line_complete_callback_baton; Command m_lines_command; + uint32_t m_line_offset; uint32_t m_lines_curr_line; uint32_t m_lines_max_line; + ConnectionFileDescriptor m_file; bool m_prompt_with_line_numbers; bool m_getting_line; bool m_got_eof; // Set to true when we detect EOF |