diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+5.22
+ - Added Graphics.Vty.Attributes.Color240.color240CodeToRGB function
+   (thanks Brent Carmer)
+ - Added nextEventNonblocking function (field) to Vty type (#87)
+
 5.21
  - Picture and Background now provide Eq instances (thanks Jaro Reinders)
  - #145: vty builds with microlens 0.4.9 (thanks Daniel Wagner)
diff --git a/src/Graphics/Vty.hs b/src/Graphics/Vty.hs
--- a/src/Graphics/Vty.hs
+++ b/src/Graphics/Vty.hs
@@ -78,18 +78,17 @@
 data Vty = Vty
     { -- | Outputs the given 'Picture'.
       update :: Picture -> IO ()
-      -- | Get one 'Event' object, blocking if none are available. This
-      -- will refresh the terminal if the event is a 'EvResize'.
+      -- | Return the next 'Event' or block until one becomes available.
     , nextEvent :: IO Event
+      -- | Non-blocking version of 'nextEvent'.
+    , nextEventNonblocking :: IO (Maybe Event)
       -- | The input interface. See 'Input'.
     , inputIface :: Input
       -- | The output interface. See 'Output'.
     , outputIface :: Output
-      -- | Refresh the display. 'nextEvent' will refresh the display if
-      -- a resize occurs, but this can be used to refresh the display
-      -- explicitly. If other programs output to the terminal and mess
-      -- up the display then the application might want to force a
-      -- refresh using this function.
+      -- | Refresh the display. If other programs output to the terminal
+      -- and mess up the display then the application might want to
+      -- force a refresh using this function.
     , refresh :: IO ()
       -- | Clean up after vty. A call to this function is necessary to
       -- cleanly restore the terminal state before application exit. The
@@ -151,14 +150,21 @@
             mPic <- readIORef lastPicRef
             maybe (return ()) innerUpdate mPic
 
-    let gkey = do k <- atomically $ readTChan $ _eventChannel input
-                  case k of
-                    (EvResize _ _)  -> displayBounds out
-                                       >>= return . (\(w,h)-> EvResize w h)
-                    _               -> return k
+    let mkResize = uncurry EvResize <$> displayBounds out
+        gkey = do
+            k <- atomically $ readTChan $ _eventChannel input
+            case k of
+                (EvResize _ _)  -> mkResize
+                _ -> return k
+        gkey' = do
+            k <- atomically $ tryReadTChan $ _eventChannel input
+            case k of
+                (Just (EvResize _ _))  -> Just <$> mkResize
+                _ -> return k
 
     return $ Vty { update = innerUpdate
                  , nextEvent = gkey
+                 , nextEventNonblocking = gkey'
                  , inputIface = input
                  , outputIface = out
                  , refresh = innerRefresh
diff --git a/src/Graphics/Vty/Attributes/Color240.hs b/src/Graphics/Vty/Attributes/Color240.hs
--- a/src/Graphics/Vty/Attributes/Color240.hs
+++ b/src/Graphics/Vty/Attributes/Color240.hs
@@ -1,17 +1,21 @@
 -- This header file was generated by ./256colres.pl
 module Graphics.Vty.Attributes.Color240
   ( rgbColor
+  , color240CodeToRGB
   )
 where
 
 import Graphics.Vty.Attributes.Color
 
+import Data.Word (Word8)
 import Text.Printf
 
 -- Note: rgbColor's mapping from RGB to 240 colors was generated from
 -- 256colres.pl which is forked from xterm 256colres.pl.
 
 -- | Create a Vty 'Color' (in the 240 color set) from an RGB triple.
+-- This function is lossy in the sense that we only internally support 240 colors but the
+-- #RRGGBB format supports 16^3 colors.
 rgbColor :: Integral i => i -> i -> i -> Color
 rgbColor r g b
     | r < 0 && g < 0 && b < 0 = error "rgbColor with negative color component intensity"
@@ -259,3 +263,248 @@
                                 (fromIntegral r :: Int)
                                 (fromIntegral g :: Int)
                                 (fromIntegral b :: Int))
+
+-- | Create a RGB triple from a value in the Color240 set.
+color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int)
+color240CodeToRGB n = case n of
+    0 -> Just (0, 0, 0)
+    1 -> Just (0, 0, 95)
+    2 -> Just (0, 0, 135)
+    3 -> Just (0, 0, 175)
+    4 -> Just (0, 0, 215)
+    5 -> Just (0, 0, 255)
+    6 -> Just (0, 95, 0)
+    7 -> Just (0, 95, 95)
+    8 -> Just (0, 95, 135)
+    9 -> Just (0, 95, 175)
+    10 -> Just (0, 95, 215)
+    11 -> Just (0, 95, 255)
+    12 -> Just (0, 135, 0)
+    13 -> Just (0, 135, 95)
+    14 -> Just (0, 135, 135)
+    15 -> Just (0, 135, 175)
+    16 -> Just (0, 135, 215)
+    17 -> Just (0, 135, 255)
+    18 -> Just (0, 175, 0)
+    19 -> Just (0, 175, 95)
+    20 -> Just (0, 175, 135)
+    21 -> Just (0, 175, 175)
+    22 -> Just (0, 175, 215)
+    23 -> Just (0, 175, 255)
+    24 -> Just (0, 215, 0)
+    25 -> Just (0, 215, 95)
+    26 -> Just (0, 215, 135)
+    27 -> Just (0, 215, 175)
+    28 -> Just (0, 215, 215)
+    29 -> Just (0, 215, 255)
+    30 -> Just (0, 255, 0)
+    31 -> Just (0, 255, 95)
+    32 -> Just (0, 255, 135)
+    33 -> Just (0, 255, 175)
+    34 -> Just (0, 255, 215)
+    35 -> Just (0, 255, 255)
+    36 -> Just (95, 0, 0)
+    37 -> Just (95, 0, 95)
+    38 -> Just (95, 0, 135)
+    39 -> Just (95, 0, 175)
+    40 -> Just (95, 0, 215)
+    41 -> Just (95, 0, 255)
+    42 -> Just (95, 95, 0)
+    43 -> Just (95, 95, 95)
+    44 -> Just (95, 95, 135)
+    45 -> Just (95, 95, 175)
+    46 -> Just (95, 95, 215)
+    47 -> Just (95, 95, 255)
+    48 -> Just (95, 135, 0)
+    49 -> Just (95, 135, 95)
+    50 -> Just (95, 135, 135)
+    51 -> Just (95, 135, 175)
+    52 -> Just (95, 135, 215)
+    53 -> Just (95, 135, 255)
+    54 -> Just (95, 175, 0)
+    55 -> Just (95, 175, 95)
+    56 -> Just (95, 175, 135)
+    57 -> Just (95, 175, 175)
+    58 -> Just (95, 175, 215)
+    59 -> Just (95, 175, 255)
+    60 -> Just (95, 215, 0)
+    61 -> Just (95, 215, 95)
+    62 -> Just (95, 215, 135)
+    63 -> Just (95, 215, 175)
+    64 -> Just (95, 215, 215)
+    65 -> Just (95, 215, 255)
+    66 -> Just (95, 255, 0)
+    67 -> Just (95, 255, 95)
+    68 -> Just (95, 255, 135)
+    69 -> Just (95, 255, 175)
+    70 -> Just (95, 255, 215)
+    71 -> Just (95, 255, 255)
+    72 -> Just (135, 0, 0)
+    73 -> Just (135, 0, 95)
+    74 -> Just (135, 0, 135)
+    75 -> Just (135, 0, 175)
+    76 -> Just (135, 0, 215)
+    77 -> Just (135, 0, 255)
+    78 -> Just (135, 95, 0)
+    79 -> Just (135, 95, 95)
+    80 -> Just (135, 95, 135)
+    81 -> Just (135, 95, 175)
+    82 -> Just (135, 95, 215)
+    83 -> Just (135, 95, 255)
+    84 -> Just (135, 135, 0)
+    85 -> Just (135, 135, 95)
+    86 -> Just (135, 135, 135)
+    87 -> Just (135, 135, 175)
+    88 -> Just (135, 135, 215)
+    89 -> Just (135, 135, 255)
+    90 -> Just (135, 175, 0)
+    91 -> Just (135, 175, 95)
+    92 -> Just (135, 175, 135)
+    93 -> Just (135, 175, 175)
+    94 -> Just (135, 175, 215)
+    95 -> Just (135, 175, 255)
+    96 -> Just (135, 215, 0)
+    97 -> Just (135, 215, 95)
+    98 -> Just (135, 215, 135)
+    99 -> Just (135, 215, 175)
+    100 -> Just (135, 215, 215)
+    101 -> Just (135, 215, 255)
+    102 -> Just (135, 255, 0)
+    103 -> Just (135, 255, 95)
+    104 -> Just (135, 255, 135)
+    105 -> Just (135, 255, 175)
+    106 -> Just (135, 255, 215)
+    107 -> Just (135, 255, 255)
+    108 -> Just (175, 0, 0)
+    109 -> Just (175, 0, 95)
+    110 -> Just (175, 0, 135)
+    111 -> Just (175, 0, 175)
+    112 -> Just (175, 0, 215)
+    113 -> Just (175, 0, 255)
+    114 -> Just (175, 95, 0)
+    115 -> Just (175, 95, 95)
+    116 -> Just (175, 95, 135)
+    117 -> Just (175, 95, 175)
+    118 -> Just (175, 95, 215)
+    119 -> Just (175, 95, 255)
+    120 -> Just (175, 135, 0)
+    121 -> Just (175, 135, 95)
+    122 -> Just (175, 135, 135)
+    123 -> Just (175, 135, 175)
+    124 -> Just (175, 135, 215)
+    125 -> Just (175, 135, 255)
+    126 -> Just (175, 175, 0)
+    127 -> Just (175, 175, 95)
+    128 -> Just (175, 175, 135)
+    129 -> Just (175, 175, 175)
+    130 -> Just (175, 175, 215)
+    131 -> Just (175, 175, 255)
+    132 -> Just (175, 215, 0)
+    133 -> Just (175, 215, 95)
+    134 -> Just (175, 215, 135)
+    135 -> Just (175, 215, 175)
+    136 -> Just (175, 215, 215)
+    137 -> Just (175, 215, 255)
+    138 -> Just (175, 255, 0)
+    139 -> Just (175, 255, 95)
+    140 -> Just (175, 255, 135)
+    141 -> Just (175, 255, 175)
+    142 -> Just (175, 255, 215)
+    143 -> Just (175, 255, 255)
+    144 -> Just (215, 0, 0)
+    145 -> Just (215, 0, 95)
+    146 -> Just (215, 0, 135)
+    147 -> Just (215, 0, 175)
+    148 -> Just (215, 0, 215)
+    149 -> Just (215, 0, 255)
+    150 -> Just (215, 95, 0)
+    151 -> Just (215, 95, 95)
+    152 -> Just (215, 95, 135)
+    153 -> Just (215, 95, 175)
+    154 -> Just (215, 95, 215)
+    155 -> Just (215, 95, 255)
+    156 -> Just (215, 135, 0)
+    157 -> Just (215, 135, 95)
+    158 -> Just (215, 135, 135)
+    159 -> Just (215, 135, 175)
+    160 -> Just (215, 135, 215)
+    161 -> Just (215, 135, 255)
+    162 -> Just (215, 175, 0)
+    163 -> Just (215, 175, 95)
+    164 -> Just (215, 175, 135)
+    165 -> Just (215, 175, 175)
+    166 -> Just (215, 175, 215)
+    167 -> Just (215, 175, 255)
+    168 -> Just (215, 215, 0)
+    169 -> Just (215, 215, 95)
+    170 -> Just (215, 215, 135)
+    171 -> Just (215, 215, 175)
+    172 -> Just (215, 215, 215)
+    173 -> Just (215, 215, 255)
+    174 -> Just (215, 255, 0)
+    175 -> Just (215, 255, 95)
+    176 -> Just (215, 255, 135)
+    177 -> Just (215, 255, 175)
+    178 -> Just (215, 255, 215)
+    179 -> Just (215, 255, 255)
+    180 -> Just (255, 0, 0)
+    181 -> Just (255, 0, 95)
+    182 -> Just (255, 0, 135)
+    183 -> Just (255, 0, 175)
+    184 -> Just (255, 0, 215)
+    185 -> Just (255, 0, 255)
+    186 -> Just (255, 95, 0)
+    187 -> Just (255, 95, 95)
+    188 -> Just (255, 95, 135)
+    189 -> Just (255, 95, 175)
+    190 -> Just (255, 95, 215)
+    191 -> Just (255, 95, 255)
+    192 -> Just (255, 135, 0)
+    193 -> Just (255, 135, 95)
+    194 -> Just (255, 135, 135)
+    195 -> Just (255, 135, 175)
+    196 -> Just (255, 135, 215)
+    197 -> Just (255, 135, 255)
+    198 -> Just (255, 175, 0)
+    199 -> Just (255, 175, 95)
+    200 -> Just (255, 175, 135)
+    201 -> Just (255, 175, 175)
+    202 -> Just (255, 175, 215)
+    203 -> Just (255, 175, 255)
+    204 -> Just (255, 215, 0)
+    205 -> Just (255, 215, 95)
+    206 -> Just (255, 215, 135)
+    207 -> Just (255, 215, 175)
+    208 -> Just (255, 215, 215)
+    209 -> Just (255, 215, 255)
+    210 -> Just (255, 255, 0)
+    211 -> Just (255, 255, 95)
+    212 -> Just (255, 255, 135)
+    213 -> Just (255, 255, 175)
+    214 -> Just (255, 255, 215)
+    215 -> Just (255, 255, 255)
+    216 -> Just (8, 8, 8)
+    217 -> Just (18, 18, 18)
+    218 -> Just (28, 28, 28)
+    219 -> Just (38, 38, 38)
+    220 -> Just (48, 48, 48)
+    221 -> Just (58, 58, 58)
+    222 -> Just (68, 68, 68)
+    223 -> Just (78, 78, 78)
+    224 -> Just (88, 88, 88)
+    225 -> Just (98, 98, 98)
+    226 -> Just (108, 108, 108)
+    227 -> Just (118, 118, 118)
+    228 -> Just (128, 128, 128)
+    229 -> Just (138, 138, 138)
+    230 -> Just (148, 148, 148)
+    231 -> Just (158, 158, 158)
+    232 -> Just (168, 168, 168)
+    233 -> Just (178, 178, 178)
+    234 -> Just (188, 188, 188)
+    235 -> Just (198, 198, 198)
+    236 -> Just (208, 208, 208)
+    237 -> Just (218, 218, 218)
+    238 -> Just (228, 228, 228)
+    239 -> Just (238, 238, 238)
+    _   -> Nothing
diff --git a/vty.cabal b/vty.cabal
--- a/vty.cabal
+++ b/vty.cabal
@@ -1,5 +1,5 @@
 name:                vty
-version:             5.21
+version:             5.22
 license:             BSD3
 license-file:        LICENSE
 author:              AUTHORS
