Mercurial > hg > rlgwebd
annotate termemu.js @ 138:144595e50376
termemu.js: handle some tmux-produced control sequences.
| author | John "Elwin" Edwards | 
|---|---|
| date | Thu, 18 Jul 2013 10:43:41 -0700 | 
| parents | a4d3ecf188b7 | 
| children | 6758d832c10c | 
| rev | line source | 
|---|---|
| 0 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 1 /* termemu.js: a mostly xterm-compatible terminal emulator for a webpage */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 2 /* SELF-HOSTING 2011-09-23 */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 3 | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 4 // How detailed the debugging should be. | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 5 var debugSuppress = 1; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 6 // Some char values. | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 7 var csiPre = [63, 62, 33]; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 8 var csiPost = [36, 34, 39, 32]; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 9 function csiFinal(code) { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 10 /* @A-Z */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 11 if (code >= 64 && code <= 90) | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 12 return true; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 13 /* `a-z{| */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 14 if (code >= 96 && code <= 124) | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 15 return true; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 16 return false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 17 } | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 18 var esc7ctl = [68, 69, 72, 77, 78, 79, 80, 86, 87, 88, 90, 91, 92, 93, 94, 95]; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 19 var escSingle = [55, 56, 61, 62, 70, 99, 108, 109, 110, 111, 124, 125, 126]; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 20 var escDouble = [32, 35, 37, 40, 41, 42, 43, 45, 46, 47]; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 21 | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 22 var decChars = {96: 0x2666, 97: 0x2592, 102: 0xB0, 103: 0xB1, | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 23 106: 0x2518, 107: 0x2510, 108: 0x250C, 109: 0x2514, | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 24 110: 0x253C, 111: 0x23BA, 112: 0x23BB, 113: 0x2500, | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 25 114: 0x23BC, 115: 0x23BD, 116: 0x251C, 117: 0x2524, | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 26 118: 0x2534, 119: 0x252C, 120: 0x2502, 121: 0x2264, | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 27 122: 0x2265, 123: 0x03C0, 124: 0x2260, 125: 0xA3, 126: 0xB7}; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 28 | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 29 /* Not everything that should be saved by DECSC has been implemented yet. */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 30 function Cursor(src) { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 31 if (src) { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 32 this.x = src.x; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 33 this.y = src.y; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 34 this.bold = src.bold; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 35 this.inverse = src.inverse; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 36 this.uline = src.uline; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 37 this.fg = src.fg; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 38 this.bg = src.bg; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 39 this.cset = src.cset; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 40 } | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 41 else { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 42 this.x = 0; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 43 this.y = 0; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 44 this.bold = false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 45 this.inverse = false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 46 this.uline = false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 47 this.fg = null; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 48 this.bg = null; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 49 this.cset = "B"; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 50 } | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 51 return; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 52 } | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 53 | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 54 // An object representing the terminal emulator. | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 55 var termemu = { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 56 /* Some elements of the page. */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 57 inwrap: null, // A non-table div wrapping the screen | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 58 view: null, // The div holding the terminal screen | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 59 screen: null, // The div representing the active screen area | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 60 normbuf: null, // The normal screen buffer | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 61 altbuf: null, // The alternate screen buffer | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 62 histbuf: null, // The screen history buffer | 
| 4 
ee22eb9ab009
Client: don't assume the terminal is 24x80.
 John "Elwin" Edwards <elwin@sdf.org> parents: 
0diff
changeset | 63 /* Attributes */ | 
| 
ee22eb9ab009
Client: don't assume the terminal is 24x80.
 John "Elwin" Edwards <elwin@sdf.org> parents: 
0diff
changeset | 64 w: 0, // Screen width | 
| 
ee22eb9ab009
Client: don't assume the terminal is 24x80.
 John "Elwin" Edwards <elwin@sdf.org> parents: 
0diff
changeset | 65 h: 0, // Screen height | 
| 0 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 66 fgColor: "#b2b2b2", // Default color for text | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 67 bgColor: "black", // Default background color | 
| 4 
ee22eb9ab009
Client: don't assume the terminal is 24x80.
 John "Elwin" Edwards <elwin@sdf.org> parents: 
0diff
changeset | 68 scrT: 0, // top and bottom of scrolling region | 
| 
ee22eb9ab009
Client: don't assume the terminal is 24x80.
 John "Elwin" Edwards <elwin@sdf.org> parents: 
0diff
changeset | 69 scrB: 0, // init() will set this properly | 
| 0 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 70 c: null, // Contains cursor position and text attributes | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 71 offedge: false, // Going off the edge doesn't mean adding a new line | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 72 clearAttrs: function () { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 73 /* Make sure to reset ALL attribute properties and NOTHING else. */ | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 74 this.c.bold = false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 75 this.c.inverse = false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 76 this.c.uline = false; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 77 this.c.fg = null; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 78 this.c.bg = null; | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 79 }, | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 80 saved: null, // saved cursor | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 81 normc: null, // Stores the normal screen buffer cursor when using altbuf | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 82 ansicolors: ["#000000", "#b21818", "#18b218", "#b26818", "#1818b2", | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 83 "#b218b2", "#18b2b2", "#b2b2b2"], | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 84 brightcolors: ["#686868", "#ff5454", "#54ff54", "#ffff54", "#5454ff", | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 85 "#ff54ff", "#54ffff", "#ffffff"], | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> parents: diff
changeset | 86 cssColor: function (fg) { | 
| 
bd412f63ce0d
Put this project under version control, finally.
 John "Elwin" Edwards <elwin@sdf.org> | 
