diff options
Diffstat (limited to 'ui.c')
-rw-r--r-- | ui.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/ui.c b/ui.c index cc7dcf8..937fa63 100644 --- a/ui.c +++ b/ui.c @@ -20,6 +20,7 @@ #include <err.h> #include <locale.h> #include <stdarg.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -39,6 +40,15 @@ #define A_ITALIC A_NORMAL #endif +static void focusEnable(void) { + printf("\33[?1004h"); + fflush(stdout); +} +static void focusDisable(void) { + printf("\33[?1004l"); + fflush(stdout); +} + static void colorInit(void) { start_color(); use_default_colors(); @@ -98,6 +108,7 @@ void uiInit(void) { cbreak(); noecho(); + focusEnable(); colorInit(); ui.topic = newpad(2, TOPIC_COLS); @@ -123,6 +134,7 @@ static void uiResize(void) { } void uiHide(void) { + focusDisable(); endwin(); printf( "This program is AGPLv3 free software!\n" @@ -427,6 +439,17 @@ static void complete(void) { } static void keyChar(wint_t ch) { + static bool esc, csi; + + if (csi) { + csi = false; + if (ch == L'O') logMark(); + return; + } + csi = (esc && ch == L'['); + esc = (ch == L'\33'); + if (csi) return; + switch (ch) { break; case CTRL('L'): uiRedraw(); break; case CTRL('B'): reject(); left(); |