From c24320b65ab02061223a7460a01360bd997f9e18 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Sun, 17 Aug 2025 00:13:56 +0200 Subject: ui: Start with some CSI commands (xterm compat) --- src/ui.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ui.h | 20 ++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/ui.c create mode 100644 src/ui.h (limited to 'src') diff --git a/src/ui.c b/src/ui.c new file mode 100644 index 0000000..e4fc35b --- /dev/null +++ b/src/ui.c @@ -0,0 +1,74 @@ +/* parc + * Copyright (C) 2025 Ekaitz Zarraga + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * XTERM escape sequence reference: + * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html + */ + +#include + +#define ESC '\x1b' + +const char CSI_LEAD[3] = { ESC, '[', '\0'}; + +void +ui_cursor_move (int x, int y) +{ + /* + * Also valid with CSI;f being and line number and column + * number respectively. In ttys, cursor starts at 1,1 + */ + printf ("%s%d;%dH", CSI_LEAD, y, x); + fflush (stdout); +} + +void +ui_cursor_show (void) +{ + printf ("%s?25h", CSI_LEAD); + fflush (stdout); +} + +void +ui_cursor_hide (void) +{ + printf ("%s?25l", CSI_LEAD); + fflush (stdout); +} + +void +ui_screen_erase (void) +{ + printf ("%s2J", CSI_LEAD); + fflush (stdout); +} + + +void +ui_alternate_buffer_enable (void) +{ + printf ("%s?1049h", CSI_LEAD); + fflush (stdout); +} + +void +ui_alternate_buffer_disable (void) +{ + printf ("%s?1049l", CSI_LEAD); + fflush (stdout); +} diff --git a/src/ui.h b/src/ui.h new file mode 100644 index 0000000..3e2bd00 --- /dev/null +++ b/src/ui.h @@ -0,0 +1,20 @@ +/* parc + * Copyright (C) 2025 Ekaitz Zarraga + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +void ui_cursor_move (int x, int y); + +void ui_alternate_buffer_enable (void); +void ui_alternate_buffer_disable (void); -- cgit v1.2.3