X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=terminal.coffee;h=75afdc53c4441d450bf8d53ccd742b2a9f942d97;hb=8e82934389a8bb1b9ea4e1d784bd163d29a7e48f;hp=42732f45e68bfabb243c5a41207947fc85ad2b06;hpb=394a14939b00dbbb2a30c8a87ac3333a41c74ef2;p=watch-my-terminal.git diff --git a/terminal.coffee b/terminal.coffee index 42732f4..75afdc5 100644 --- a/terminal.coffee +++ b/terminal.coffee @@ -1,5 +1,11 @@ -async = require 'async' -fs = require 'fs' +# this file is used by the client and server. + +# work around lack of module system in the browser: +if exports? + my_exports = exports +else + window.terminal = {} + my_exports = window.terminal class Terminal # public: @@ -10,7 +16,7 @@ class Terminal @attributes = [] @x = 0 @y = 0 - @a = 0 # cursor attributes + @a = 0x000007 # cursor attributes @partial = '' @resize width, height @@ -99,13 +105,23 @@ class Terminal @a = (@a & ~mask) | value csi_m: default: "0", go: -> + args = [] for i in arguments - fixed = i + args.push i + + while args.length > 0 + fixed = args.shift() while fixed[0] is '0' fixed = fixed.substr 1 + if fixed is '' + fixed = '0' switch fixed - when '' - @set_attribute_bits 0xffffff, 0 + + # remove all style/color + when '0' + @set_attribute_bits 0xffffff, 0x000007 + + # style attributes when '1' # bold @set_attribute_bits 0x10000, 0x10000 when '4' # underline @@ -115,6 +131,7 @@ class Terminal when '8' # invisible @set_attribute_bits 0x80000, 0x80000 + # disable style attributes when '22' # not bold... according to a page @set_attribute_bits 0x10000, 0 when '21' # ... though this would make more sense for "not bold" @@ -126,39 +143,97 @@ class Terminal when '28' # not invisible @set_attribute_bits 0x80000, 0 + when '100' # reset colors but not other attributes + @set_attribute_bits 0xffff, 0x0007 + + # 8 fg colors when '30' # fg black - @set_attribute_bits 0xff, 0 + @set_attribute_bits 0xff, 0x00 when '31' # fg red - @set_attribute_bits 0xff, 0xe0 + @set_attribute_bits 0xff, 0x01 when '32' # fg green - @set_attribute_bits 0xff, 0x1c + @set_attribute_bits 0xff, 0x02 when '33' # fg yellow - @set_attribute_bits 0xff, 0xfc - when '34' # fg blue @set_attribute_bits 0xff, 0x03 + when '34' # fg blue + @set_attribute_bits 0xff, 0x04 when '35' # fg magenta - @set_attribute_bits 0xff, 0xe2 + @set_attribute_bits 0xff, 0x05 when '36' # fg cyan - @set_attribute_bits 0xff, 0x1f + @set_attribute_bits 0xff, 0x06 when '37', '39' # fg white (39 is default) - @set_attribute_bits 0xff, 0xff + @set_attribute_bits 0xff, 0x07 + when '38' + if args.length >= 2 and args[0] is '5' + args.shift() + @set_attribute_bits 0xff, (0xff & args.shift()) + else + @set_attribute_bits 0x20000, 0x20000 + + # 8 bg colors when '40' # bg black - @set_attribute_bits 0xff00, 0 + @set_attribute_bits 0xff00, 0x0000 when '41' # bg red - @set_attribute_bits 0xff00, 0xe000 + @set_attribute_bits 0xff00, 0x0100 when '42' # bg green - @set_attribute_bits 0xff00, 0x1c00 + @set_attribute_bits 0xff00, 0x0200 when '43' # bg yellow - @set_attribute_bits 0xff00, 0xfc00 - when '44' # bg blue @set_attribute_bits 0xff00, 0x0300 + when '44' # bg blue + @set_attribute_bits 0xff00, 0x0400 when '45' # bg magenta - @set_attribute_bits 0xff00, 0xe200 + @set_attribute_bits 0xff00, 0x0500 when '46' # bg cyan - @set_attribute_bits 0xff00, 0x1f00 - when '47', '49' # bg white (49 is default) - @set_attribute_bits 0xff00, 0xff + @set_attribute_bits 0xff00, 0x0600 + when '47' # bg white + @set_attribute_bits 0xff00, 0x0700 + when '49' # bg default + @set_attribute_bits 0xff00, 0x0000 + + when '48' + if args.length >= 2 and args[0] is '5' + args.shift() + @set_attribute_bits 0xff00, ((0xff & args.shift()) << 8) + else + @set_attribute_bits 0x20000, 0x20000 + + # bright fg colors + when '90' # fg bright black + @set_attribute_bits 0xff, 0x08 + when '91' # fg bright red + @set_attribute_bits 0xff, 0x09 + when '92' # fg bright green + @set_attribute_bits 0xff, 0x0a + when '93' # fg bright yellow + @set_attribute_bits 0xff, 0x0b + when '94' # fg bright blue + @set_attribute_bits 0xff, 0x0c + when '95' # fg bright magenta + @set_attribute_bits 0xff, 0x0d + when '96' # fg bright cyan + @set_attribute_bits 0xff, 0x0e + when '97' # fg bright white + @set_attribute_bits 0xff, 0x0f + + # bright bg colors + when '100' # bg bright black + @set_attribute_bits 0xff, 0x08 + when '101' # bg bright red + @set_attribute_bits 0xff, 0x09 + when '102' # bg bright green + @set_attribute_bits 0xff, 0x0a + when '103' # bg bright yellow + @set_attribute_bits 0xff, 0x0b + when '104' # bg bright blue + @set_attribute_bits 0xff, 0x0c + when '105' # bg bright magenta + @set_attribute_bits 0xff, 0x0d + when '106' # bg bright cyan + @set_attribute_bits 0xff, 0x0e + when '107' # bg bright white + @set_attribute_bits 0xff, 0x0f + else # if we don't recognize the style, go back to default @@ -189,5 +264,5 @@ class Terminal return -1 unless parts? return parts[0].length -exports.new = (width, height) -> +my_exports.new = (width, height) -> return new Terminal width, height