#!/usr/bin/env python3 import curses,time,json dataPath = '/home/lickthecheese/nlong/nlong.json' allowedChars = " `~1234567890-=!@#$%^&*()_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:\"zxcvbnm,./ZXCVBNM<>?" data = {} def main(stdscr): stdscr.clear() stdscr.refresh() k='' height, width = stdscr.getmaxyx() vx = vy = tx = ty = 0 cx = width // 2 cy = height // 2 stdscr.move(cy,cx) while True: stdscr.clear() height, width = stdscr.getmaxyx() # detect where to move cursor if k == 'KEY_UP': cy += -1 if k == 'KEY_DOWN': cy += 1 if k == 'KEY_LEFT': cx += -1 if k == 'KEY_RIGHT': cx += 1 # enter view move mode if k == '&': stdscr.addstr(height-1, 0, 'Welcome to switch view mode. press an arrow key to move the view or a if you wanted a &'[:width-1]) k = stdscr.getkey() if k == 'a': pass # il fix this later, but in the mean time, NO & FOR YOU if k == 'KEY_UP': vy += -1 cy = height if k == 'KEY_DOWN': vy += 1 cy = 0 if k == 'KEY_LEFT': vx += -1 cx = width if k == 'KEY_RIGHT': vx += 1 cx = 0 # make sure the cursor is on the screen # this is not nessesary for the view as it is infinite cx = max(0, cx) cx = min(width-1, cx) cy = max(0, cy) cy = min(height-2, cy) # calculate true position tx = cx + (vx * width) - width // 2 ty = cy + (vy * height) - (height-1) // 2 # get json data with open(dataPath, 'r') as openfile: data = json.load(openfile) # if valid key pressed, write it if k in allowedChars: data[str((ty,tx))] = k cx = min(width-1, cx+1) with open(dataPath, 'w') as outfile: json.dump(data, outfile) # draw the screen stdscr.move(0, 0) for y in range(height-1): for x in range(width): stdscr.addstr(data.get(str((ty - cy + y,tx - cx + x)), ' ')) # display some info stdscr.addstr(height-1, 0, 'x: {}, y: {}, arrow keys to move, & key to move to the next pane'.format(tx, ty)[:width-1]) # move the cursor where its actually supposed to be stdscr.move(cy,cx) #print(k) # debug keycodes k = stdscr.getkey() if __name__ == "__main__": curses.wrapper(main) print('bye!')