-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathhandlers.go
102 lines (86 loc) · 2.42 KB
/
handlers.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
package main
import (
"errors"
"fmt"
"github.com/charmbracelet/x/ansi"
)
var csiHandlers = map[int]handlerFn{
'm': handleSgr,
'c': printf("Request primary device attributes"),
// kitty
'u' | '?'<<markerShift: handleKitty,
'u' | '>'<<markerShift: handleKitty,
'u' | '<'<<markerShift: handleKitty,
'u' | '='<<markerShift: handleKitty,
// cursor
'A': handleCursor,
'B': handleCursor,
'C': handleCursor,
'D': handleCursor,
'E': handleCursor,
'F': handleCursor,
'H': handleCursor,
'n' | '?'<<markerShift: handleCursor,
'n': handleCursor,
's': handleCursor,
'u': handleCursor,
'q' | ' '<<intermedShift: handleCursor,
// screen
'r': handleScreen,
'J': handleScreen,
'K': handleLine,
'L': handleLine,
'M': handleLine,
'S': handleLine,
'T': handleLine,
// modes
'p' | '$'<<intermedShift: handleMode,
'p' | '?'<<markerShift | '$'<<intermedShift: handleMode,
'h' | '?'<<markerShift: handleMode,
'l' | '?'<<markerShift: handleMode,
'h': handleMode,
'l': handleMode,
'q' | '>'<<markerShift: handleXT,
}
var oscHandlers = map[int]handlerFn{
0: handleTitle,
1: handleTitle,
2: handleTitle,
7: handleWorkingDirectoryURL,
8: handleHyperlink,
9: handleNotify,
10: handleTerminalColor,
11: handleTerminalColor,
12: handleTerminalColor,
22: handlePointerShape,
52: handleClipboard,
110: handleResetTerminalColor,
111: handleResetTerminalColor,
112: handleResetTerminalColor,
}
var dcsHandlers = map[int]handlerFn{
'q' | '+'<<intermedShift: handleTermcap,
}
var escHandler = map[int]handlerFn{
'7': printf("Save cursor"),
'8': printf("Restore cursor"),
// C0/7-bit ASCII variant of ST.
// C1/8-bit extended ASCII variant handled as Ctrl.
'\\': printf("String terminator"),
}
var (
errUnhandled = errors.New("TODO: unhandled sequence")
errInvalid = errors.New("invalid sequence")
)
type handlerFn = func(*ansi.Parser) (string, error)
func printf(format string, v ...any) handlerFn { //nolint:unparam
return func(*ansi.Parser) (string, error) {
return fmt.Sprintf(format, v...), nil
}
}
func default1(i int) int {
if i == 0 {
return 1
}
return i
}