view termemu-keys.js @ 54:de01aafd4dd6

termemu.js: don't warn on certain control sequences. Don't print a debug message for some control sequences that technically are unimplemented, but would just put the terminal into the only mode yet implemented. CSI 4l and CSI ?7h are like this.
author John "Elwin" Edwards <elwin@sdf.org>
date Fri, 15 Jun 2012 16:23:57 -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;
  }
};