aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/repl/ammonite/SpecialKeys.scala
blob: d834cc10b9e9a72f370933df20ef57c835b08c2d (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"
}