JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
add csi_M (scroll up to cursor)
authorJason Woofenden <jason@jasonwoof.com>
Fri, 1 Feb 2013 00:10:41 +0000 (19:10 -0500)
committerJason Woofenden <jason@jasonwoof.com>
Fri, 1 Feb 2013 00:10:41 +0000 (19:10 -0500)
terminal.coffee

index 141165b..e5a404f 100644 (file)
@@ -249,6 +249,27 @@ class Terminal
                                @text[y][x] = ' '
                                @attributes[y][x] = 0x07
 
                                @text[y][x] = ' '
                                @attributes[y][x] = 0x07
 
+       # move lines upwards (arg is how far)
+       # this obliterates the line under the cursor and arg-1 following it
+       csi_M: (lines) ->
+               lines = parseInt @fix_esc_arg lines, '1'
+
+               rearrange = (a) =>
+                       return [
+                               a[0 ... @y]..., # keep everything above cursor
+                               a[@y + lines .. @scroll_bottom]..., # lines we're moving up
+                               a[@y ... @y + lines]..., # recycle these
+                               a[@scroll_bottom + 1 ... @height]... # keep the rest
+                       ]
+               @text = rearrange @text
+               @attributes = rearrange @attributes
+
+               # clear the lines we're recycling
+               for y in [@scroll_bottom - lines + 1 .. @scroll_bottom]
+                       for x in [0...@width]
+                               @text[y][x] = ' '
+                               @attributes[y][x] = 0x07
+
        # misc
        csiq_h: ->
                args = []
        # misc
        csiq_h: ->
                args = []