#! /usr/bin/env python # -*- coding: utf-8 -*- #====================================================================== # # ncurses.py - # # Download curses pyd on windows from: # https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses # # Created by skywind on 2018/02/02 # Last change: 2018/02/02 00:11:36 # #====================================================================== from __future__ import print_function import sys import time import os import curses import curses.panel import curses.textpad #---------------------------------------------------------------------- # basic curses #---------------------------------------------------------------------- class ncurses (object): def __init__ (self): self.name = 'ncurses' self.screen = None self.guard = False def init (self): self.screen = curses.initscr() # curses.def_shell_mode() curses.noecho() curses.cbreak() self.screen.keypad(1) try: curses.start_color() except: pass return 0 def quit (self): if self.screen: self.screen.keypad(0) self.screen = None curses.echo() curses.nocbreak() curses.endwin() # curses.reset_shell_mode() return 0 def wrapper (self, main, *args, **argv): hr = 0 if not self.guard: self.init() hr = main(self.screen, *args, **argv) self.quit() else: try: self.init() hr = main(self.screen, *args, **argv) finally: self.quit() return hr #---------------------------------------------------------------------- # log out #---------------------------------------------------------------------- def plog(*args): try: now = time.strftime('%Y-%m-%d %H:%M:%S') date = now.split(None, 1)[0].replace('-', '') logfile = sys.modules[__name__].__dict__.get('logfile', None) logtime = sys.modules[__name__].__dict__.get('logtime', '') loghome = sys.modules[__name__].__dict__.get('loghome', '') if not loghome: loghome = os.getcwd() sys.modules[__name__].__dict__['loghome'] = loghome if date != logtime: logtime = date if logfile: logfile.close() logfile = None if logfile == None: logname = '%s%s.log'%('c', date) logfile = open(os.path.join(loghome, logname), 'a') sys.modules[__name__].__dict__['logtime'] = logtime sys.modules[__name__].__dict__['logfile'] = logfile def strlize(x): if isinstance(x, unicode): return x.encode("utf-8") return str(x) str_args = map(strlize, args) text = " ".join(str_args) logfile.write('[%s] %s\n'%(now, text)) logfile.flush() if 1 == 0: text = '[%s] %s\n'%(now, text) #STDOUT.write(text.decode('utf-8')) stdout.write(text) except Exception: pass return 0 #---------------------------------------------------------------------- # testing #---------------------------------------------------------------------- if __name__ == '__main__': nc = ncurses() os.environ['PDC_RESTORE_SCREEN'] = 'yes' def test1(): def main(scr): scr.border() while True: print('fuck') ch = scr.getch() if ch == ord('q'): break if ch == curses.KEY_RESIZE: y, x = scr.getmaxyx() print('resize %dx%d'%(x, y)) return 0 print('hello') nc.wrapper(main) print('end') return 0 def test2(): def main(stdscr): begin_x = 20 begin_y = 7 height = 5 width = 40 win = curses.newwin(height, width, begin_y, begin_x) tb = curses.textpad.Textbox(win) text = tb.edit() curses.addstr(4,1,text.encode('utf_8')) time.sleep(10) nc.wrapper(main) test1()