summary refs log tree commit diff
path: root/term.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--term.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/term.c b/term.c
new file mode 100644
index 0000000..c603d32
--- /dev/null
+++ b/term.c
@@ -0,0 +1,53 @@
+/* Copyright (C) 2018  Curtis McEnroe <june@causal.agency>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "chat.h"
+
+#define PAIR(a, b) (((short)(a) << 8) | ((short)(b) & 0xFF))
+
+static void privateMode(const char *mode, bool set) {
+	printf("\33[?%s%c", mode, (set ? 'h' : 'l'));
+	fflush(stdout);
+}
+
+void termMode(enum TermMode mode, bool set) {
+	switch (mode) {
+		break; case TERM_FOCUS: privateMode("1004", set);
+		break; case TERM_PASTE: privateMode("2004", set);
+	}
+}
+
+enum TermEvent termEvent(char ch) {
+	static char state = '\0';
+	switch (PAIR(state, ch)) {
+		break; case PAIR('\0', '\33'): state = '\33';
+		break; case PAIR('\33', '['):  state = '[';
+		break; case PAIR('[', 'I'):    state = '\0'; return TERM_FOCUS_IN;
+		break; case PAIR('[', 'O'):    state = '\0'; return TERM_FOCUS_OUT;
+		break; case PAIR('[', '2'):    state = '2';
+		break; case PAIR('2', '0'):    state = '0';
+		break; case PAIR('0', '0'):    state = '0';
+		break; case PAIR('0', '~'):    state = '\0'; return TERM_PASTE_START;
+		break; case PAIR('0', '1'):    state = '1';
+		break; case PAIR('1', '~'):    state = '\0'; return TERM_PASTE_END;
+		break; default:                state = '\0';
+	}
+	return TERM_NONE;
+}
class='logsubject'>Support DESTDIR in install/uninstallJune McEnroe 2021-08-26Add version number generatorJune McEnroe 2021-08-22Add ISC license headerJune McEnroe 2021-08-22Update to Linux man-pages 5.12Štěpán Němec 2021-06-21Add manuals for macOS 11.3June McEnroe 2021-05-08Update to OpenBSD 6.9June McEnroe 2021-04-26Update to Linux man-pages 5.11June McEnroe 2021-04-26Update to FreeBSD 13.0June McEnroe 2021-01-27Completely rewrite how manuals are fetched and installedJune McEnroe Also add section 6 manuals from NetBSD and OpenBSD! 2020-12-14Update to man-pages-posix 2017-aJune McEnroe 2020-12-14Update to OpenBSD 6.8June McEnroe 2020-12-14Update to NetBSD 9.1June McEnroe 2020-12-14Update to man-pages 5.09June McEnroe 2020-12-14Update to FreeBSD 12.2June McEnroe 2020-06-08Update to OpenBSD 6.7June McEnroe 2020-05-04Add hack for macOS to search extra man sectionsJune McEnroe 2020-05-04Don't clear MANSECTJune McEnroee='2019-02-23 11:42:42 -0500'>2019-02-23Call def_prog_mode after termNoFlowJune McEnroe So that the settings get restored after /url or /man. 2019-02-22Move IRC formatting reset to C-sJune McEnroe Opens C-n for window switching. 2019-02-22Disable terminal flow controlJune McEnroe This opens up C-o, C-q and C-s for key bindings without C-v. 2019-02-22Bind up and down arrows to scrollJune McEnroe Honestly it's kind of weird that IRC clients usually use these for input history. 2019-02-22Remove topic TODOJune McEnroe I played around with it and it doesn't look right unless there is only one channel listed in the status. 2019-02-22Add /znc commandJune McEnroe Only because ZNC tells you to use it and expects it to work. 2019-02-22Update status line after scrolling and term eventsJune McEnroe 2019-02-22Reorganize input.cJune McEnroe 2019-02-22Fix name of <raw> window in man pageJune McEnroe 2019-02-22Rename global tags with angle bracketsJune McEnroe 2019-02-22Show status window while connectingJune McEnroe 2019-02-22Reorganize UI code for the umpteenth timeJune McEnroe It's actually in a good state now, I think. 2019-02-21Replace "view" with "window"June McEnroe I think originally I didn't want to use the same word as curses WINDOW but it's really much clearer for the user if they're just called windows. UI code probably needs yet another rewrite though. Still feels messy. 2019-02-21Remove ROT13June McEnroe It's just not convenient when it can only do the whole line... 2019-02-21Clean up man pageJune McEnroe 2019-01-26Draw UI before connectingJune McEnroe Otherwise the "Traveling" message isn't visible while connecting. 2019-01-25Avoid unused variable warnings with getyxJune McEnroe 2019-01-25Add GNU/Linux build instructionsJune McEnroe