From 29d8faf7fd293885c3a7e470b37eb91da219c5f1 Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Thu, 9 Nov 2023 01:46:39 +0000 Subject: [PATCH 1/3] Rename getch so we don't need undef tricks. --- src/terminal.cc | 8 ++------ src/terminal.h | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/terminal.cc b/src/terminal.cc index 92cc49b..6cef667 100644 --- a/src/terminal.cc +++ b/src/terminal.cc @@ -27,10 +27,6 @@ #include #include -#ifdef getch -#undef getch -#endif - #include "terminal.h" using std::vector; @@ -71,7 +67,7 @@ Terminal::stdin_dispatch (GSource *source, int key; do { - key = terminal_instance->getch(); + key = terminal_instance->getchar(); if (key > 0) terminal_instance->key_handler->process_input (key); @@ -177,7 +173,7 @@ Terminal::read_stdin() } int -Terminal::getch() +Terminal::getchar() { for (;;) { diff --git a/src/terminal.h b/src/terminal.h index 81898e2..bf44602 100644 --- a/src/terminal.h +++ b/src/terminal.h @@ -39,7 +39,7 @@ class Terminal static void signal_sig_cont (int); void read_stdin(); - int getch(); + int getchar(); void init_terminal(); void bind_key (const char *key, int handler); void print_term (const char *key); From e929689cc9da184509b44225bffa6b1b5ca917c5 Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Thu, 9 Nov 2023 01:48:57 +0000 Subject: [PATCH 2/3] Get terminal size on each play to catch terminal resizes. --- src/gst123.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gst123.cc b/src/gst123.cc index 2a13af8..e1e6623 100644 --- a/src/gst123.cc +++ b/src/gst123.cc @@ -365,6 +365,7 @@ struct Player : public KeyHandler { string uri = uris[play_position++]; + cols = get_columns(); overwrite_time_display(); if (is_image_file (uri)) From 8369c085e3cad6f89b91453a1b4548d8e7d13ece Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Thu, 9 Nov 2023 01:50:24 +0000 Subject: [PATCH 3/3] Move terminal reset to atexit() to catch abnormal exits. --- TODO | 1 - src/terminal.cc | 31 ++++++++++++++++++------------- src/terminal.h | 1 - 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/TODO b/TODO index cf47092..e34ba22 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ * use MicroConf to parse config file * make it possible to have vim-like seek keys (configure hjkl keyboard shortcuts to arrow keys) -- fix terminal settings after crash wishlist: - wav output with --wav foo.wav diff --git a/src/terminal.cc b/src/terminal.cc index 6cef667..3b127c6 100644 --- a/src/terminal.cc +++ b/src/terminal.cc @@ -36,6 +36,7 @@ using std::map; static char term_buffer[4096]; static char term_buffer2[4096]; static char *term_p = term_buffer2; +static struct termios tio_orig; static Terminal *terminal_instance; static GPollFD stdin_poll_fd = { 0, G_IO_IN, 0 }; @@ -57,6 +58,17 @@ stdin_check (GSource *source) return FALSE; } +static void +reset_terminal () +{ + tcsetattr(0, TCSANOW, &tio_orig); + char *ret = tgetstr ("ke", &term_p); + // disable keypad xmit + if (ret) + printf ("%s", ret); + fflush (stdout); +} + gboolean Terminal::stdin_dispatch (GSource *source, GSourceFunc callback, @@ -83,15 +95,6 @@ Terminal::signal_sig_cont (int) terminal_instance->init_terminal(); } -void -Terminal::print_term (const char *key) -{ - char *ret = tgetstr (const_cast (key), &term_p); - - if (ret) - printf ("%s", ret); -} - void Terminal::init_terminal() { @@ -105,7 +108,10 @@ Terminal::init_terminal() tcsetattr (0, TCSANOW, &tio_new); // enable keypad_xmit - print_term ("ks"); + char *ret = tgetstr ("ks", &term_p); + // disable keypad xmit + if (ret) + printf ("%s", ret); fflush (stdout); } @@ -134,6 +140,7 @@ Terminal::init (GMainLoop *loop, KeyHandler *key_handler) // initialize termios & keypad xmit init_terminal(); + atexit(reset_terminal); // initialize common keyboard escape sequences bind_key ("ku", KEY_HANDLER_UP); @@ -155,9 +162,7 @@ Terminal::init (GMainLoop *loop, KeyHandler *key_handler) void Terminal::end() { - tcsetattr(0,TCSANOW,&tio_orig); - // disable keypad xmit - print_term("ke"); + reset_terminal(); } void diff --git a/src/terminal.h b/src/terminal.h index bf44602..3fc5096 100644 --- a/src/terminal.h +++ b/src/terminal.h @@ -28,7 +28,6 @@ class Terminal { - struct termios tio_orig; std::string terminal_type; std::vector chars; std::map keys;