1 //===-- Editline.h ----------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_Editline_h_
11 #define liblldb_Editline_h_
12 #if defined(__cplusplus)
14 #include "lldb/lldb-private.h"
18 #include "lldb/Host/windows/editlinewin.h"
26 #include "lldb/Core/ConnectionFileDescriptor.h"
27 #include "lldb/Host/Condition.h"
28 #include "lldb/Host/FileSpec.h"
29 #include "lldb/Host/Mutex.h"
30 #include "lldb/Host/Predicate.h"
32 namespace lldb_private {
34 //----------------------------------------------------------------------
35 /// @class Editline Editline.h "lldb/Host/Editline.h"
36 /// @brief A class that encapsulates editline functionality.
37 //----------------------------------------------------------------------
38 class EditlineHistory;
40 typedef std::shared_ptr<EditlineHistory> EditlineHistorySP;
45 typedef LineStatus (*LineCompletedCallbackType) (
52 typedef int (*CompleteCallbackType) (
53 const char *current_line,
55 const char *last_char,
56 int skip_first_n_matches,
61 typedef int (*GetCharCallbackType) (
65 Editline(const char *prog, // Used for the history file and for editrc program name
67 bool configure_for_multiline,
75 GetLine (std::string &line,
79 GetLines (const std::string &end_line,
101 return m_getting_line;
114 SetAutoCompleteCallback (CompleteCallbackType callback,
117 m_completion_callback = callback;
118 m_completion_callback_baton = baton;
122 SetLineCompleteCallback (LineCompletedCallbackType callback,
125 m_line_complete_callback = callback;
126 m_line_complete_callback_baton = baton;
130 Push (const char *bytes, size_t len);
133 GetCharFromInputFileCallback (::EditLine *e, char *c);
136 SetGetCharCallback (GetCharCallbackType callback);
142 SetPrompt (const char *p);
145 ShowLineNumbers (bool enable, uint32_t line_offset)
147 m_prompt_with_line_numbers = enable;
148 m_line_offset = line_offset;
154 PrivateGetLine(std::string &line);
157 HandleCompletion (int ch);
160 CallbackEditPrevLine (::EditLine *e, int ch);
163 CallbackEditNextLine (::EditLine *e, int ch);
166 CallbackComplete (::EditLine *e, int ch);
169 GetPromptCallback (::EditLine *e);
172 GetClientData (::EditLine *e);
175 GetFilePointer (::EditLine *e, int fd);
183 ::EditLine *m_editline;
184 EditlineHistorySP m_history_sp;
185 std::string m_prompt;
186 std::string m_lines_prompt;
187 lldb_private::Predicate<bool> m_getting_char;
188 CompleteCallbackType m_completion_callback;
189 void *m_completion_callback_baton;
190 LineCompletedCallbackType m_line_complete_callback;
191 void *m_line_complete_callback_baton;
192 Command m_lines_command;
193 uint32_t m_line_offset;
194 uint32_t m_lines_curr_line;
195 uint32_t m_lines_max_line;
196 ConnectionFileDescriptor m_file;
197 bool m_prompt_with_line_numbers;
199 bool m_got_eof; // Set to true when we detect EOF
202 DISALLOW_COPY_AND_ASSIGN(Editline);
205 } // namespace lldb_private
207 #endif // #if defined(__cplusplus)
208 #endif // liblldb_Host_h_