 
     x = @cursor_col * @canvas_char_width
     y = (@cursor_row + 1) * @canvas_char_height
-    w = str.length * @canvas_char_width
+    w = chars.length * @canvas_char_width
 
     @ctx.fillStyle = @get_cur_fg_color()
-    @ctx.fillText str, x, y, w
+
+    # Paint each char individually in order to ensure they
+    # line up as expected
+    char_x = x
+    for char in chars
+      @ctx.fillText char, char_x, y, @canvas_char_width
+      char_x += @canvas_char_width
 
     if @attrs.underline
       @ctx.strokeStyle = @get_cur_fg_color()


  nv_normal_mode: -> document.body.className = 'normal-mode'

  nv_put: (str) ->
    return if str.length == 0
    # paint background
    @clear_block @cursor_col, @cursor_row, str.length, 1

    # paint string
    @ctx.font = @get_canvas_font()

    for e in events
      try
        handler = @['nv_'+e[0]]
        if handler?
          # optimize for put, we group the chars together
          if e[0].toString() == 'put'
            handler.call @, e[1..]
          else
            for args in e[1..]
              handler.apply @, args
