# set cursor position (one based)
csi_H: (row, column) ->
- row = 0 + @fix_esc_arg row, 1
- column = 0 + @fix_esc_arg column, 1
-
- # convert to 0 base
- column -= 1
+ # handle blank/missing args and convert to 0 base
+ row = @fix_esc_arg(row, 1) - 1
+ column = @fix_esc_arg(column, 1) - 1
#clamp values
if column < 0
@attributes[row][i] = @a
else
console.log "confusing arg for csi_J: #{direction}"
+ return
# clear (some or all of) current line
csi_K: (direction) ->
@text[@y][i] = ' '
@attributes[@y][i] = @a
when '1' # erase to left
- for i in [0..@x]
+ # @x can equal @width (after printing to right-most column)
+ if @x < @width
+ max = @x
+ else
+ max = @width - 1
+ for i in [0..max]
@text[@y][i] = ' '
@attributes[@y][i] = @a
when '2' # erase whole line
@attributes[@y][i] = @a
else
console.log "confusing arg for csi_K: #{direction}"
+ return
# misc
csiq_h: ->