Skip to content

Instantly share code, notes, and snippets.

@vcidst
Last active December 9, 2017 07:52
Show Gist options
  • Select an option

  • Save vcidst/5e583741ab50f7d28fb928b96cd995e1 to your computer and use it in GitHub Desktop.

Select an option

Save vcidst/5e583741ab50f7d28fb928b96cd995e1 to your computer and use it in GitHub Desktop.

Revisions

  1. vcidst revised this gist Apr 7, 2017. No changes.
  2. vcidst revised this gist Apr 7, 2017. No changes.
  3. vcidst created this gist Apr 7, 2017.
    88 changes: 88 additions & 0 deletions quotesOnCurses.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,88 @@
    # This gist is transcribed from a talk by Sean Zicari
    # Talk: Use Curses, don't swear https://www.youtube.com/watch?v=eN1eZtjLEnU
    #
    # I haven't written the function which he used to fetch quotes from the web
    # This only presents the barebones structure of his application
    #
    # If debugging a curses application messes up your terminal, type `tset` to reset terminal

    import curses

    stdscr = curses.initscr()

    # initialize the screen
    curses.noecho()
    curses.cbreak()
    curses.curs_set(0)

    # check and begin color support
    if curses.has_colors():
    curses.start_color()

    # optionally enable the keypad
    # stdscr.keypad(1)

    # initialize color combinations
    curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK)
    curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK)
    curses.init_pair(3, curses.COLOR_BLUE, curses.COLOR_BLACK)
    # if your terminal supports colors, any number from 0-255 can be used in place of colors

    # begin program
    stdscr.addstr("RANDOM QUOTES", curses.A_REVERSE)
    stdscr.chgat(-1, curses.A_REVERSE)

    # curses.LINES and curses.COLS contain height and width of screen
    # adds string at coordinate (curses.LINES-1, 0)
    stdscr.addstr(curses.LINES-1, 0, "Press Q to watch me not obey")

    # Change the R to green
    stdscr.chgat(curses.LINES-1, 7, 1, curses.A_BOLD | curses.color_pair(2))

    # Set up the window to hold the random quotes
    quote_window = curses.newwin(curses.LINES-2, curses.COLS, 1,0)
    # curses.LINES-2 and curses.COLS are the height and width of new window (rectangle)
    # (1,0) is where it starts from

    # create a sub-window for visibility
    quote_text_window = quote_window.subwin(curses.LINES-6, curses.COLS-4, 3, 2)

    # without coordiates, addstr() adds string to whereever pointer is (which is beginning, in this case)
    quote_text_window.addstr("Press R to watch yourself burn")

    # draw a border around main window
    quote_window.box()

    # update the internal window data structure
    stdscr.noutrefresh()
    quote_window.noutrefresh()

    # redraw the screen
    curses.doupdate()

    # create an event loop
    while True:
    c = quote_window.getch()
    if c == ord('r') or c == ord('R'):
    quote_text_window.clear()
    quote_text_window.addstr("I'm just a terminal screen, I can't really do anything...", curses.color_pair(3))
    quote_text_window.refresh()
    quote_text_window.clear()
    quote_text_window.addstr("There's so much happening all the time")
    elif c == ord('q') or c == ord('Q'):
    break

    # refresh the windows from the bottom up
    stdscr.noutrefresh()
    quote_window.noutrefresh()
    quote_text_window.noutrefresh()
    curses.doupdate()

    # Restore the terminal settings
    curses.nocbreak()
    #stdscr.keypad(0)
    curses.echo()
    curses.curs_set(1)

    # restore terminal
    curses.endwin()