001/*
002 * Copyright (C) 2012 eXo Platform SAS.
003 *
004 * This is free software; you can redistribute it and/or modify it
005 * under the terms of the GNU Lesser General Public License as
006 * published by the Free Software Foundation; either version 2.1 of
007 * the License, or (at your option) any later version.
008 *
009 * This software is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * You should have received a copy of the GNU Lesser General Public
015 * License along with this software; if not, write to the Free
016 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018 */
019package org.crsh.console;
020
021import jline.console.Operation;
022import org.crsh.keyboard.KeyType;
023
024/**
025 * A recorded key stroke that associates an operation with the sequence that triggered it.
026 *
027 * @author Julien Viet
028 */
029class KeyStroke {
030
031  /** . */
032  final Operation operation;
033
034  /** . */
035  final int[] sequence;
036
037  public KeyStroke(Operation operation, int... sequence) {
038    this.operation = operation;
039    this.sequence = sequence;
040  }
041
042  KeyType map() {
043    switch (operation) {
044      case SELF_INSERT:
045        if (sequence.length == 1 && sequence[0] >= 32) {
046          return KeyType.CHARACTER;
047        }
048        break;
049      case BACKWARD_CHAR:
050        return KeyType.LEFT;
051      case FORWARD_CHAR:
052        return KeyType.RIGHT;
053      case PREVIOUS_HISTORY:
054        return KeyType.UP;
055      case NEXT_HISTORY:
056        return KeyType.DOWN;
057      case BACKWARD_DELETE_CHAR:
058        return KeyType.BACKSPACE;
059      case DELETE_CHAR:
060        return KeyType.DELETE;
061      case ACCEPT_LINE:
062        return KeyType.ENTER;
063    }
064    return KeyType.UNKNOWN;
065  }
066}