aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/repl/ammonite/SpecialKeys.scala
blob: 3b6a4a5a2be65e0da991dffb9867bbefd4c9a870 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package dotty.tools
package dotc
package repl
package ammonite.terminal

/**
 * One place to assign all the esotic control key input snippets to
 * easy-to-remember names
 */
object SpecialKeys {

  /**
   * Lets you easily pattern match on characters modified by ctrl,
   * or convert a character into its ctrl-ed version
   */
  object Ctrl{
    def apply(c: Char) = (c - 96).toChar.toString
    def unapply(i: Int): Option[Int] = Some(i + 96)
  }

  /**
   * The string value you get when you hit the alt key
   */
  def Alt = "\u001b"


  val Up = Alt+"[A"
  val Down = Alt+"[B"
  val Right = Alt+"[C"
  val Left = Alt+"[D"

  val Home = Alt+"OH"
  val End = Alt+"OF"

  // For some reason Screen makes these print different incantations
  // from a normal snippet, so this causes issues like
  // https://github.com/lihaoyi/Ammonite/issues/152 unless we special
  // case them
  val HomeScreen = Alt+"[1~"
  val EndScreen = Alt+"[4~"

  val ShiftUp = Alt+"[1;2A"
  val ShiftDown = Alt+"[1;2B"
  val ShiftRight = Alt+"[1;2C"
  val ShiftLeft = Alt+"[1;2D"

  val FnUp = Alt+"[5~"
  val FnDown = Alt+"[6~"
  val FnRight = Alt+"[F"
  val FnLeft = Alt+"[H"

  val AltUp = Alt*2+"[A"
  val AltDown = Alt*2+"[B"
  val AltRight = Alt*2+"[C"
  val AltLeft = Alt*2+"[D"

  val LinuxCtrlRight = Alt+"[1;5C"
  val LinuxCtrlLeft = Alt+"[1;5D"

  val FnAltUp = Alt*2+"[5~"
  val FnAltDown = Alt*2+"[6~"
  val FnAltRight = Alt+"[1;9F"
  val FnAltLeft = Alt+"[1;9H"

  // Same as fn-alt-{up, down}
//  val FnShiftUp = Alt*2+"[5~"
//  val FnShiftDown = Alt*2+"[6~"
  val FnShiftRight = Alt+"[1;2F"
  val FnShiftLeft = Alt+"[1;2H"

  val AltShiftUp = Alt+"[1;10A"
  val AltShiftDown = Alt+"[1;10B"
  val AltShiftRight = Alt+"[1;10C"
  val AltShiftLeft = Alt+"[1;10D"

  // Same as fn-alt-{up, down}
//  val FnAltShiftUp = Alt*2+"[5~"
//  val FnAltShiftDown = Alt*2+"[6~"
  val FnAltShiftRight = Alt+"[1;10F"
  val FnAltShiftLeft = Alt+"[1;10H"
}