     @cursor.style.height = @char_height + 'px'
 
     if config.blink_cursor
-      @cursor.classList.add('blink')
+      @start_cursor_blink()
     else
-      @cursor.classList.remove('blink')
+      @stop_cursor_blink()
+
+  start_cursor_blink: ->
+    @cursor.classList.add 'blink'
+
+  stop_cursor_blink: ->
+    @cursor.classList.remove 'blink'
 
   init_event_handlers: ->
+    resumeBlink = debounce (=> @start_cursor_blink()), 250
+    pause_blink = =>
+      @stop_cursor_blink()
+      resumeBlink()
+
     document.addEventListener 'keydown', (e) =>
       keystroke = keystrokeForKeyboardEvent(e)
       @emit 'input', keystroke if keystroke
+
+      if config.blink_cursor
+        pause_blink()
 
     document.addEventListener 'mousedown', (e) =>
       return if not @mouse_enabled

          + ',' + Math.floor(e.clientY / @char_height) \
          + '>'

    window.addEventListener 'resize', (e) =>
      if not @resize_timer
        @resize_timer = setTimeout =>

          + ',' + Math.floor(e.clientY / @char_height) \
          + '>'

      if config.blink_cursor
        pause_blink()

    document.addEventListener 'mouseup', (e) =>
      return if not @mouse_enabled
      e.preventDefault()
