view termemu-keys.js @ 60:31bb3cf4f25f

Make sure watchers start with completely drawn screens. TermSessions now buffer all data since the last screen clear, so new Watchers can start with complete screens.
author John "Elwin" Edwards <elwin@sdf.org>
date Tue, 19 Jun 2012 19:11:59 -0700
parents 21738794755e
children d7eb63cd7a16
line wrap: on
line source

/* termemu-keys.js: some key-handling code common to both drivers. */

/* ASCII values of keys 0-9. */
var numShifts = [41, 33, 64, 35, 36, 37, 94, 38, 42, 40];

var keyHexCodes = {
  init: function () {
    this[KeyboardEvent.DOM_VK_RETURN] = ["0d", "0d"];
    this[KeyboardEvent.DOM_VK_SPACE] =  ["20", "20"];
    this[KeyboardEvent.DOM_VK_TAB] =    ["09", "09"];
    this[KeyboardEvent.DOM_VK_BACK_QUOTE] =    ["60", "7e"];
    this[KeyboardEvent.DOM_VK_OPEN_BRACKET] =  ["5b", "7b"];
    this[KeyboardEvent.DOM_VK_CLOSE_BRACKET] = ["5d", "7d"];
    this[KeyboardEvent.DOM_VK_BACK_SLASH] = ["5c", "7c"];
    this[KeyboardEvent.DOM_VK_SEMICOLON] =  ["3b", "3a"];
    this[KeyboardEvent.DOM_VK_QUOTE] =  ["27", "22"];
    this[KeyboardEvent.DOM_VK_COMMA] =  ["2c", "3c"];
    this[KeyboardEvent.DOM_VK_PERIOD] = ["2e", "3e"];
    this[KeyboardEvent.DOM_VK_SLASH] =  ["2f", "3f"];
    this[KeyboardEvent.DOM_VK_EQUALS] = ["3d", "2b"];
    this[KeyboardEvent.DOM_VK_SUBTRACT] =   ["2d", "5f"];
    this[KeyboardEvent.DOM_VK_BACK_SPACE] = ["08", "08"];
    this[KeyboardEvent.DOM_VK_DELETE] = ["1b5b337e", "1b5b337e"];
    this[KeyboardEvent.DOM_VK_ESCAPE] = ["1b", "1b"];
    this[KeyboardEvent.DOM_VK_PAGE_UP] =   ["1b5b357e", "1b5b357e"];
    this[KeyboardEvent.DOM_VK_PAGE_DOWN] = ["1b5b367e", "1b5b367e"];
    this.appCursor(false);
    this.appKeypad(false);
  },
  /* Multi-char control sequences!  Neat! */
  appCursor: function (on) {
    /* Aren't special keys vile? */
    if (on) {
      this[KeyboardEvent.DOM_VK_LEFT] =  ["1b4f44", "1b4f44"];
      this[KeyboardEvent.DOM_VK_RIGHT] = ["1b4f43", "1b4f43"];
      this[KeyboardEvent.DOM_VK_UP] =    ["1b4f41", "1b4f41"];
      this[KeyboardEvent.DOM_VK_DOWN] =  ["1b4f42", "1b4f42"];
      this[KeyboardEvent.DOM_VK_END] =   ["1b4f46", "1b4f46"];
      this[KeyboardEvent.DOM_VK_HOME] =  ["1b4f48", "1b4f48"];
    }
    else {
      this[KeyboardEvent.DOM_VK_LEFT] =  ["1b5b44", "1b5b44"];
      this[KeyboardEvent.DOM_VK_RIGHT] = ["1b5b43", "1b5b43"];
      this[KeyboardEvent.DOM_VK_UP] =    ["1b5b41", "1b5b41"];
      this[KeyboardEvent.DOM_VK_DOWN] =  ["1b5b42", "1b5b42"];
      this[KeyboardEvent.DOM_VK_END] =   ["1b5b46", "1b5b46"];
      this[KeyboardEvent.DOM_VK_HOME] =  ["1b5b48", "1b5b48"];
    }
  },
  appKeypad: function (on) {
    /* In theory, these should produce either numerals or the k[a-c][1-3]
     * sequences.  Since we can't count on the terminfo description actually
     * containing those sequences, pretend they're just arrow keys etc.
     */
    this[KeyboardEvent.DOM_VK_NUMPAD1] = ["1b4f46", "1b4f46"];
    this[KeyboardEvent.DOM_VK_NUMPAD2] = ["1b4f42", "1b4f42"];
    this[KeyboardEvent.DOM_VK_NUMPAD3] = ["1b5b367e", "1b5b367e"];
    this[KeyboardEvent.DOM_VK_NUMPAD4] = ["1b4f44", "1b4f44"];
    this[KeyboardEvent.DOM_VK_NUMPAD5] = ["1b5b45", "1b5b45"];
    this[KeyboardEvent.DOM_VK_NUMPAD6] = ["1b4f43", "1b4f43"];
    this[KeyboardEvent.DOM_VK_NUMPAD7] = ["1b4f48", "1b4f48"];
    this[KeyboardEvent.DOM_VK_NUMPAD8] = ["1b4f41", "1b4f41"];
    this[KeyboardEvent.DOM_VK_NUMPAD9] = ["1b5b357e", "1b5b357e"];
    return;
  }
};