diff --git a/main.py b/main.py index c1940b7..2980565 100755 --- a/main.py +++ b/main.py @@ -15,6 +15,7 @@ import requests import pytz import re import os +import time from datetime import datetime try: @@ -168,19 +169,14 @@ skip_input = False current_screen = 'home' prev_screen = current_screen -c = 0 - -# highlighting: -#wattron(menu_win, A_REVERSE) -#mvwaddstr(menu_win, y, x, choices[i]) -#wattroff(menu_win, A_REVERSE) - stdscr = curses.initscr() curses.noecho() curses.cbreak() stdscr.keypad(True) curses.curs_set(0) +highlight_keys = False +highlight_debounce = time.time() sign_to_send = '' think_to_send = '' think_result = '' @@ -194,6 +190,8 @@ info_line = 0 logging.info('Starting main loop...') while True: + c = 0 + if current_screen == 'home': stdscr.addstr(0, 1, ' _______ _______ ___ _________ ___ ____ ____ _ ______ ') stdscr.addstr(1, 1, '|_ __ \|_ __ \ .\' `. | _ _ | .\' `.|_ _| |_ _|/ \ .\' ___ |') @@ -204,22 +202,29 @@ while True: stdscr.addstr(6, 1, '') stdscr.addstr(7, 1, ' UNIVERSAL COMPUTER') stdscr.addstr(8, 1, '') - stdscr.addstr(9, 4, '[I] Info') + stdscr.addstr(9, 4, '[I]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(9, 8, 'Info') stdscr.addstr(10, 1, '') - stdscr.addstr(11, 4, '[S] Stats') + stdscr.addstr(11, 4, '[S]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(11, 8, 'Stats') stdscr.addstr(12, 1, '') - stdscr.addstr(13, 4, '[N] Sign') + stdscr.addstr(13, 4, '[N]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(13, 8, 'Sign') stdscr.addstr(14, 1, '') - stdscr.addstr(15, 4, '[C] Classes') + stdscr.addstr(15, 4, '[C]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(15, 8, 'Classes') stdscr.addstr(16, 1, '') - stdscr.addstr(17, 4, '[P] Protocoin') + stdscr.addstr(17, 4, '[P]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(17, 8, 'Protocoin') stdscr.addstr(18, 1, '') if wa_api_key: - stdscr.addstr(19, 4, '[T] Think') + stdscr.addstr(19, 4, '[T]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(19, 8, 'Think') else: stdscr.addstr(19, 1, '') stdscr.addstr(20, 1, '') - stdscr.addstr(21, 4, '[A] About') + stdscr.addstr(21, 4, '[A]', curses.A_REVERSE if highlight_keys else 0) + stdscr.addstr(21, 8, 'About') stdscr.addstr(22, 1, '') stdscr.addstr(23, 1, ' Copyright (c) 1985 Bikeshed Computer Systems Corp.') stdscr.clrtoeol() @@ -231,7 +236,7 @@ while True: stdscr.addstr(5, 1, str.format('Character pressed = {0}', c)) stdscr.clrtoeol() - stdscr.addstr(23, 1, '[B] Back') + stdscr.addstr(23, 1, '[B] Back', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() stdscr.refresh() elif current_screen == 'stats': @@ -257,7 +262,7 @@ while True: else: stdscr.addstr(5, 1, 'Loading...') - stdscr.addstr(23, 1, '[B] Back') + stdscr.addstr(23, 1, '[B] Back', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() stdscr.refresh() @@ -291,7 +296,7 @@ while True: else: stdscr.addstr(5, 1, 'Loading...') - stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up') + stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() stdscr.refresh() @@ -307,7 +312,7 @@ while True: for num, line in enumerate(lines[info_line:info_line+20]): stdscr.addstr(num + offset, 1, line) - stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up') + stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() stdscr.refresh() elif current_screen == 'protocoin': @@ -343,7 +348,7 @@ while True: else: stdscr.addstr(5, 1, 'Loading...') - stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up') + stdscr.addstr(23, 1, '[B] Back [J] Down [K] Up', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() stdscr.refresh() @@ -364,7 +369,7 @@ while True: stdscr.addstr(23, 1, '[ENTER] Send [ESC] Cancel') else: stdscr.addstr(8, 4, '[E] Edit message') - stdscr.addstr(23, 1, '[B] Back') + stdscr.addstr(23, 1, '[B] Back', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() stdscr.refresh() @@ -381,7 +386,7 @@ while True: stdscr.addstr(23, 1, '[ENTER] Send [ESC] Cancel') else: stdscr.addstr(7, 4, '[E] Edit prompt') - stdscr.addstr(23, 1, '[B] Back') + stdscr.addstr(23, 1, '[B] Back', curses.A_REVERSE if highlight_keys else 0) if think_result: for _ in range(100): @@ -392,7 +397,7 @@ while True: think_result = think_result[:-5] stdscr.addstr(22, 1, '') stdscr.clrtoeol() - stdscr.addstr(23, 1, '[B] Back') + stdscr.addstr(23, 1, '[B] Back', curses.A_REVERSE if highlight_keys else 0) stdscr.clrtoeol() if not think_result and not think_to_send: @@ -423,10 +428,16 @@ while True: stdscr.addstr(18, 1, '----------------') stdscr.addstr(20, 1, 'Thanks to Peter for lending the Morrow MTD-60 terminal and Jamie for the Pi.') - stdscr.addstr(23, 1, '[B] Back') + stdscr.addstr(23, 1, '[B] Back', curses.A_REVERSE if highlight_keys else 0) + stdscr.refresh() stdscr.move(23, 79) + if highlight_keys: + time.sleep(0.5) + highlight_keys = False + continue + if skip_input: skip_input = False else: @@ -441,6 +452,12 @@ while True: except: button = None + def try_highlight(): + global c, highlight_debounce, highlight_keys + if c and time.time() - highlight_debounce > 0.6: + highlight_debounce = time.time() + highlight_keys = True + if current_screen == 'home': if button == 's': current_screen = 'stats' @@ -458,18 +475,26 @@ while True: current_screen = 'about' elif button == 'p': current_screen = 'protocoin' + else: + try_highlight() elif current_screen == 'debug': if button == 'b' or c == KEY_ESCAPE: current_screen = 'home' if button == 'x': break + else: + try_highlight() elif current_screen == 'stats': if button == 'b' or c == KEY_ESCAPE: current_screen = 'home' stats = {} + else: + try_highlight() elif current_screen == 'about': if button == 'b' or c == KEY_ESCAPE: current_screen = 'home' + else: + try_highlight() elif current_screen == 'classes': if button == 'b' or c == KEY_ESCAPE: current_screen = 'home' @@ -482,6 +507,8 @@ while True: if classes_start > 0: classes_start -= 1 stdscr.erase() + else: + try_highlight() elif current_screen == 'info': if button == 'b' or c == KEY_ESCAPE: current_screen = 'home' @@ -494,6 +521,8 @@ while True: if info_line > 0: info_line -= 19 stdscr.erase() + else: + try_highlight() elif current_screen == 'protocoin': if button == 'b' or c == KEY_ESCAPE: current_screen = 'home' @@ -506,6 +535,8 @@ while True: if protocoin_line > 0: protocoin_line -= 1 stdscr.erase() + else: + try_highlight() elif current_screen == 'sign': if sign_to_send: if c == curses.KEY_BACKSPACE: @@ -527,6 +558,8 @@ while True: current_screen = 'home' elif button == 'e': sign_to_send = '_' + else: + try_highlight() elif current_screen == 'think': if think_to_send: if c == curses.KEY_BACKSPACE: @@ -555,6 +588,8 @@ while True: think_result = '' elif button == 'e': think_to_send = '_' + else: + try_highlight() if current_screen != prev_screen: prev_screen = current_screen