aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface-curses/interface.c
diff options
context:
space:
mode:
authorRobin Haberkorn <rhaberkorn@fmsbw.de>2025-11-09 19:26:37 +0100
committerRobin Haberkorn <rhaberkorn@fmsbw.de>2025-11-09 19:26:37 +0100
commit5d7e8df952b2e51c28fad3443d7c9973659fc2ed (patch)
tree65db863c7cc409159532ea22cceb4fec34df1db8 /src/interface-curses/interface.c
parent6e9e09b7d23fcc300dc469c1f410e53d0a111bfa (diff)
allow configuring the command line height using h,5EJ
* This allows for several customizations. * You can simply increase the visible command line history. For that you must also set SCI_SETWRAPMODE(SC_WRAP_CHAR). An example was added to fallback.teco_ini. * You could also set SCI_SETLINEENDTYPESALLOWED(SC_LINE_END_TYPE_DEFAULT) to see the structure of inserted text. * Alternatively we could have introduced a new command like EP or FW and also overload it to replace the current ED&2048 (e.g. -EP and EP). In DEC TECO `W` comes closest to what 5EJ now does.
Diffstat (limited to 'src/interface-curses/interface.c')
-rw-r--r--src/interface-curses/interface.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/interface-curses/interface.c b/src/interface-curses/interface.c
index 2effdb6..ed376c2 100644
--- a/src/interface-curses/interface.c
+++ b/src/interface-curses/interface.c
@@ -772,11 +772,12 @@ teco_interface_init_interactive(GError **error)
leaveok(stdscr, TRUE);
teco_interface.info_window = newwin(1, 0, 0, 0);
- teco_interface.msg_window = newwin(1, 0, LINES - 2, 0);
+ teco_interface.msg_window = newwin(1, 0, LINES - teco_cmdline.height - 1, 0);
- wresize(teco_view_get_window(teco_cmdline.view), 1, COLS);
- mvwin(teco_view_get_window(teco_cmdline.view), LINES - 1, 0);
- teco_cmdline_resize(COLS);
+ WINDOW *cmdline_win = teco_view_get_window(teco_cmdline.view);
+ wresize(cmdline_win, teco_cmdline.height, COLS);
+ mvwin(cmdline_win, LINES - teco_cmdline.height, 0);
+ teco_cmdline_resized(COLS);
teco_interface.input_pad = newpad(1, 1);
/*
@@ -881,13 +882,14 @@ teco_interface_resize_all_windows(void)
{
wresize(teco_interface.info_window, 1, COLS);
wresize(teco_view_get_window(teco_interface_current_view),
- LINES - 3, COLS);
+ LINES - 2 - teco_cmdline.height, COLS);
wresize(teco_interface.msg_window, 1, COLS);
- mvwin(teco_interface.msg_window, LINES - 2, 0);
+ mvwin(teco_interface.msg_window, LINES - 1 - teco_cmdline.height, 0);
- wresize(teco_view_get_window(teco_cmdline.view), 1, COLS);
- mvwin(teco_view_get_window(teco_cmdline.view), LINES - 1, 0);
- teco_cmdline_resize(COLS);
+ WINDOW *cmdline_win = teco_view_get_window(teco_cmdline.view);
+ wresize(cmdline_win, teco_cmdline.height, COLS);
+ mvwin(cmdline_win, LINES - teco_cmdline.height, 0);
+ teco_cmdline_resized(COLS);
teco_interface_draw_info();
teco_interface_msg_clear(); /* FIXME: use saved message */
@@ -1009,7 +1011,7 @@ teco_interface_show_view(teco_view_t *view)
* screen size might have changed since
* this view's WINDOW was last active
*/
- wresize(current_view_win, LINES - 3, COLS);
+ wresize(current_view_win, LINES - 2 - teco_cmdline.height, COLS);
/* Set up window position: never changes */
mvwin(current_view_win, 1, 0);
}
@@ -2027,6 +2029,7 @@ teco_interface_event_loop_iter(void)
const teco_view_t *last_view = teco_interface_current_view;
sptr_t last_vpos = teco_interface_ssm(SCI_GETFIRSTVISIBLELINE, 0, 0);
+ guint last_cmdline_height = teco_cmdline.height;
switch (key) {
case ERR:
@@ -2153,6 +2156,10 @@ teco_interface_event_loop_iter(void)
}
}
+ if (G_UNLIKELY(teco_cmdline.height != last_cmdline_height))
+ /* command line height was changed with h,5EJ */
+ teco_interface_resize_all_windows();
+
/*
* Scintilla has been patched to avoid any automatic scrolling since that
* has been benchmarked to be a very costly operation.