Skip to content

Commit 969cae4

Browse files
authored
Add home and end key support in useInput (#829)
1 parent 61b030a commit 969cae4

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/hooks/use-input.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ export type Key = {
3737
*/
3838
pageUp: boolean;
3939

40+
/**
41+
Home key was pressed.
42+
*/
43+
home: boolean;
44+
45+
/**
46+
End key was pressed.
47+
*/
48+
end: boolean;
49+
4050
/**
4151
Return (Enter) key was pressed.
4252
*/
@@ -142,6 +152,8 @@ const useInput = (inputHandler: Handler, options: Options = {}) => {
142152
rightArrow: keypress.name === 'right',
143153
pageDown: keypress.name === 'pagedown',
144154
pageUp: keypress.name === 'pageup',
155+
home: keypress.name === 'home',
156+
end: keypress.name === 'end',
145157
return: keypress.name === 'return',
146158
escape: keypress.name === 'escape',
147159
ctrl: keypress.ctrl,

test/fixtures/use-input.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,16 @@ function UserInput({test}: {readonly test: string | undefined}) {
116116
return;
117117
}
118118

119+
if (test === 'home' && key.home && !key.meta) {
120+
exit();
121+
return;
122+
}
123+
124+
if (test === 'end' && key.end && !key.meta) {
125+
exit();
126+
return;
127+
}
128+
119129
if (test === 'tab' && input === '' && key.tab && !key.ctrl) {
120130
exit();
121131
return;

test/hooks.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,20 @@ test.serial('useInput - handle page up', async t => {
225225
t.true(ps.output.includes('exited'));
226226
});
227227

228+
test.serial('useInput - handle home', async t => {
229+
const ps = term('use-input', ['home']);
230+
ps.write('\u001B[H');
231+
await ps.waitForExit();
232+
t.true(ps.output.includes('exited'));
233+
});
234+
235+
test.serial('useInput - handle end', async t => {
236+
const ps = term('use-input', ['end']);
237+
ps.write('\u001B[F');
238+
await ps.waitForExit();
239+
t.true(ps.output.includes('exited'));
240+
});
241+
228242
test.serial('useInput - handle tab', async t => {
229243
const ps = term('use-input', ['tab']);
230244
ps.write('\t');

0 commit comments

Comments
 (0)