Skip to content

Commit d580d68

Browse files
committed
feat: strict time-to-type calculation
1 parent 061ccc1 commit d580d68

7 files changed

+325
-32
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
Event history recorded on Fedora Linux 40, X11
2+
==============================================
3+
4+
## Firefox 132
5+
6+
### Dead down, Dead up, character
7+
8+
```
9+
3970 | keydown | Equal | Dead | -
10+
3971 | compositionstart | - | - |
11+
3971 | compositionupdate | - | - | ´
12+
3976 | input | - | - | ´
13+
4083 | keyup | Equal | Dead | -
14+
4499 | keydown | KeyA | a | -
15+
4500 | compositionupdate | - | - | á
16+
4500 | compositionend | - | - | á
17+
4502 | input | - | - | á
18+
4644 | keyup | KeyA | a | -
19+
```
20+
21+
### Dead down, character, Dead up
22+
23+
```
24+
2531 | keydown | Equal | Dead | -
25+
2532 | compositionstart | - | - |
26+
2532 | compositionupdate | - | - | ´
27+
2537 | input | - | - | ´
28+
2739 | keydown | KeyA | a | -
29+
2740 | compositionupdate | - | - | á
30+
2740 | compositionend | - | - | á
31+
2742 | input | - | - | á
32+
2876 | keyup | KeyA | a | -
33+
2996 | keyup | Equal | Dead | -
34+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
Event history recorded on MacOS 12.7.6
2+
======================================
3+
4+
## Safari 17.6
5+
6+
### Dead down, Dead up, character
7+
8+
```
9+
5847 | compositionstart | - | - |
10+
5850 | compositionupdate | - | - | '
11+
5852 | input | - | - | '
12+
5847 | keydown | Equal | Dead | -
13+
6191 | keyup | Equal | ' | -
14+
8770 | input | - | - | -
15+
8773 | input | - | - | á
16+
8775 | compositionend | - | - | á
17+
8767 | keydown | KeyA | á | -
18+
9239 | keyup | KeyA | a | -
19+
```
20+
21+
### Dead down, character, Dead up
22+
23+
```
24+
7639 | compositionstart | - | - |
25+
7645 | compositionupdate | - | - | '
26+
7647 | input | - | - | '
27+
7687 | keydown | Equal | Dead | -
28+
7824 | input | - | - | -
29+
7829 | input | - | - | á
30+
7831 | compositionend | - | - | á
31+
7871 | keydown | KeyA | á | -
32+
7967 | keyup | KeyA | a | -
33+
8063 | keyup | Equal | Dead | -
34+
```
35+
36+
## Chrome 130
37+
38+
### Dead down, Dead up, character
39+
40+
```
41+
2447 | keydown | Equal | Dead | -
42+
2453 | compositionstart | - | - |
43+
2454 | compositionupdate | - | - | '
44+
2455 | input | - | - | '
45+
2559 | keyup | Equal | Dead | -
46+
3055 | keydown | KeyA | á | -
47+
3058 | compositionupdate | - | - | á
48+
3059 | input | - | - | á
49+
3059 | compositionend | - | - | á
50+
3191 | keyup | KeyA | a | -
51+
```
52+
53+
### Dead down, character, Dead up
54+
55+
```
56+
5732 | keydown | Equal | Dead | -
57+
5738 | compositionstart | - | - |
58+
5739 | compositionupdate | - | - | '
59+
5740 | input | - | - | '
60+
5964 | keydown | KeyA | á | -
61+
5968 | compositionupdate | - | - | á
62+
5969 | input | - | - | á
63+
5969 | compositionend | - | - | á
64+
6100 | keyup | KeyA | a | -
65+
6228 | keyup | Equal | Dead | -
66+
```
67+
68+
## Firefox 132
69+
70+
### Dead down, Dead up, character
71+
72+
```
73+
6731 | keydown | Equal | Dead | -
74+
6735 | compositionstart | - | - |
75+
6735 | compositionupdate | - | - | '
76+
6746 | input | - | - | '
77+
6995 | keyup | Equal | ' | -
78+
9563 | keydown | KeyA | á | -
79+
9566 | compositionupdate | - | - | á
80+
9566 | compositionend | - | - | á
81+
9575 | input | - | - | á
82+
9795 | keyup | KeyA | a | -
83+
```
84+
85+
### Dead down, character, Dead up
86+
87+
```
88+
4043 | keydown | Equal | Dead | -
89+
4048 | compositionstart | - | - |
90+
4048 | compositionupdate | - | - | '
91+
4054 | input | - | - | '
92+
4275 | keydown | KeyA | á | -
93+
4278 | compositionupdate | - | - | á
94+
4278 | compositionend | - | - | á
95+
4286 | input | - | - | á
96+
4427 | keyup | KeyA | a | -
97+
4603 | keyup | Equal | Dead | -
98+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
Event history recorded on Windows 11
2+
====================================
3+
4+
## Firefox 132
5+
6+
### Dead down, Dead up, character
7+
8+
```
9+
6553 | keydown | Equal | Dead | -
10+
6757 | keyup | Equal | Dead | -
11+
8100 | keydown | KeyA | á | -
12+
8108 | input | - | - | á
13+
8303 | keyup | KeyA | a | -
14+
```
15+
16+
### Dead down, character, Dead up
17+
18+
```
19+
3304 | keydown | Equal | Dead | -
20+
3445 | keydown | KeyA | á | -
21+
3453 | input | - | - | á
22+
3570 | keyup | KeyA | a | -
23+
3726 | keyup | Equal | ´ | -
24+
```
25+
26+
### Shift down, Dead down, Dead up, Shift up, character
27+
28+
```
29+
2163 | keydown | ShiftLeft | Shift | -
30+
2350 | keydown | Equal | Dead | -
31+
2475 | keyup | Equal | Dead | -
32+
2647 | keyup | ShiftLeft | Shift | -
33+
2975 | keydown | KeyC | č | -
34+
2991 | input | - | - | č
35+
3116 | keyup | KeyC | c | -
36+
```
37+
38+
### Shift down, Dead down, Dead up, Shift up, Shift down, character, Shift up
39+
40+
```
41+
0272 | keydown | ShiftLeft | Shift | -
42+
0632 | keydown | Equal | Dead | -
43+
0882 | keyup | Equal | Dead | -
44+
1257 | keyup | ShiftLeft | Shift | -
45+
2022 | keydown | ShiftLeft | Shift | -
46+
2350 | keydown | KeyC | Č | -
47+
2366 | input | - | - | Č
48+
2569 | keyup | KeyC | C | -
49+
2835 | keyup | ShiftLeft | Shift | -
50+
```
51+
52+
### Shift down, Dead down, character, Dead up, Shift up
53+
54+
```
55+
9042 | keydown | ShiftLeft | Shift | -
56+
9323 | keydown | Equal | Dead | -
57+
9588 | keydown | KeyC | Č | -
58+
9604 | input | - | - | Č
59+
9760 | keyup | KeyC | C | -
60+
0026 | keyup | Equal | ˇ | -
61+
0307 | keyup | ShiftLeft | Shift | -
62+
```
63+
64+
## Chrome 130
65+
66+
### Dead down, Dead up, character
67+
68+
```
69+
6622 | keydown | Equal | Dead | -
70+
6911 | keyup | Equal | Dead | -
71+
8031 | keydown | KeyA | á | -
72+
8033 | input | - | - | á
73+
8351 | keyup | KeyA | a | -
74+
```
75+
76+
### Dead down, character, Dead up
77+
78+
```
79+
2469 | keydown | Equal | Dead | -
80+
2660 | keydown | KeyA | á | -
81+
2662 | input | - | - | á
82+
2828 | keyup | KeyA | a | -
83+
3021 | keyup | Equal | Dead | -
84+
```
85+
86+
### Shift down, Dead down, Dead up, Shift up, character
87+
88+
```
89+
5392 | keydown | ShiftLeft | Shift | -
90+
5776 | keydown | Equal | Dead | -
91+
6031 | keyup | Equal | Dead | -
92+
6439 | keyup | ShiftLeft | Shift | -
93+
7487 | keydown | KeyC | č | -
94+
7492 | input | - | - | č
95+
7615 | keyup | KeyC | c | -
96+
```
97+
98+
### Shift down, Dead down, Dead up, Shift up, Shift down, character, Shift up
99+
100+
```
101+
5781 | keydown | ShiftLeft | Shift | -
102+
6093 | keydown | Equal | Dead | -
103+
6309 | keyup | Equal | Dead | -
104+
6629 | keyup | ShiftLeft | Shift | -
105+
7725 | keydown | ShiftLeft | Shift | -
106+
8181 | keydown | KeyC | Č | -
107+
8183 | input | - | - | Č
108+
8365 | keyup | KeyC | C | -
109+
8677 | keyup | ShiftLeft | Shift | -
110+
```
111+
112+
### Shift down, Dead down, character, Dead up, Shift up
113+
114+
```
115+
7466 | keydown | ShiftLeft | Shift | -
116+
7658 | keydown | Equal | Dead | -
117+
8018 | keydown | KeyC | Č | -
118+
8019 | input | - | - | Č
119+
8154 | keyup | KeyC | C | -
120+
8378 | keyup | Equal | Dead | -
121+
8682 | keyup | ShiftLeft | Shift | -
122+
```

