X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=terminal.coffee;h=141165b85b73ce74848efb1c3ef3f522a9b5d02a;hb=0777de8703279b080aaeed70ae6dcaa0c7257135;hp=721ed80dc4b9b3af49cc6bb423229023a71566a6;hpb=f864b5a4731e5ab5148b5fe20533e71691cf6955;p=watch-my-terminal.git diff --git a/terminal.coffee b/terminal.coffee index 721ed80..141165b 100644 --- a/terminal.coffee +++ b/terminal.coffee @@ -62,19 +62,15 @@ class Terminal @text[@scroll_top][i] = ' ' @attributes[@scroll_top][i] = 0x07 - # move (newly cleared) top line to the bottom of the scrolling region - @text = [ - @text[0...@scroll_top]..., # up to but not including scroll top - @text[@scroll_top + 1 .. @scroll_bottom]..., # scroll region except top line of it - @text[@scroll_top], # top line of scroll region (already cleared) - @text[@scroll_bottom + 1 ... @height]... # rest of screen - ] - @attributes = [ - @attributes[0...@scroll_top]..., # up to but not including scroll top - @attributes[@scroll_top + 1 .. @scroll_bottom]..., # scroll region except top line of it - @attributes[@scroll_top], # top line of scroll region (already cleared) - @attributes[@scroll_bottom + 1 ... @height]... # rest of screen - ] + rearrange = (a) => + return [ + a[0...@scroll_top]..., # up to but not including scroll top + a[@scroll_top + 1 .. @scroll_bottom]..., # scroll region except top line of it + a[@scroll_top], # top line of scroll region (already cleared) + a[@scroll_bottom + 1 ... @height]... # rest of screen + ] + @text = rearrange @text + @attributes = rearrange @attributes # slide cursor up with rest of text @y -= 1 @@ -233,6 +229,26 @@ class Terminal console.log "confusing arg for csi_K: #{direction}" return + # move lines downwards (arg is how far) + csi_L: (lines) -> + lines = parseInt @fix_esc_arg lines, '1' + + rearrange = (a) => + return [ + a[0...@y]..., # keep everything above cursor + a[@scroll_bottom - lines + 1 .. @scroll_bottom]..., # we'll clear these shortly + a[@y..@scroll_bottom - lines]..., # lines that are moving down + a[@scroll_bottom + 1 ... @height]... # rest of screen + ] + @text = rearrange @text + @attributes = rearrange @attributes + + # clear the lines we scrolled off (and put back in as "new") + for y in [@y...@y+lines] + for x in [0...@width] + @text[y][x] = ' ' + @attributes[y][x] = 0x07 + # misc csiq_h: -> args = []