-
Notifications
You must be signed in to change notification settings - Fork 0
/
mode.go
178 lines (170 loc) · 2.8 KB
/
mode.go
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
package tcellterm
type mode int
const (
// ANSI-Standardized modes
//
// Keyboard Action mode
kam mode = 1 << iota
// Insert/Replace mode
irm
// Send/Receive mode
srm
// Line feed/new line mode
lnm
// ANSI-Compatible DEC Private Modes
//
// Cursor Key mode
decckm
// ANSI/VT52 mode
decanm
// Column mode
deccolm
// Scroll mode
decsclm
// Origin mode
decom
// Autowrap mode
decawm
// Autorepeat mode
decarm
// Printer form feed mode
decpff
// Printer extent mode
decpex
// Text Cursor Enable mode
dectcem
// National replacement character sets
decnrcm
// xterm
//
// Use alternate screen
smcup
// Bracketed paste
paste
// vt220 mouse
mouseButtons
// vt220 + drag
mouseDrag
// vt220 + all motion
mouseMotion
// Mouse SGR mode
mouseSGR
// Alternate scroll
altScroll
)
func (vt *VT) sm(params []int) {
for _, param := range params {
switch param {
case 2:
vt.mode |= kam
case 4:
vt.mode |= irm
case 12:
vt.mode |= srm
case 20:
vt.mode |= lnm
}
}
}
func (vt *VT) rm(params []int) {
for _, param := range params {
switch param {
case 2:
vt.mode &^= kam
case 4:
vt.mode &^= irm
case 12:
vt.mode &^= srm
case 20:
vt.mode &^= lnm
}
}
}
func (vt *VT) decset(params []int) {
for _, param := range params {
switch param {
case 1:
vt.mode |= decckm
case 2:
vt.mode |= decanm
case 3:
vt.mode |= deccolm
case 4:
vt.mode |= decsclm
case 5:
case 6:
vt.mode |= decom
case 7:
vt.mode |= decawm
vt.lastCol = false
case 8:
vt.mode |= decarm
case 25:
vt.mode |= dectcem
case 1000:
vt.mode |= mouseButtons
case 1002:
vt.mode |= mouseDrag
case 1003:
vt.mode |= mouseMotion
case 1006:
vt.mode |= mouseSGR
case 1007:
vt.mode |= altScroll
case 1049:
vt.decsc()
vt.activeScreen = vt.altScreen
vt.mode |= smcup
// Enable altScroll in the alt screen. This is only used
// if the application doesn't enable mouse
vt.mode |= altScroll
case 2004:
vt.mode |= paste
}
}
}
func (vt *VT) decrst(params []int) {
for _, param := range params {
switch param {
case 1:
vt.mode &^= decckm
case 2:
vt.mode &^= decanm
case 3:
vt.mode &^= deccolm
case 4:
vt.mode &^= decsclm
case 5:
case 6:
vt.mode &^= decom
case 7:
vt.mode &^= decawm
vt.lastCol = false
case 8:
vt.mode &^= decarm
case 25:
vt.mode &^= dectcem
case 1000:
vt.mode &^= mouseButtons
case 1002:
vt.mode &^= mouseDrag
case 1003:
vt.mode &^= mouseMotion
case 1006:
vt.mode &^= mouseSGR
case 1007:
vt.mode &^= altScroll
case 1049:
if vt.mode&smcup != 0 {
// Only clear if we were in the alternate
vt.ed(2)
}
vt.activeScreen = vt.primaryScreen
vt.mode &^= smcup
vt.mode &^= altScroll
vt.decrc()
case 2004:
vt.mode &^= paste
}
}
}