packages/keybr-textinput-events/lib/emulation.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ test("forward emulation, translate a character input", (t) => {
8585
"400,keyup,ControlLeft,Control",
8686
"500,keydown,ShiftLeft,Shift",
8787
"600,keydown,KeyS,O",
88-
"600,appendChar,O,200",
88+
"600,appendChar,O,300",
8989
"700,keyup,KeyS,O",
9090
"800,keyup,ShiftLeft,Shift",
9191
]);

packages/keybr-textinput-events/lib/inputhandler.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ test("handle a clear word input", (t) => {
121121
t.deepEqual(target.trace, [
122122
"100,keydown,ControlLeft,Control",
123123
"200,keydown,Backspace,Backspace",
124-
"200,clearWord,\u0000,100",
124+
"200,clearWord,\u0000,200", // We don't count the Control key as a modifier.
125125
"300,keyup,Backspace,Backspace",
126126
"400,keyup,ControlLeft,Control",
127127
]);

packages/keybr-textinput-events/lib/timetotype.test.ts

+46-2
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,27 @@ test("Shift down,Alt down,character (MacOS)", (t) => {
8686
);
8787
});
8888

89+
test("Dead down,character", (t) => {
90+
t.is(
91+
new Tester()
92+
.add(1100, "keydown", "Equal", "Dead")
93+
.add(1200, "keydown", "KeyA", "a")
94+
.measure(1200),
95+
100,
96+
);
97+
});
98+
99+
test("Shift down,Dead down,character", (t) => {
100+
t.is(
101+
new Tester()
102+
.add(1100, "keydown", "ShiftLeft", "Shift")
103+
.add(1200, "keydown", "Equal", "Dead")
104+
.add(1300, "keydown", "KeyA", "a")
105+
.measure(1300),
106+
100,
107+
);
108+
});
109+
89110
test("Dead down,Dead up,character", (t) => {
90111
t.is(
91112
new Tester()
@@ -132,7 +153,7 @@ test("Shift down,Shift up,Alt down,Alt up,character", (t) => {
132153
.add(1400, "keyup", "AltLeft", "Alt")
133154
.add(1500, "keydown", "KeyA", "a")
134155
.measure(1500),
135-
200,
156+
500,
136157
);
137158
});
138159

@@ -145,7 +166,7 @@ test("Shift down,Alt down,Alt up,Shift up,character", (t) => {
145166
.add(1400, "keyup", "ShiftLeft", "Shift")
146167
.add(1500, "keydown", "KeyA", "a")
147168
.measure(1500),
148-
300,
169+
500,
149170
);
150171
});
151172

@@ -158,10 +179,33 @@ test("Shift down,Alt down,Shift up,Alt up,character", (t) => {
158179
.add(1400, "keyup", "AltLeft", "Alt")
159180
.add(1500, "keydown", "KeyA", "a")
160181
.measure(1500),
182+
500,
183+
);
184+
});
185+
186+
test("Insert down,Insert up,character", (t) => {
187+
t.is(
188+
new Tester()
189+
.add(1100, "keydown", "Insert", "Insert")
190+
.add(1200, "keyup", "Insert", "Insert")
191+
.add(1300, "keydown", "KeyA", "a")
192+
.measure(1300),
161193
300,
162194
);
163195
});
164196

197+
test("Insert down,Insert up,Shift down,character", (t) => {
198+
t.is(
199+
new Tester()
200+
.add(1100, "keydown", "Insert", "Insert")
201+
.add(1200, "keyup", "Insert", "Insert")
202+
.add(1300, "keydown", "ShiftLeft", "Shift")
203+
.add(1400, "keydown", "KeyA", "a")
204+
.measure(1400),
205+
200,
206+
);
207+
});
208+
165209
class Tester {
166210
timeStamp = 1000;
167211
ttt = new TimeToType();

0 commit comments

Comments
 (0)