GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
cmd-edit.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2018 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software: you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <https://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if ! defined (octave_cmd_edit_h)
24 #define octave_cmd_edit_h 1
25 
26 #include "octave-config.h"
27 
28 #include <cstdio>
29 
30 #include <set>
31 #include <string>
32 
33 #include "str-vec.h"
34 
35 namespace octave
36 {
37  class
38  OCTAVE_API
40  {
41  protected:
42 
44  : command_number (0), interrupted (false), initial_input () { }
45 
46  public:
47 
48  typedef int (*startup_hook_fcn) (void);
49 
50  typedef int (*pre_input_hook_fcn) (void);
51 
52  typedef int (*event_hook_fcn) (void);
53 
54  typedef std::string (*completion_fcn) (const std::string&, int);
55 
56  typedef char * (*completion_hook_fcn) ();
57 
58  typedef std::string (*quoting_fcn) (const std::string&, int, char);
59 
60  typedef std::string (*dequoting_fcn) (const std::string&, int);
61 
62  typedef int (*char_is_quoted_fcn) (const std::string&, int);
63 
64  typedef void (*user_accept_line_fcn) (const std::string&);
65 
66  // No copying!
67 
68  command_editor (const command_editor&) = delete;
69 
70  command_editor& operator = (const command_editor&) = delete;
71 
72  virtual ~command_editor (void) = default;
73 
74  static void set_name (const std::string& n);
75 
76  static std::string readline (const std::string& prompt);
77 
78  static std::string readline (const std::string& prompt, bool& eof);
79 
80  static void set_input_stream (FILE *f);
81 
82  static FILE * get_input_stream (void);
83 
84  static void set_output_stream (FILE *f);
85 
86  static FILE * get_output_stream (void);
87 
88  static void redisplay (void);
89 
90  static int terminal_rows (void);
91 
92  static int terminal_cols (void);
93 
94  static void clear_screen (bool skip_redisplay = false);
95 
96  static void resize_terminal (void);
97 
98  static void set_screen_size (int ht, int wd);
99 
100  static std::string decode_prompt_string (const std::string& s);
101 
102  static void restore_terminal_state (void);
103 
104  static void blink_matching_paren (bool flag);
105 
106  static bool erase_empty_line (bool flag);
107 
108  static void set_basic_word_break_characters (const std::string& s);
109 
110  static void set_completer_word_break_characters (const std::string& s);
111 
112  static void set_basic_quote_characters (const std::string& s);
113 
114  static void set_filename_quote_characters (const std::string& s);
115 
116  static void set_completer_quote_characters (const std::string& s);
117 
118  static void set_completion_append_character (char c);
119 
120  static void set_completion_function (completion_fcn f);
121 
122  static void set_quoting_function (quoting_fcn f);
123 
124  static void set_dequoting_function (dequoting_fcn f);
125 
126  static void set_char_is_quoted_function (char_is_quoted_fcn f);
127 
128  static void set_user_accept_line_function (user_accept_line_fcn f);
129 
130  static completion_fcn get_completion_function (void);
131 
132  static quoting_fcn get_quoting_function (void);
133 
134  static dequoting_fcn get_dequoting_function (void);
135 
136  static char_is_quoted_fcn get_char_is_quoted_function (void);
137 
138  static user_accept_line_fcn get_user_accept_line_function (void);
139 
140  static string_vector generate_filename_completions (const std::string& text);
141 
142  static std::string get_line_buffer (void);
143 
144  static std::string get_current_line (void);
145 
146  static char get_prev_char (int);
147 
148  static void replace_line (const std::string& text, bool clear_undo = true);
149 
150  static void kill_full_line (void);
151 
152  static void insert_text (const std::string& text);
153 
154  static void newline (void);
155 
156  static void accept_line (void);
157 
158  static bool undo (void);
159 
160  static void clear_undo_list (void);
161 
162  static void add_startup_hook (startup_hook_fcn f);
163 
164  static void remove_startup_hook (startup_hook_fcn f);
165 
166  static void add_pre_input_hook (pre_input_hook_fcn f);
167 
168  static void remove_pre_input_hook (pre_input_hook_fcn f);
169 
170  static void add_event_hook (event_hook_fcn f);
171 
172  static void remove_event_hook (event_hook_fcn f);
173 
174  static void run_event_hooks (void);
175 
176  static void read_init_file (const std::string& file = "");
177 
178  static void re_read_init_file (void);
179 
180  static bool filename_completion_desired (bool);
181 
182  static bool filename_quoting_desired (bool);
183 
184  static bool prefer_env_winsize (bool);
185 
186  static bool interrupt (bool = true);
187 
188  static int current_command_number (void);
189 
190  static void reset_current_command_number (int n);
191 
192  static void increment_current_command_number (void);
193 
194  static void force_default_editor (void);
195 
196  static void set_initial_input (const std::string& text);
197 
198  static int insert_initial_input (void);
199 
200  private:
201 
202  static bool instance_ok (void);
203 
204  static void make_command_editor (void);
205 
206  static int startup_handler (void);
207 
208  static int pre_input_handler (void);
209 
210  static int event_handler (void);
211 
212  static std::set<startup_hook_fcn> startup_hook_set;
213 
214  static std::set<pre_input_hook_fcn> pre_input_hook_set;
215 
216  static std::set<event_hook_fcn> event_hook_set;
217 
218  // The real thing.
220 
221  static void cleanup_instance (void) { delete instance; instance = nullptr; }
222 
223  static void handle_interrupt_signal (void);
224 
225  protected:
226 
227  // To use something other than the GNU readline library, derive a new
228  // class from command_editor, overload these functions as
229  // necessary, and make instance point to the new class.
230 
231  virtual void do_set_name (const std::string&) { }
232 
234  {
235  bool eof;
236 
237  return do_readline (prompt, eof);
238  }
239 
240  virtual std::string do_readline (const std::string&, bool&) = 0;
241 
242  virtual void do_set_input_stream (FILE *) = 0;
243 
244  virtual FILE * do_get_input_stream (void) = 0;
245 
246  virtual void do_set_output_stream (FILE *) = 0;
247 
248  virtual FILE * do_get_output_stream (void) = 0;
249 
250  virtual void do_redisplay (void) { }
251 
252  virtual int do_terminal_rows (void) { return 24; }
253 
254  virtual int do_terminal_cols (void) { return 80; }
255 
256  virtual void do_clear_screen (bool) { }
257 
258  virtual void do_resize_terminal (void) { }
259 
260  virtual void do_set_screen_size (int, int) { }
261 
262  virtual std::string do_decode_prompt_string (const std::string&);
263 
264  virtual std::string newline_chars (void) { return "\n"; }
265 
266  virtual void do_restore_terminal_state (void) { }
267 
268  virtual void do_blink_matching_paren (bool) { }
269 
270  virtual bool do_erase_empty_line (bool) { return false; }
271 
273 
275 
276  virtual void do_set_completer_word_break_hook (completion_hook_fcn) { }
277 
278  virtual void do_set_basic_quote_characters (const std::string&) { }
279 
281 
283 
284  virtual void do_set_completion_append_character (char) { }
285 
286  virtual void do_set_completion_function (completion_fcn) { }
287 
288  virtual void do_set_quoting_function (quoting_fcn) { }
289 
290  virtual void do_set_dequoting_function (dequoting_fcn) { }
291 
292  virtual void do_set_char_is_quoted_function (char_is_quoted_fcn) { }
293 
294  virtual void do_set_user_accept_line_function (user_accept_line_fcn) { }
295 
296  virtual completion_fcn do_get_completion_function (void) const { return nullptr; }
297 
298  virtual quoting_fcn do_get_quoting_function (void) const { return nullptr; }
299 
300  virtual dequoting_fcn do_get_dequoting_function (void) const { return nullptr; }
301 
302  virtual char_is_quoted_fcn do_get_char_is_quoted_function (void) const
303  { return nullptr; }
304 
305  virtual user_accept_line_fcn do_get_user_accept_line_function (void) const
306  { return nullptr; }
307 
308  virtual string_vector
309  do_generate_filename_completions (const std::string& text) = 0;
310 
311  virtual std::string do_get_line_buffer (void) const = 0;
312 
313  virtual std::string do_get_current_line (void) const = 0;
314 
315  virtual char do_get_prev_char (int) const = 0;
316 
317  virtual void do_replace_line (const std::string& text, bool clear_undo) = 0;
318 
319  virtual void do_kill_full_line (void) = 0;
320 
321  virtual void do_insert_text (const std::string& text) = 0;
322 
323  virtual void do_newline (void) = 0;
324 
325  virtual void do_accept_line (void) = 0;
326 
327  virtual bool do_undo (void) { return false; }
328 
329  virtual void do_clear_undo_list (void) { }
330 
331  virtual void set_startup_hook (startup_hook_fcn) { }
332 
333  virtual void restore_startup_hook (void) { }
334 
335  virtual void set_pre_input_hook (pre_input_hook_fcn) { }
336 
337  virtual void restore_pre_input_hook (void) { }
338 
339  virtual void set_event_hook (event_hook_fcn) { }
340 
341  virtual void restore_event_hook (void) { }
342 
343  virtual void do_read_init_file (const std::string&) { }
344 
345  virtual void do_re_read_init_file (void) { }
346 
347  virtual bool do_filename_completion_desired (bool) { return false; }
348 
349  virtual bool do_filename_quoting_desired (bool) { return false; }
350 
351  virtual bool do_prefer_env_winsize (bool) { return false; }
352 
353  virtual void do_interrupt (bool) { }
354 
355  virtual void do_handle_interrupt_signal (void) { }
356 
357  int do_insert_initial_input (void);
358 
359  int read_octal (const std::string& s);
360 
361  void error (int);
362 
363  void error (const std::string&);
364 
365  // The current command number.
367 
369 
371  };
372 }
373 
374 #if defined (OCTAVE_USE_DEPRECATED_FUNCTIONS)
375 
376 OCTAVE_DEPRECATED (4.2, "use 'octave::command_editor' instead")
377 typedef octave::command_editor command_editor;
378 
379 #endif
380 
381 #endif
virtual int do_terminal_cols(void)
Definition: cmd-edit.h:254
virtual void do_set_completion_append_character(char)
Definition: cmd-edit.h:284
virtual void do_set_char_is_quoted_function(char_is_quoted_fcn)
Definition: cmd-edit.h:292
For example cd octave end example noindent changes the current working directory to file
Definition: dirfns.cc:124
virtual void do_clear_screen(bool)
Definition: cmd-edit.h:256
virtual quoting_fcn do_get_quoting_function(void) const
Definition: cmd-edit.h:298
virtual void do_set_completer_word_break_hook(completion_hook_fcn)
Definition: cmd-edit.h:276
virtual void do_set_completion_function(completion_fcn)
Definition: cmd-edit.h:286
virtual void set_startup_hook(startup_hook_fcn)
Definition: cmd-edit.h:331
virtual void do_blink_matching_paren(bool)
Definition: cmd-edit.h:268
virtual void do_clear_undo_list(void)
Definition: cmd-edit.h:329
virtual char_is_quoted_fcn do_get_char_is_quoted_function(void) const
Definition: cmd-edit.h:302
F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE * f
virtual bool do_prefer_env_winsize(bool)
Definition: cmd-edit.h:351
virtual void do_set_user_accept_line_function(user_accept_line_fcn)
Definition: cmd-edit.h:294
static void cleanup_instance(void)
Definition: cmd-edit.h:221
virtual void restore_pre_input_hook(void)
Definition: cmd-edit.h:337
void error(const char *fmt,...)
Definition: error.cc:578
virtual void set_event_hook(event_hook_fcn)
Definition: cmd-edit.h:339
virtual void do_restore_terminal_state(void)
Definition: cmd-edit.h:266
nd example oindent opens the file binary numeric values will be read assuming they are stored in IEEE format with the least significant bit and then converted to the native representation Opening a file that is already open simply opens it again and returns a separate file id It is not an error to open a file several though writing to the same file through several different file ids may produce unexpected results The possible values of text mode reading and writing automatically converts linefeeds to the appropriate line end character for the you may append a you must also open the file in binary mode The parameter conversions are currently only supported for and permissions will be set to and then everything is written in a single operation This is very efficient and improves performance c
Definition: file-io.cc:587
s
Definition: file-io.cc:2729
virtual bool do_filename_completion_desired(bool)
Definition: cmd-edit.h:347
virtual void do_set_filename_quote_characters(const std::string &)
Definition: cmd-edit.h:280
virtual dequoting_fcn do_get_dequoting_function(void) const
Definition: cmd-edit.h:300
virtual void set_pre_input_hook(pre_input_hook_fcn)
Definition: cmd-edit.h:335
std::string initial_input
Definition: cmd-edit.h:370
virtual void do_set_quoting_function(quoting_fcn)
Definition: cmd-edit.h:288
virtual user_accept_line_fcn do_get_user_accept_line_function(void) const
Definition: cmd-edit.h:305
virtual void do_set_screen_size(int, int)
Definition: cmd-edit.h:260
std::string do_readline(const std::string &prompt)
Definition: cmd-edit.h:233
virtual void restore_event_hook(void)
Definition: cmd-edit.h:341
virtual void do_interrupt(bool)
Definition: cmd-edit.h:353
virtual void do_set_basic_word_break_characters(const std::string &)
Definition: cmd-edit.h:272
virtual bool do_undo(void)
Definition: cmd-edit.h:327
virtual void restore_startup_hook(void)
Definition: cmd-edit.h:333
is false
Definition: cellfun.cc:400
static std::set< pre_input_hook_fcn > pre_input_hook_set
Definition: cmd-edit.h:214
virtual bool do_erase_empty_line(bool)
Definition: cmd-edit.h:270
virtual completion_fcn do_get_completion_function(void) const
Definition: cmd-edit.h:296
virtual void do_set_completer_word_break_characters(const std::string &)
Definition: cmd-edit.h:274
static std::set< event_hook_fcn > event_hook_set
Definition: cmd-edit.h:216
virtual void do_read_init_file(const std::string &)
Definition: cmd-edit.h:343
virtual void do_set_basic_quote_characters(const std::string &)
Definition: cmd-edit.h:278
virtual void do_resize_terminal(void)
Definition: cmd-edit.h:258
virtual int do_terminal_rows(void)
Definition: cmd-edit.h:252
virtual void do_re_read_init_file(void)
Definition: cmd-edit.h:345
virtual void do_handle_interrupt_signal(void)
Definition: cmd-edit.h:355
virtual bool do_filename_quoting_desired(bool)
Definition: cmd-edit.h:349
virtual std::string newline_chars(void)
Definition: cmd-edit.h:264
static command_editor * instance
Definition: cmd-edit.h:219
virtual void do_set_name(const std::string &)
Definition: cmd-edit.h:231
virtual void do_redisplay(void)
Definition: cmd-edit.h:250
virtual void do_set_completer_quote_characters(const std::string &)
Definition: cmd-edit.h:282
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:888
virtual void do_set_dequoting_function(dequoting_fcn)
Definition: cmd-edit.h:290
static std::set< startup_hook_fcn > startup_hook_set
Definition: cmd-edit.h:212