GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
cmd-edit.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2017 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 the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 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 <http://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  virtual ~command_editor (void) { }
67 
68  static void set_name (const std::string& n);
69 
70  static std::string readline (const std::string& prompt);
71 
72  static std::string readline (const std::string& prompt, bool& eof);
73 
74  static void set_input_stream (FILE *f);
75 
76  static FILE *get_input_stream (void);
77 
78  static void set_output_stream (FILE *f);
79 
80  static FILE *get_output_stream (void);
81 
82  static void redisplay (void);
83 
84  static int terminal_rows (void);
85 
86  static int terminal_cols (void);
87 
88  static void clear_screen (bool skip_redisplay = false);
89 
90  static void resize_terminal (void);
91 
92  static void set_screen_size (int ht, int wd);
93 
94  static std::string decode_prompt_string (const std::string& s);
95 
96  static void restore_terminal_state (void);
97 
98  static void blink_matching_paren (bool flag);
99 
100  static bool erase_empty_line (bool flag);
101 
102  static void set_basic_word_break_characters (const std::string& s);
103 
104  static void set_completer_word_break_characters (const std::string& s);
105 
106  static void set_basic_quote_characters (const std::string& s);
107 
108  static void set_filename_quote_characters (const std::string& s);
109 
110  static void set_completer_quote_characters (const std::string& s);
111 
112  static void set_completion_append_character (char c);
113 
114  static void set_completion_function (completion_fcn f);
115 
116  static void set_quoting_function (quoting_fcn f);
117 
118  static void set_dequoting_function (dequoting_fcn f);
119 
120  static void set_char_is_quoted_function (char_is_quoted_fcn f);
121 
122  static void set_user_accept_line_function (user_accept_line_fcn f);
123 
124  static completion_fcn get_completion_function (void);
125 
126  static quoting_fcn get_quoting_function (void);
127 
128  static dequoting_fcn get_dequoting_function (void);
129 
130  static char_is_quoted_fcn get_char_is_quoted_function (void);
131 
132  static user_accept_line_fcn get_user_accept_line_function (void);
133 
134  static string_vector generate_filename_completions (const std::string& text);
135 
136  static std::string get_line_buffer (void);
137 
138  static std::string get_current_line (void);
139 
140  static char get_prev_char (int);
141 
142  static void replace_line (const std::string& text, bool clear_undo = true);
143 
144  static void kill_full_line (void);
145 
146  static void insert_text (const std::string& text);
147 
148  static void newline (void);
149 
150  static void accept_line (void);
151 
152  static bool undo (void);
153 
154  static void clear_undo_list (void);
155 
156  static void add_startup_hook (startup_hook_fcn f);
157 
158  static void remove_startup_hook (startup_hook_fcn f);
159 
160  static void add_pre_input_hook (pre_input_hook_fcn f);
161 
162  static void remove_pre_input_hook (pre_input_hook_fcn f);
163 
164  static void add_event_hook (event_hook_fcn f);
165 
166  static void remove_event_hook (event_hook_fcn f);
167 
168  static void run_event_hooks (void);
169 
170  static void read_init_file (const std::string& file = "");
171 
172  static void re_read_init_file (void);
173 
174  static bool filename_completion_desired (bool);
175 
176  static bool filename_quoting_desired (bool);
177 
178  static bool prefer_env_winsize (bool);
179 
180  static bool interrupt (bool = true);
181 
182  static int current_command_number (void);
183 
184  static void reset_current_command_number (int n);
185 
186  static void increment_current_command_number (void);
187 
188  static void force_default_editor (void);
189 
190  static void set_initial_input (const std::string& text);
191 
192  static int insert_initial_input (void);
193 
194  private:
195 
196  // No copying!
197 
199 
200  command_editor& operator = (const command_editor&);
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 = 0; }
222 
223  protected:
224 
225  // To use something other than the GNU readline library, derive a new
226  // class from command_editor, overload these functions as
227  // necessary, and make instance point to the new class.
228 
229  virtual void do_set_name (const std::string&) { }
230 
231  std::string do_readline (const std::string& prompt)
232  {
233  bool eof;
234 
235  return do_readline (prompt, eof);
236  }
237 
238  virtual std::string do_readline (const std::string&, bool&) = 0;
239 
240  virtual void do_set_input_stream (FILE *) = 0;
241 
242  virtual FILE *do_get_input_stream (void) = 0;
243 
244  virtual void do_set_output_stream (FILE *) = 0;
245 
246  virtual FILE *do_get_output_stream (void) = 0;
247 
248  virtual void do_redisplay (void) { }
249 
250  virtual int do_terminal_rows (void) { return 24; }
251 
252  virtual int do_terminal_cols (void) { return 80; }
253 
254  virtual void do_clear_screen (bool) { }
255 
256  virtual void do_resize_terminal (void) { }
257 
258  virtual void do_set_screen_size (int, int) { }
259 
260  virtual std::string do_decode_prompt_string (const std::string&);
261 
262  virtual std::string newline_chars (void) { return "\n"; }
263 
264  virtual void do_restore_terminal_state (void) { }
265 
266  virtual void do_blink_matching_paren (bool) { }
267 
268  virtual bool do_erase_empty_line (bool) { return false; }
269 
270  virtual void do_set_basic_word_break_characters (const std::string&) { }
271 
272  virtual void do_set_completer_word_break_characters (const std::string&) { }
273 
274  virtual void do_set_completer_word_break_hook (completion_hook_fcn) { }
275 
276  virtual void do_set_basic_quote_characters (const std::string&) { }
277 
278  virtual void do_set_filename_quote_characters (const std::string&) { }
279 
280  virtual void do_set_completer_quote_characters (const std::string&) { }
281 
282  virtual void do_set_completion_append_character (char) { }
283 
284  virtual void do_set_completion_function (completion_fcn) { }
285 
286  virtual void do_set_quoting_function (quoting_fcn) { }
287 
288  virtual void do_set_dequoting_function (dequoting_fcn) { }
289 
290  virtual void do_set_char_is_quoted_function (char_is_quoted_fcn) { }
291 
292  virtual void do_set_user_accept_line_function (user_accept_line_fcn) { }
293 
294  virtual completion_fcn do_get_completion_function (void) const { return 0; }
295 
296  virtual quoting_fcn do_get_quoting_function (void) const { return 0; }
297 
298  virtual dequoting_fcn do_get_dequoting_function (void) const { return 0; }
299 
300  virtual char_is_quoted_fcn do_get_char_is_quoted_function (void) const
301  { return 0; }
302 
303  virtual user_accept_line_fcn do_get_user_accept_line_function (void) const
304  { return 0; }
305 
306  virtual string_vector
307  do_generate_filename_completions (const std::string& text) = 0;
308 
309  virtual std::string do_get_line_buffer (void) const = 0;
310 
311  virtual std::string do_get_current_line (void) const = 0;
312 
313  virtual char do_get_prev_char (int) const = 0;
314 
315  virtual void do_replace_line (const std::string& text, bool clear_undo) = 0;
316 
317  virtual void do_kill_full_line (void) = 0;
318 
319  virtual void do_insert_text (const std::string& text) = 0;
320 
321  virtual void do_newline (void) = 0;
322 
323  virtual void do_accept_line (void) = 0;
324 
325  virtual bool do_undo (void) { return false; }
326 
327  virtual void do_clear_undo_list (void) { }
328 
329  virtual void set_startup_hook (startup_hook_fcn) { }
330 
331  virtual void restore_startup_hook (void) { }
332 
333  virtual void set_pre_input_hook (pre_input_hook_fcn) { }
334 
335  virtual void restore_pre_input_hook (void) { }
336 
337  virtual void set_event_hook (event_hook_fcn) { }
338 
339  virtual void restore_event_hook (void) { }
340 
341  virtual void do_read_init_file (const std::string&) { }
342 
343  virtual void do_re_read_init_file (void) { }
344 
345  virtual bool do_filename_completion_desired (bool) { return false; }
346 
347  virtual bool do_filename_quoting_desired (bool) { return false; }
348 
349  virtual bool do_prefer_env_winsize (bool) { return false; }
350 
351  virtual void do_interrupt (bool) { }
352 
353  int do_insert_initial_input (void);
354 
355  int read_octal (const std::string& s);
356 
357  void error (int);
358 
359  void error (const std::string&);
360 
361  // The current command number.
363 
365 
366  std::string initial_input;
367  };
368 }
369 
370 #if defined (OCTAVE_USE_DEPRECATED_FUNCTIONS)
371 
372 OCTAVE_DEPRECATED ("use 'octave::command_editor' instead")
373 typedef octave::command_editor command_editor;
374 
375 #endif
376 
377 #endif
virtual int do_terminal_cols(void)
Definition: cmd-edit.h:252
virtual void do_set_completion_append_character(char)
Definition: cmd-edit.h:282
virtual void do_set_char_is_quoted_function(char_is_quoted_fcn)
Definition: cmd-edit.h:290
Octave interface to the compression and uncompression libraries.
Definition: aepbalance.cc:47
For example cd octave end example noindent changes the current working directory to file
Definition: dirfns.cc:120
virtual void do_clear_screen(bool)
Definition: cmd-edit.h:254
virtual dequoting_fcn do_get_dequoting_function(void) const
Definition: cmd-edit.h:298
virtual void do_set_completer_word_break_hook(completion_hook_fcn)
Definition: cmd-edit.h:274
virtual void do_set_completion_function(completion_fcn)
Definition: cmd-edit.h:284
virtual void set_startup_hook(startup_hook_fcn)
Definition: cmd-edit.h:329
virtual void do_blink_matching_paren(bool)
Definition: cmd-edit.h:266
virtual void do_clear_undo_list(void)
Definition: cmd-edit.h:327
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &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 F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE * f
virtual bool do_prefer_env_winsize(bool)
Definition: cmd-edit.h:349
virtual void do_set_user_accept_line_function(user_accept_line_fcn)
Definition: cmd-edit.h:292
static void cleanup_instance(void)
Definition: cmd-edit.h:221
virtual void restore_pre_input_hook(void)
Definition: cmd-edit.h:335
virtual quoting_fcn do_get_quoting_function(void) const
Definition: cmd-edit.h:296
void error(const char *fmt,...)
Definition: error.cc:570
virtual completion_fcn do_get_completion_function(void) const
Definition: cmd-edit.h:294
virtual void set_event_hook(event_hook_fcn)
Definition: cmd-edit.h:337
virtual void do_restore_terminal_state(void)
Definition: cmd-edit.h:264
s
Definition: file-io.cc:2682
virtual bool do_filename_completion_desired(bool)
Definition: cmd-edit.h:345
virtual void do_set_filename_quote_characters(const std::string &)
Definition: cmd-edit.h:278
virtual void set_pre_input_hook(pre_input_hook_fcn)
Definition: cmd-edit.h:333
std::string initial_input
Definition: cmd-edit.h:366
virtual void do_set_quoting_function(quoting_fcn)
Definition: cmd-edit.h:286
virtual char_is_quoted_fcn do_get_char_is_quoted_function(void) const
Definition: cmd-edit.h:300
virtual void do_set_screen_size(int, int)
Definition: cmd-edit.h:258
std::string do_readline(const std::string &prompt)
Definition: cmd-edit.h:231
virtual void restore_event_hook(void)
Definition: cmd-edit.h:339
virtual void do_interrupt(bool)
Definition: cmd-edit.h:351
virtual void do_set_basic_word_break_characters(const std::string &)
Definition: cmd-edit.h:270
virtual bool do_undo(void)
Definition: cmd-edit.h:325
virtual void restore_startup_hook(void)
Definition: cmd-edit.h:331
is false
Definition: cellfun.cc:398
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:268
virtual user_accept_line_fcn do_get_user_accept_line_function(void) const
Definition: cmd-edit.h:303
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
Definition: lu.cc:138
virtual void do_set_completer_word_break_characters(const std::string &)
Definition: cmd-edit.h:272
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:341
virtual ~command_editor(void)
Definition: cmd-edit.h:66
virtual void do_set_basic_quote_characters(const std::string &)
Definition: cmd-edit.h:276
virtual void do_resize_terminal(void)
Definition: cmd-edit.h:256
virtual int do_terminal_rows(void)
Definition: cmd-edit.h:250
virtual void do_re_read_init_file(void)
Definition: cmd-edit.h:343
virtual bool do_filename_quoting_desired(bool)
Definition: cmd-edit.h:347
virtual std::string newline_chars(void)
Definition: cmd-edit.h:262
static command_editor * instance
Definition: cmd-edit.h:219
virtual void do_set_name(const std::string &)
Definition: cmd-edit.h:229
virtual void do_redisplay(void)
Definition: cmd-edit.h:248
virtual void do_set_completer_quote_characters(const std::string &)
Definition: cmd-edit.h:280
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:854
virtual void do_set_dequoting_function(dequoting_fcn)
Definition: cmd-edit.h:288
static std::set< startup_hook_fcn > startup_hook_set
Definition: cmd-edit.h:212