#! /usr/bin/env python

from __future__ import generators
import pygame
pygame.display.init()
pygame.font.init()

font = pygame.font.Font(None, 24)

screen = pygame.display.set_mode((640,480))

try:
    enumerate
except NameError:
    def enumerate(alist):
        index = 0
        for value in iter(alist):
            yield index, value
            index += 1

press_color = (80,255,80)
release_color = (255,80,80)
quit = 0
keyvent = []

while not quit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit = 1
        elif event.type == pygame.KEYDOWN:
            keyvent.append((event.key, press_color))
        elif event.type == pygame.KEYUP:
            keyvent.append((event.key, release_color))

    keys = pygame.key.get_pressed()
    pressed = [ k for k, v in enumerate(keys) if v ]
    screen.fill((0,0,0))
    h = 0
    for k in pressed:
        name = font.render(pygame.key.name(k), 0, (255,255,255))
        screen.blit(name, (0,h))
        h += name.get_height()

    w = 0
    h = 480 - 48
    for k,c in keyvent:
        name = font.render(pygame.key.name(k), 0, c)
        screen.blit(name, (w,h))
        w += name.get_width()
    if w > 640:
        keyvent.pop(0)

    pygame.display.flip()