GNU Octave 10.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 
Loading...
Searching...
No Matches
input.h
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////
2//
3// Copyright (C) 1993-2025 The Octave Project Developers
4//
5// See the file COPYRIGHT.md in the top-level directory of this
6// distribution or <https://octave.org/copyright/>.
7//
8// This file is part of Octave.
9//
10// Octave is free software: you can redistribute it and/or modify it
11// under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// Octave is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with Octave; see the file COPYING. If not, see
22// <https://www.gnu.org/licenses/>.
23//
24////////////////////////////////////////////////////////////////////////
25
26// Use the GNU readline library for command line editing and history.
27
28#if ! defined (octave_input_h)
29#define octave_input_h 1
30
31#include "octave-config.h"
32
33#include <cstdio>
34
35#include <memory>
36#include <string>
37#include <unordered_map>
38
39#include "hook-fcn.h"
40#include "oct-time.h"
41#include "ovl.h"
42#include "pager.h"
43
44// TRUE after a call to completion_matches.
45extern OCTINTERP_API bool octave_completion_matches_called;
46
47// TRUE if the plotting system has requested a call to drawnow at
48// the next user prompt.
49extern OCTINTERP_API bool Vdrawnow_requested;
50
51extern OCTINTERP_API octave::sys::time Vlast_prompt_time;
52
53class octave_value;
54
56
57class interpreter;
58
60{
61public:
62
63 input_system (interpreter& interp);
64
65 void initialize (bool line_editing);
66
67 octave_value PS1 (const octave_value_list& args, int nargout);
68
69 std::string PS1 () const { return m_PS1; }
70
71 std::string PS1 (const std::string& s)
72 {
73 std::string val = m_PS1;
74 m_PS1 = s;
75 return val;
76 }
77
78 void set_PS1 (const std::string& s) { m_PS1 = s; }
79
80 octave_value PS2 (const octave_value_list& args, int nargout);
81
82 std::string PS2 () const { return m_PS2; }
83
84 std::string PS2 (const std::string& s)
85 {
86 std::string val = m_PS2;
87 m_PS2 = s;
88 return val;
89 }
90
91 void set_PS2 (const std::string& s) { m_PS2 = s; }
92
93 std::string last_debugging_command () const
94 {
95 return m_last_debugging_command;
96 }
97
98 std::string last_debugging_command (const std::string& s)
99 {
100 std::string val = m_last_debugging_command;
101 m_last_debugging_command = s;
102 return val;
103 }
104
106 completion_append_char (const octave_value_list& args, int nargout);
107
109 {
110 return m_completion_append_char;
111 }
112
114 {
115 char val = m_completion_append_char;
116 m_completion_append_char = c;
117 return val;
118 }
119
120 void set_completion_append_char (char c) { m_completion_append_char = c; }
121
122 octave_value gud_mode (const octave_value_list& args, int nargout);
123
124 bool gud_mode () const { return m_gud_mode; }
125
126 bool gud_mode (bool flag)
127 {
128 bool val = m_gud_mode;
129 m_gud_mode = flag;
130 return val;
131 }
132
133 void set_gud_mode (bool flag) { m_gud_mode = flag; }
134
136
137 std::string mfile_encoding () const { return m_mfile_encoding; }
138
139 std::string mfile_encoding (const std::string& s)
140 {
141 std::string val = m_mfile_encoding;
142 m_mfile_encoding = s;
143 return val;
144 }
145
146 void set_mfile_encoding (const std::string& s) { m_mfile_encoding = s; }
147
148 std::string dir_encoding (const std::string& dir);
149
150 void set_dir_encoding (const std::string& dir, std::string& enc);
151
154
156 {
157 return m_auto_repeat_debug_command;
158 }
159
161 {
162 bool old_val = m_auto_repeat_debug_command;
163 m_auto_repeat_debug_command = val;
164 return old_val;
165 }
166
167 bool yes_or_no (const std::string& prompt);
168
169 std::string interactive_input (const std::string& s, bool& eof);
170
172 get_user_input (const octave_value_list& args, int nargout);
173
175
176 void add_input_event_hook (const hook_function& hook_fcn);
177
178 bool remove_input_event_hook (const std::string& hook_fcn_id);
179
181
183
184private:
185
186 interpreter& m_interpreter;
187
188 // Primary prompt string.
189 std::string m_PS1;
190
191 // Secondary prompt string.
192 std::string m_PS2;
193
194 // Character to append after successful command-line completion
195 // attempts.
196 char m_completion_append_char;
197
198 // TRUE if we are running in the Emacs GUD mode.
199 bool m_gud_mode;
200
201 // Codepage which is used to read .m files
202 std::string m_mfile_encoding;
203
204 // map of directories -> used mfile encoding
205 std::unordered_map<std::string, std::string> m_dir_encoding;
206
207 // TRUE means repeat last debug command if the user just types RET.
208 bool m_auto_repeat_debug_command;
209
210 // If we are in debugging mode, this is the last command entered,
211 // so that we can repeat the previous command if the user just
212 // types RET.
213 std::string m_last_debugging_command;
214
215 hook_function_list m_input_event_hook_functions;
216
217 bool m_initialized;
218
219 std::string gnu_readline (const std::string& s, bool& eof) const;
220};
221
223{
224public:
225
226 friend class input_reader;
227
229 : m_interpreter (interp)
230 { }
231
232 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (base_reader)
233
234 virtual ~base_reader () = default;
235
236 virtual std::string get_input (const std::string& prompt, bool& eof) = 0;
237
238 virtual std::string input_source () const { return s_in_src; }
239
240 std::string octave_gets (const std::string& prompt, bool& eof);
241
242 virtual bool input_from_terminal () const { return false; }
243
244 virtual bool input_from_file () const { return false; }
245
246 virtual bool input_from_eval_string () const { return false; }
247
248protected:
249
251
252private:
253
254 static const std::string s_in_src;
255};
256
258{
259public:
260
261 input_reader () = delete;
262
264
265 input_reader (interpreter& interp, FILE *file);
266
267 input_reader (interpreter& interp, FILE *file, const std::string& enc);
268
269 input_reader (interpreter& interp, const std::string& str);
270
271 OCTAVE_DEFAULT_COPY_DELETE (input_reader)
272
273 std::string get_input (const std::string& prompt, bool& eof)
274 {
275 return m_rep->get_input (prompt, eof);
276 }
277
278 std::string input_source () const
279 {
280 return m_rep->input_source ();
281 }
282
284 {
285 return m_rep->input_from_terminal ();
286 }
287
288 bool input_from_file () const
289 {
290 return m_rep->input_from_file ();
291 }
292
294 {
295 return m_rep->input_from_eval_string ();
296 }
297
298private:
299
300 std::shared_ptr<base_reader> m_rep;
301};
302
303OCTAVE_END_NAMESPACE(octave)
304
305#endif
virtual std::string input_source() const
Definition input.h:238
std::string octave_gets(const std::string &prompt, bool &eof)
base_reader(interpreter &interp)
Definition input.h:228
virtual std::string get_input(const std::string &prompt, bool &eof)=0
virtual bool input_from_terminal() const
Definition input.h:242
virtual bool input_from_eval_string() const
Definition input.h:246
interpreter & m_interpreter
Definition input.h:250
virtual bool input_from_file() const
Definition input.h:244
bool input_from_file() const
Definition input.h:288
std::string input_source() const
Definition input.h:278
input_reader(interpreter &interp, const std::string &str)
std::string get_input(const std::string &prompt, bool &eof)
Definition input.h:273
bool input_from_eval_string() const
Definition input.h:293
input_reader(interpreter &interp, FILE *file)
input_reader(interpreter &interp)
bool input_from_terminal() const
Definition input.h:283
input_reader(interpreter &interp, FILE *file, const std::string &enc)
input_reader()=delete
bool remove_input_event_hook(const std::string &hook_fcn_id)
octave_value auto_repeat_debug_command(const octave_value_list &args, int nargout)
char completion_append_char(char c)
Definition input.h:113
void initialize(bool line_editing)
Definition input.cc:412
std::string last_debugging_command() const
Definition input.h:93
std::string PS1(const std::string &s)
Definition input.h:71
bool yes_or_no(const std::string &prompt)
void clear_input_event_hooks()
void set_gud_mode(bool flag)
Definition input.h:133
char completion_append_char() const
Definition input.h:108
octave_value gud_mode(const octave_value_list &args, int nargout)
std::string PS2(const std::string &s)
Definition input.h:84
void set_completion_append_char(char c)
Definition input.h:120
std::string mfile_encoding(const std::string &s)
Definition input.h:139
void set_PS2(const std::string &s)
Definition input.h:91
void run_input_event_hooks()
void add_input_event_hook(const hook_function &hook_fcn)
void set_dir_encoding(const std::string &dir, std::string &enc)
octave_value completion_append_char(const octave_value_list &args, int nargout)
bool gud_mode(bool flag)
Definition input.h:126
std::string PS2() const
Definition input.h:82
bool auto_repeat_debug_command(bool val)
Definition input.h:160
void set_PS1(const std::string &s)
Definition input.h:78
octave_value_list get_user_input(const octave_value_list &args, int nargout)
octave_value PS2(const octave_value_list &args, int nargout)
std::string dir_encoding(const std::string &dir)
bool auto_repeat_debug_command() const
Definition input.h:155
std::string interactive_input(const std::string &s, bool &eof)
std::string mfile_encoding() const
Definition input.h:137
octave_value PS1(const octave_value_list &args, int nargout)
std::string PS1() const
Definition input.h:69
bool have_input_event_hooks() const
void set_mfile_encoding(const std::string &s)
Definition input.h:146
octave_value mfile_encoding(const octave_value_list &args, int nargout)
bool gud_mode() const
Definition input.h:124
std::string last_debugging_command(const std::string &s)
Definition input.h:98
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
octave::sys::time Vlast_prompt_time
Definition input.cc:82
bool Vdrawnow_requested
Definition input.cc:89
bool octave_completion_matches_called
Definition input.cc:85