# HG changeset patch # User John W. Eaton # Date 1365696164 14400 # Node ID d3b01ae21259d3f57fd233b727a065cd18a6045c # Parent b98ad20e48802d5699dbcb5394d4797552441013 temporary fix for terminal window resizing * input.cc (octave_base_reader::octave_gets): Call command_editor::reset_screen_size. * cmd-edit.h, cmd-edit.cc (command_editor::reset_screen_size, command_editor::do_reset_screen_size, gnu_readline::do_reset_screen_size): New functions. * oct-rl-edit.h, oct-rl-edit.c (octave_rl_reset_screen_size): New function. diff --git a/libinterp/interpfcn/input.cc b/libinterp/interpfcn/input.cc --- a/libinterp/interpfcn/input.cc +++ b/libinterp/interpfcn/input.cc @@ -220,6 +220,10 @@ octave_link::pre_input_event (); octave_link::set_workspace (symbol_table::workspace_info ()); + + // FIXME -- this call should happen any time the terminal window + // size changes, not just prior to prompting for input. + command_editor::reset_screen_size (); } bool history_skip_auto_repeated_debugging_command = false; diff --git a/liboctave/util/cmd-edit.cc b/liboctave/util/cmd-edit.cc --- a/liboctave/util/cmd-edit.cc +++ b/liboctave/util/cmd-edit.cc @@ -95,6 +95,8 @@ void do_resize_terminal (void); + void do_reset_screen_size (void); + std::string newline_chars (void); void do_restore_terminal_state (void); @@ -331,6 +333,12 @@ ::octave_rl_resize_terminal (); } +void +gnu_readline::do_reset_screen_size (void) +{ + ::octave_rl_reset_screen_size (); +} + std::string gnu_readline::newline_chars (void) { @@ -994,6 +1002,13 @@ instance->do_resize_terminal (); } +void +command_editor::reset_screen_size (void) +{ + if (instance_ok ()) + instance->do_reset_screen_size (); +} + std::string command_editor::decode_prompt_string (const std::string& s) { diff --git a/liboctave/util/cmd-edit.h b/liboctave/util/cmd-edit.h --- a/liboctave/util/cmd-edit.h +++ b/liboctave/util/cmd-edit.h @@ -79,6 +79,8 @@ static void resize_terminal (void); + static void reset_screen_size (void); + static std::string decode_prompt_string (const std::string& s); static void restore_terminal_state (void); @@ -221,6 +223,8 @@ virtual void do_resize_terminal (void) { } + virtual void do_reset_screen_size (void) { } + virtual std::string do_decode_prompt_string (const std::string&); virtual std::string newline_chars (void) { return "\n"; } diff --git a/liboctave/util/oct-rl-edit.c b/liboctave/util/oct-rl-edit.c --- a/liboctave/util/oct-rl-edit.c +++ b/liboctave/util/oct-rl-edit.c @@ -111,6 +111,12 @@ } void +octave_rl_reset_screen_size (void) +{ + rl_reset_screen_size (); +} + +void octave_rl_restore_terminal_state () { if (rl_deprep_term_function) diff --git a/liboctave/util/oct-rl-edit.h b/liboctave/util/oct-rl-edit.h --- a/liboctave/util/oct-rl-edit.h +++ b/liboctave/util/oct-rl-edit.h @@ -60,6 +60,8 @@ extern void octave_rl_resize_terminal (void); +extern void octave_rl_reset_screen_size (void); + extern void octave_rl_restore_terminal_state (void); extern void octave_rl_insert_text (const char *);