X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=terminal.coffee;h=19296bf0b028c30159e927836c149756a75b4c24;hb=639264f34589d0637860ffbd47d788e03c48c76a;hp=abc006a42e3a528f339bb57317dc998201f31c2a;hpb=790fe120c484c9bc3736aacc1fdaa9904177e383;p=watch-my-terminal.git diff --git a/terminal.coffee b/terminal.coffee index abc006a..19296bf 100644 --- a/terminal.coffee +++ b/terminal.coffee @@ -83,18 +83,20 @@ class Terminal when '\x0d' # cr @x = 0 when '\x08' # backspace - if @x > 0 + if @x is 0 + @x = @width - 1 + if @y > 0 + @y -= 1 + else @x -= 1 - @text[@y][@x] = ' ' - # should this set the attribute too? when '\x0a', '\x0b' # lf, vertical tab (same thing) @wrap_to_next_line() else + if @x >= @width + @wrap_to_next_line() @text[@y][@x] = c @attributes[@y][@x] = @a @x += 1 - if @x is @width - @wrap_to_next_line() return set_attribute_bits: (mask, value) -> @@ -132,15 +134,21 @@ class Terminal @x = column @y = row - # clear lines (implemented inclusive of the current line) + # clear to screen edge(es) csi_J: (direction) -> switch @fix_esc_arg direction, '0' when '0' # erase down + # rest of current line + @csi_K direction + # rest of lines for row in [@y...@height] for i in [0...@width] @text[row][i] = ' ' @attributes[row][i] = @a when '1' # erase up + # beginning of current line + @csi_K direction + # all previous lines for row in [0..@y] for i in [0...@width] @text[row][i] = ' ' @@ -161,7 +169,7 @@ class Terminal @text[@y][i] = ' ' @attributes[@y][i] = @a when '1' # erase to left - for i in [0...@x] + for i in [0..@x] @text[@y][i] = ' ' @attributes[@y][i] = @a when '2' # erase whole line