@vybestack/llxprt-code 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -2
- package/dist/package.json +4 -5
- package/dist/src/config/config.d.ts +4 -1
- package/dist/src/config/config.js +151 -54
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +1 -0
- package/dist/src/config/extension.js +4 -0
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/settings.d.ts +13 -3
- package/dist/src/config/settings.js +84 -23
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/gemini.d.ts +3 -0
- package/dist/src/gemini.js +212 -36
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/integration-tests/GITHUB_ACTIONS_README.md +41 -0
- package/dist/src/integration-tests/test-utils.d.ts +68 -0
- package/dist/src/integration-tests/test-utils.js +167 -0
- package/dist/src/integration-tests/test-utils.js.map +1 -0
- package/dist/src/nonInteractiveCli.js +24 -66
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/IFileSystem.d.ts +42 -0
- package/dist/src/providers/IFileSystem.js +46 -0
- package/dist/src/providers/IFileSystem.js.map +1 -0
- package/dist/src/providers/providerConfigUtils.d.ts +0 -4
- package/dist/src/providers/providerConfigUtils.js +21 -52
- package/dist/src/providers/providerConfigUtils.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.d.ts +6 -1
- package/dist/src/providers/providerManagerInstance.js +117 -82
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +13 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/CommandService.d.ts +8 -4
- package/dist/src/services/CommandService.js +24 -8
- package/dist/src/services/CommandService.js.map +1 -1
- package/dist/src/services/FileCommandLoader.d.ts +15 -3
- package/dist/src/services/FileCommandLoader.js +94 -42
- package/dist/src/services/FileCommandLoader.js.map +1 -1
- package/dist/src/services/McpPromptLoader.d.ts +25 -0
- package/dist/src/services/McpPromptLoader.js +192 -0
- package/dist/src/services/McpPromptLoader.js.map +1 -0
- package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
- package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
- package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
- package/dist/src/services/prompt-processors/types.d.ts +4 -0
- package/dist/src/services/prompt-processors/types.js +4 -0
- package/dist/src/services/prompt-processors/types.js.map +1 -1
- package/dist/src/ui/App.js +325 -195
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/aboutCommand.js +2 -5
- package/dist/src/ui/commands/aboutCommand.js.map +1 -1
- package/dist/src/ui/commands/baseurlCommand.js +54 -9
- package/dist/src/ui/commands/baseurlCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +39 -1
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.d.ts +10 -0
- package/dist/src/ui/commands/diagnosticsCommand.js +122 -0
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -0
- package/dist/src/ui/commands/directoryCommand.d.ts +8 -0
- package/dist/src/ui/commands/directoryCommand.js +116 -0
- package/dist/src/ui/commands/directoryCommand.js.map +1 -0
- package/dist/src/ui/commands/ideCommand.js +101 -105
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/initCommand.d.ts +7 -0
- package/dist/src/ui/commands/initCommand.js +108 -0
- package/dist/src/ui/commands/initCommand.js.map +1 -0
- package/dist/src/ui/commands/keyCommand.js +75 -11
- package/dist/src/ui/commands/keyCommand.js.map +1 -1
- package/dist/src/ui/commands/keyfileCommand.js +54 -13
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +53 -8
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.js +2 -1
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/modelCommand.js +2 -5
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.d.ts +10 -0
- package/dist/src/ui/commands/profileCommand.js +592 -0
- package/dist/src/ui/commands/profileCommand.js.map +1 -0
- package/dist/src/ui/commands/providerCommand.js +46 -3
- package/dist/src/ui/commands/providerCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.d.ts +7 -0
- package/dist/src/ui/commands/setCommand.js +431 -0
- package/dist/src/ui/commands/setCommand.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.d.ts +7 -0
- package/dist/src/ui/commands/setupGithubCommand.js +49 -0
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +23 -4
- package/dist/src/ui/commands/types.js +1 -0
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/vimCommand.js +0 -7
- package/dist/src/ui/commands/vimCommand.js.map +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +3 -3
- package/dist/src/ui/components/ContextSummaryDisplay.js +8 -8
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.d.ts +6 -0
- package/dist/src/ui/components/DebugProfiler.js +26 -0
- package/dist/src/ui/components/DebugProfiler.js.map +1 -0
- package/dist/src/ui/components/Footer.d.ts +2 -0
- package/dist/src/ui/components/Footer.js +5 -4
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Header.js +1 -1
- package/dist/src/ui/components/Header.js.map +1 -1
- package/dist/src/ui/components/Help.js +2 -2
- package/dist/src/ui/components/Help.js.map +1 -1
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +5 -4
- package/dist/src/ui/components/IDEContextDetailDisplay.js +6 -8
- package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +2 -0
- package/dist/src/ui/components/InputPrompt.js +128 -13
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoadProfileDialog.d.ts +13 -0
- package/dist/src/ui/components/LoadProfileDialog.js +57 -0
- package/dist/src/ui/components/LoadProfileDialog.js.map +1 -0
- package/dist/src/ui/components/PrepareLabel.d.ts +15 -0
- package/dist/src/ui/components/PrepareLabel.js +16 -0
- package/dist/src/ui/components/PrepareLabel.js.map +1 -0
- package/dist/src/ui/components/ProviderModelDialog.js +75 -28
- package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
- package/dist/src/ui/components/SecureKeyInput.d.ts +15 -0
- package/dist/src/ui/components/SecureKeyInput.js +58 -0
- package/dist/src/ui/components/SecureKeyInput.js.map +1 -0
- package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
- package/dist/src/ui/components/ShellConfirmationDialog.js +45 -0
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
- package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -0
- package/dist/src/ui/components/SuggestionsDisplay.js +3 -3
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/Tips.js +1 -1
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +15 -4
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.js +4 -1
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.d.ts +270 -2
- package/dist/src/ui/components/shared/text-buffer.js +410 -70
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
- package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
- package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
- package/dist/src/ui/containers/SessionController.js +14 -15
- package/dist/src/ui/containers/SessionController.js.map +1 -1
- package/dist/src/ui/contexts/VimModeContext.js +2 -2
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
- package/dist/src/ui/editors/editorSettingsManager.js +2 -0
- package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.js +56 -48
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.js +139 -200
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -3
- package/dist/src/ui/hooks/slashCommandProcessor.js +219 -130
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +9 -0
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useCompletion.d.ts +5 -5
- package/dist/src/ui/hooks/useCompletion.js +7 -402
- package/dist/src/ui/hooks/useCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +58 -12
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useKeypress.js +5 -2
- package/dist/src/ui/hooks/useKeypress.js.map +1 -1
- package/dist/src/ui/hooks/useLoadProfileDialog.d.ts +27 -0
- package/dist/src/ui/hooks/useLoadProfileDialog.js +138 -0
- package/dist/src/ui/hooks/useLoadProfileDialog.js.map +1 -0
- package/dist/src/ui/hooks/useReactToolScheduler.js +0 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +19 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.js +54 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -0
- package/dist/src/ui/hooks/useShellHistory.d.ts +1 -0
- package/dist/src/ui/hooks/useShellHistory.js +30 -7
- package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.d.ts +24 -0
- package/dist/src/ui/hooks/useSlashCompletion.js +451 -0
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -0
- package/dist/src/ui/hooks/vim.d.ts +28 -0
- package/dist/src/ui/hooks/vim.js +630 -0
- package/dist/src/ui/hooks/vim.js.map +1 -0
- package/dist/src/ui/reducers/appReducer.d.ts +3 -2
- package/dist/src/ui/reducers/appReducer.js +1 -0
- package/dist/src/ui/reducers/appReducer.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.js +10 -1
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +1 -0
- package/dist/src/ui/themes/theme.js +19 -4
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/utils/renderLoopDetector.js +3 -3
- package/dist/src/ui/utils/renderLoopDetector.js.map +1 -1
- package/dist/src/ui/utils/secureInputHandler.d.ts +46 -0
- package/dist/src/ui/utils/secureInputHandler.js +128 -0
- package/dist/src/ui/utils/secureInputHandler.js.map +1 -0
- package/dist/src/ui/utils/textUtils.d.ts +0 -8
- package/dist/src/ui/utils/textUtils.js +0 -22
- package/dist/src/ui/utils/textUtils.js.map +1 -1
- package/dist/src/ui/utils/updateCheck.d.ts +7 -1
- package/dist/src/ui/utils/updateCheck.js +59 -25
- package/dist/src/ui/utils/updateCheck.js.map +1 -1
- package/dist/src/utils/events.d.ts +11 -0
- package/dist/src/utils/events.js +13 -0
- package/dist/src/utils/events.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +10 -0
- package/dist/src/utils/gitUtils.js +24 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/handleAutoUpdate.d.ts +11 -0
- package/dist/src/utils/handleAutoUpdate.js +101 -0
- package/dist/src/utils/handleAutoUpdate.js.map +1 -0
- package/dist/src/utils/installationInfo.d.ts +23 -0
- package/dist/src/utils/installationInfo.js +154 -0
- package/dist/src/utils/installationInfo.js.map +1 -0
- package/dist/src/utils/sandbox-macos-permissive-closed.sb +6 -0
- package/dist/src/utils/sandbox-macos-permissive-open.sb +6 -0
- package/dist/src/utils/sandbox-macos-permissive-proxied.sb +6 -0
- package/dist/src/utils/sandbox-macos-restrictive-closed.sb +6 -0
- package/dist/src/utils/sandbox-macos-restrictive-open.sb +6 -0
- package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +6 -0
- package/dist/src/utils/sandbox.d.ts +2 -2
- package/dist/src/utils/sandbox.js +35 -11
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/spawnWrapper.d.ts +7 -0
- package/dist/src/utils/spawnWrapper.js +8 -0
- package/dist/src/utils/spawnWrapper.js.map +1 -0
- package/dist/src/utils/updateEventEmitter.d.ts +11 -0
- package/dist/src/utils/updateEventEmitter.js +12 -0
- package/dist/src/utils/updateEventEmitter.js.map +1 -0
- package/dist/src/validateNonInterActiveAuth.d.ts +2 -1
- package/dist/src/validateNonInterActiveAuth.js +31 -5
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -5
- package/dist/src/providers/enhanceConfigWithProviders.d.ts +0 -12
- package/dist/src/providers/enhanceConfigWithProviders.js +0 -16
- package/dist/src/providers/enhanceConfigWithProviders.js.map +0 -1
@@ -0,0 +1,630 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { useCallback, useReducer, useEffect } from 'react';
|
7
|
+
import { useVimMode } from '../contexts/VimModeContext.js';
|
8
|
+
// Constants
|
9
|
+
const DIGIT_MULTIPLIER = 10;
|
10
|
+
const DEFAULT_COUNT = 1;
|
11
|
+
const DIGIT_1_TO_9 = /^[1-9]$/;
|
12
|
+
// Command types
|
13
|
+
const CMD_TYPES = {
|
14
|
+
DELETE_WORD_FORWARD: 'dw',
|
15
|
+
DELETE_WORD_BACKWARD: 'db',
|
16
|
+
DELETE_WORD_END: 'de',
|
17
|
+
CHANGE_WORD_FORWARD: 'cw',
|
18
|
+
CHANGE_WORD_BACKWARD: 'cb',
|
19
|
+
CHANGE_WORD_END: 'ce',
|
20
|
+
DELETE_CHAR: 'x',
|
21
|
+
DELETE_LINE: 'dd',
|
22
|
+
CHANGE_LINE: 'cc',
|
23
|
+
DELETE_TO_EOL: 'D',
|
24
|
+
CHANGE_TO_EOL: 'C',
|
25
|
+
CHANGE_MOVEMENT: {
|
26
|
+
LEFT: 'ch',
|
27
|
+
DOWN: 'cj',
|
28
|
+
UP: 'ck',
|
29
|
+
RIGHT: 'cl',
|
30
|
+
},
|
31
|
+
};
|
32
|
+
// Helper function to clear pending state
|
33
|
+
const createClearPendingState = () => ({
|
34
|
+
count: 0,
|
35
|
+
pendingOperator: null,
|
36
|
+
});
|
37
|
+
const initialVimState = {
|
38
|
+
mode: 'NORMAL',
|
39
|
+
count: 0,
|
40
|
+
pendingOperator: null,
|
41
|
+
lastCommand: null,
|
42
|
+
};
|
43
|
+
// Reducer function
|
44
|
+
const vimReducer = (state, action) => {
|
45
|
+
switch (action.type) {
|
46
|
+
case 'SET_MODE':
|
47
|
+
return { ...state, mode: action.mode };
|
48
|
+
case 'SET_COUNT':
|
49
|
+
return { ...state, count: action.count };
|
50
|
+
case 'INCREMENT_COUNT':
|
51
|
+
return { ...state, count: state.count * DIGIT_MULTIPLIER + action.digit };
|
52
|
+
case 'CLEAR_COUNT':
|
53
|
+
return { ...state, count: 0 };
|
54
|
+
case 'SET_PENDING_OPERATOR':
|
55
|
+
return { ...state, pendingOperator: action.operator };
|
56
|
+
case 'SET_LAST_COMMAND':
|
57
|
+
return { ...state, lastCommand: action.command };
|
58
|
+
case 'CLEAR_PENDING_STATES':
|
59
|
+
return {
|
60
|
+
...state,
|
61
|
+
...createClearPendingState(),
|
62
|
+
};
|
63
|
+
case 'ESCAPE_TO_NORMAL':
|
64
|
+
// Handle escape - clear all pending states (mode is updated via context)
|
65
|
+
return {
|
66
|
+
...state,
|
67
|
+
...createClearPendingState(),
|
68
|
+
};
|
69
|
+
default:
|
70
|
+
return state;
|
71
|
+
}
|
72
|
+
};
|
73
|
+
/**
|
74
|
+
* React hook that provides vim-style editing functionality for text input.
|
75
|
+
*
|
76
|
+
* Features:
|
77
|
+
* - Modal editing (INSERT/NORMAL modes)
|
78
|
+
* - Navigation: h,j,k,l,w,b,e,0,$,^,gg,G with count prefixes
|
79
|
+
* - Editing: x,a,i,o,O,A,I,d,c,D,C with count prefixes
|
80
|
+
* - Complex operations: dd,cc,dw,cw,db,cb,de,ce
|
81
|
+
* - Command repetition (.)
|
82
|
+
* - Settings persistence
|
83
|
+
*
|
84
|
+
* @param buffer - TextBuffer instance for text manipulation
|
85
|
+
* @param onSubmit - Optional callback for command submission
|
86
|
+
* @returns Object with vim state and input handler
|
87
|
+
*/
|
88
|
+
export function useVim(buffer, onSubmit) {
|
89
|
+
const { vimEnabled, vimMode, setVimMode } = useVimMode();
|
90
|
+
const [state, dispatch] = useReducer(vimReducer, initialVimState);
|
91
|
+
// Sync vim mode from context to local state
|
92
|
+
useEffect(() => {
|
93
|
+
dispatch({ type: 'SET_MODE', mode: vimMode });
|
94
|
+
}, [vimMode]);
|
95
|
+
// Helper to update mode in both reducer and context
|
96
|
+
const updateMode = useCallback((mode) => {
|
97
|
+
setVimMode(mode);
|
98
|
+
dispatch({ type: 'SET_MODE', mode });
|
99
|
+
}, [setVimMode]);
|
100
|
+
// Helper functions using the reducer state
|
101
|
+
const getCurrentCount = useCallback(() => state.count || DEFAULT_COUNT, [state.count]);
|
102
|
+
/** Executes common commands to eliminate duplication in dot (.) repeat command */
|
103
|
+
const executeCommand = useCallback((cmdType, count) => {
|
104
|
+
switch (cmdType) {
|
105
|
+
case CMD_TYPES.DELETE_WORD_FORWARD: {
|
106
|
+
buffer.vimDeleteWordForward(count);
|
107
|
+
break;
|
108
|
+
}
|
109
|
+
case CMD_TYPES.DELETE_WORD_BACKWARD: {
|
110
|
+
buffer.vimDeleteWordBackward(count);
|
111
|
+
break;
|
112
|
+
}
|
113
|
+
case CMD_TYPES.DELETE_WORD_END: {
|
114
|
+
buffer.vimDeleteWordEnd(count);
|
115
|
+
break;
|
116
|
+
}
|
117
|
+
case CMD_TYPES.CHANGE_WORD_FORWARD: {
|
118
|
+
buffer.vimChangeWordForward(count);
|
119
|
+
updateMode('INSERT');
|
120
|
+
break;
|
121
|
+
}
|
122
|
+
case CMD_TYPES.CHANGE_WORD_BACKWARD: {
|
123
|
+
buffer.vimChangeWordBackward(count);
|
124
|
+
updateMode('INSERT');
|
125
|
+
break;
|
126
|
+
}
|
127
|
+
case CMD_TYPES.CHANGE_WORD_END: {
|
128
|
+
buffer.vimChangeWordEnd(count);
|
129
|
+
updateMode('INSERT');
|
130
|
+
break;
|
131
|
+
}
|
132
|
+
case CMD_TYPES.DELETE_CHAR: {
|
133
|
+
buffer.vimDeleteChar(count);
|
134
|
+
break;
|
135
|
+
}
|
136
|
+
case CMD_TYPES.DELETE_LINE: {
|
137
|
+
buffer.vimDeleteLine(count);
|
138
|
+
break;
|
139
|
+
}
|
140
|
+
case CMD_TYPES.CHANGE_LINE: {
|
141
|
+
buffer.vimChangeLine(count);
|
142
|
+
updateMode('INSERT');
|
143
|
+
break;
|
144
|
+
}
|
145
|
+
case CMD_TYPES.CHANGE_MOVEMENT.LEFT:
|
146
|
+
case CMD_TYPES.CHANGE_MOVEMENT.DOWN:
|
147
|
+
case CMD_TYPES.CHANGE_MOVEMENT.UP:
|
148
|
+
case CMD_TYPES.CHANGE_MOVEMENT.RIGHT: {
|
149
|
+
const movementMap = {
|
150
|
+
[CMD_TYPES.CHANGE_MOVEMENT.LEFT]: 'h',
|
151
|
+
[CMD_TYPES.CHANGE_MOVEMENT.DOWN]: 'j',
|
152
|
+
[CMD_TYPES.CHANGE_MOVEMENT.UP]: 'k',
|
153
|
+
[CMD_TYPES.CHANGE_MOVEMENT.RIGHT]: 'l',
|
154
|
+
};
|
155
|
+
const movementType = movementMap[cmdType];
|
156
|
+
if (movementType) {
|
157
|
+
buffer.vimChangeMovement(movementType, count);
|
158
|
+
updateMode('INSERT');
|
159
|
+
}
|
160
|
+
break;
|
161
|
+
}
|
162
|
+
case CMD_TYPES.DELETE_TO_EOL: {
|
163
|
+
buffer.vimDeleteToEndOfLine();
|
164
|
+
break;
|
165
|
+
}
|
166
|
+
case CMD_TYPES.CHANGE_TO_EOL: {
|
167
|
+
buffer.vimChangeToEndOfLine();
|
168
|
+
updateMode('INSERT');
|
169
|
+
break;
|
170
|
+
}
|
171
|
+
default:
|
172
|
+
return false;
|
173
|
+
}
|
174
|
+
return true;
|
175
|
+
}, [buffer, updateMode]);
|
176
|
+
/**
|
177
|
+
* Handles key input in INSERT mode
|
178
|
+
* @param normalizedKey - The normalized key input
|
179
|
+
* @returns boolean indicating if the key was handled
|
180
|
+
*/
|
181
|
+
const handleInsertModeInput = useCallback((normalizedKey) => {
|
182
|
+
// Handle escape key immediately - switch to NORMAL mode on any escape
|
183
|
+
if (normalizedKey.name === 'escape') {
|
184
|
+
// Vim behavior: move cursor left when exiting insert mode (unless at beginning of line)
|
185
|
+
buffer.vimEscapeInsertMode();
|
186
|
+
dispatch({ type: 'ESCAPE_TO_NORMAL' });
|
187
|
+
updateMode('NORMAL');
|
188
|
+
return true;
|
189
|
+
}
|
190
|
+
// In INSERT mode, let InputPrompt handle completion keys and special commands
|
191
|
+
if (normalizedKey.name === 'tab' ||
|
192
|
+
(normalizedKey.name === 'return' && !normalizedKey.ctrl) ||
|
193
|
+
normalizedKey.name === 'up' ||
|
194
|
+
normalizedKey.name === 'down') {
|
195
|
+
return false; // Let InputPrompt handle completion
|
196
|
+
}
|
197
|
+
// Let InputPrompt handle Ctrl+V for clipboard image pasting
|
198
|
+
if (normalizedKey.ctrl && normalizedKey.name === 'v') {
|
199
|
+
return false; // Let InputPrompt handle clipboard functionality
|
200
|
+
}
|
201
|
+
// Special handling for Enter key to allow command submission (lower priority than completion)
|
202
|
+
if (normalizedKey.name === 'return' &&
|
203
|
+
!normalizedKey.ctrl &&
|
204
|
+
!normalizedKey.meta) {
|
205
|
+
if (buffer.text.trim() && onSubmit) {
|
206
|
+
// Handle command submission directly
|
207
|
+
const submittedValue = buffer.text;
|
208
|
+
buffer.setText('');
|
209
|
+
onSubmit(submittedValue);
|
210
|
+
return true;
|
211
|
+
}
|
212
|
+
return true; // Handled by vim (even if no onSubmit callback)
|
213
|
+
}
|
214
|
+
// useKeypress already provides the correct format for TextBuffer
|
215
|
+
buffer.handleInput(normalizedKey);
|
216
|
+
return true; // Handled by vim
|
217
|
+
}, [buffer, dispatch, updateMode, onSubmit]);
|
218
|
+
/**
|
219
|
+
* Normalizes key input to ensure all required properties are present
|
220
|
+
* @param key - Raw key input
|
221
|
+
* @returns Normalized key with all properties
|
222
|
+
*/
|
223
|
+
const normalizeKey = useCallback((key) => ({
|
224
|
+
name: key.name || '',
|
225
|
+
sequence: key.sequence || '',
|
226
|
+
ctrl: key.ctrl || false,
|
227
|
+
meta: key.meta || false,
|
228
|
+
shift: key.shift || false,
|
229
|
+
paste: key.paste || false,
|
230
|
+
}), []);
|
231
|
+
/**
|
232
|
+
* Handles change movement commands (ch, cj, ck, cl)
|
233
|
+
* @param movement - The movement direction
|
234
|
+
* @returns boolean indicating if command was handled
|
235
|
+
*/
|
236
|
+
const handleChangeMovement = useCallback((movement) => {
|
237
|
+
const count = getCurrentCount();
|
238
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
239
|
+
buffer.vimChangeMovement(movement, count);
|
240
|
+
updateMode('INSERT');
|
241
|
+
const cmdTypeMap = {
|
242
|
+
h: CMD_TYPES.CHANGE_MOVEMENT.LEFT,
|
243
|
+
j: CMD_TYPES.CHANGE_MOVEMENT.DOWN,
|
244
|
+
k: CMD_TYPES.CHANGE_MOVEMENT.UP,
|
245
|
+
l: CMD_TYPES.CHANGE_MOVEMENT.RIGHT,
|
246
|
+
};
|
247
|
+
dispatch({
|
248
|
+
type: 'SET_LAST_COMMAND',
|
249
|
+
command: { type: cmdTypeMap[movement], count },
|
250
|
+
});
|
251
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: null });
|
252
|
+
return true;
|
253
|
+
}, [getCurrentCount, dispatch, buffer, updateMode]);
|
254
|
+
/**
|
255
|
+
* Handles operator-motion commands (dw/cw, db/cb, de/ce)
|
256
|
+
* @param operator - The operator type ('d' for delete, 'c' for change)
|
257
|
+
* @param motion - The motion type ('w', 'b', 'e')
|
258
|
+
* @returns boolean indicating if command was handled
|
259
|
+
*/
|
260
|
+
const handleOperatorMotion = useCallback((operator, motion) => {
|
261
|
+
const count = getCurrentCount();
|
262
|
+
const commandMap = {
|
263
|
+
d: {
|
264
|
+
w: CMD_TYPES.DELETE_WORD_FORWARD,
|
265
|
+
b: CMD_TYPES.DELETE_WORD_BACKWARD,
|
266
|
+
e: CMD_TYPES.DELETE_WORD_END,
|
267
|
+
},
|
268
|
+
c: {
|
269
|
+
w: CMD_TYPES.CHANGE_WORD_FORWARD,
|
270
|
+
b: CMD_TYPES.CHANGE_WORD_BACKWARD,
|
271
|
+
e: CMD_TYPES.CHANGE_WORD_END,
|
272
|
+
},
|
273
|
+
};
|
274
|
+
const cmdType = commandMap[operator][motion];
|
275
|
+
executeCommand(cmdType, count);
|
276
|
+
dispatch({
|
277
|
+
type: 'SET_LAST_COMMAND',
|
278
|
+
command: { type: cmdType, count },
|
279
|
+
});
|
280
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
281
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: null });
|
282
|
+
return true;
|
283
|
+
}, [getCurrentCount, executeCommand, dispatch]);
|
284
|
+
const handleInput = useCallback((key) => {
|
285
|
+
if (!vimEnabled) {
|
286
|
+
return false; // Let InputPrompt handle it
|
287
|
+
}
|
288
|
+
let normalizedKey;
|
289
|
+
try {
|
290
|
+
normalizedKey = normalizeKey(key);
|
291
|
+
}
|
292
|
+
catch (error) {
|
293
|
+
// Handle malformed key inputs gracefully
|
294
|
+
console.warn('Malformed key input in vim mode:', key, error);
|
295
|
+
return false;
|
296
|
+
}
|
297
|
+
// Handle INSERT mode
|
298
|
+
if (state.mode === 'INSERT') {
|
299
|
+
return handleInsertModeInput(normalizedKey);
|
300
|
+
}
|
301
|
+
// Handle NORMAL mode
|
302
|
+
if (state.mode === 'NORMAL') {
|
303
|
+
// Handle Escape key in NORMAL mode - clear all pending states
|
304
|
+
if (normalizedKey.name === 'escape') {
|
305
|
+
dispatch({ type: 'CLEAR_PENDING_STATES' });
|
306
|
+
return true; // Handled by vim
|
307
|
+
}
|
308
|
+
// Handle count input (numbers 1-9, and 0 if count > 0)
|
309
|
+
if (DIGIT_1_TO_9.test(normalizedKey.sequence) ||
|
310
|
+
(normalizedKey.sequence === '0' && state.count > 0)) {
|
311
|
+
dispatch({
|
312
|
+
type: 'INCREMENT_COUNT',
|
313
|
+
digit: parseInt(normalizedKey.sequence, 10),
|
314
|
+
});
|
315
|
+
return true; // Handled by vim
|
316
|
+
}
|
317
|
+
const repeatCount = getCurrentCount();
|
318
|
+
switch (normalizedKey.sequence) {
|
319
|
+
case 'h': {
|
320
|
+
// Check if this is part of a change command (ch)
|
321
|
+
if (state.pendingOperator === 'c') {
|
322
|
+
return handleChangeMovement('h');
|
323
|
+
}
|
324
|
+
// Normal left movement
|
325
|
+
buffer.vimMoveLeft(repeatCount);
|
326
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
327
|
+
return true;
|
328
|
+
}
|
329
|
+
case 'j': {
|
330
|
+
// Check if this is part of a change command (cj)
|
331
|
+
if (state.pendingOperator === 'c') {
|
332
|
+
return handleChangeMovement('j');
|
333
|
+
}
|
334
|
+
// Normal down movement
|
335
|
+
buffer.vimMoveDown(repeatCount);
|
336
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
337
|
+
return true;
|
338
|
+
}
|
339
|
+
case 'k': {
|
340
|
+
// Check if this is part of a change command (ck)
|
341
|
+
if (state.pendingOperator === 'c') {
|
342
|
+
return handleChangeMovement('k');
|
343
|
+
}
|
344
|
+
// Normal up movement
|
345
|
+
buffer.vimMoveUp(repeatCount);
|
346
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
347
|
+
return true;
|
348
|
+
}
|
349
|
+
case 'l': {
|
350
|
+
// Check if this is part of a change command (cl)
|
351
|
+
if (state.pendingOperator === 'c') {
|
352
|
+
return handleChangeMovement('l');
|
353
|
+
}
|
354
|
+
// Normal right movement
|
355
|
+
buffer.vimMoveRight(repeatCount);
|
356
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
357
|
+
return true;
|
358
|
+
}
|
359
|
+
case 'w': {
|
360
|
+
// Check if this is part of a delete or change command (dw/cw)
|
361
|
+
if (state.pendingOperator === 'd') {
|
362
|
+
return handleOperatorMotion('d', 'w');
|
363
|
+
}
|
364
|
+
if (state.pendingOperator === 'c') {
|
365
|
+
return handleOperatorMotion('c', 'w');
|
366
|
+
}
|
367
|
+
// Normal word movement
|
368
|
+
buffer.vimMoveWordForward(repeatCount);
|
369
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
370
|
+
return true;
|
371
|
+
}
|
372
|
+
case 'b': {
|
373
|
+
// Check if this is part of a delete or change command (db/cb)
|
374
|
+
if (state.pendingOperator === 'd') {
|
375
|
+
return handleOperatorMotion('d', 'b');
|
376
|
+
}
|
377
|
+
if (state.pendingOperator === 'c') {
|
378
|
+
return handleOperatorMotion('c', 'b');
|
379
|
+
}
|
380
|
+
// Normal backward word movement
|
381
|
+
buffer.vimMoveWordBackward(repeatCount);
|
382
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
383
|
+
return true;
|
384
|
+
}
|
385
|
+
case 'e': {
|
386
|
+
// Check if this is part of a delete or change command (de/ce)
|
387
|
+
if (state.pendingOperator === 'd') {
|
388
|
+
return handleOperatorMotion('d', 'e');
|
389
|
+
}
|
390
|
+
if (state.pendingOperator === 'c') {
|
391
|
+
return handleOperatorMotion('c', 'e');
|
392
|
+
}
|
393
|
+
// Normal word end movement
|
394
|
+
buffer.vimMoveWordEnd(repeatCount);
|
395
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
396
|
+
return true;
|
397
|
+
}
|
398
|
+
case 'x': {
|
399
|
+
// Delete character under cursor
|
400
|
+
buffer.vimDeleteChar(repeatCount);
|
401
|
+
dispatch({
|
402
|
+
type: 'SET_LAST_COMMAND',
|
403
|
+
command: { type: CMD_TYPES.DELETE_CHAR, count: repeatCount },
|
404
|
+
});
|
405
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
406
|
+
return true;
|
407
|
+
}
|
408
|
+
case 'i': {
|
409
|
+
// Enter INSERT mode at current position
|
410
|
+
buffer.vimInsertAtCursor();
|
411
|
+
updateMode('INSERT');
|
412
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
413
|
+
return true;
|
414
|
+
}
|
415
|
+
case 'a': {
|
416
|
+
// Enter INSERT mode after current position
|
417
|
+
buffer.vimAppendAtCursor();
|
418
|
+
updateMode('INSERT');
|
419
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
420
|
+
return true;
|
421
|
+
}
|
422
|
+
case 'o': {
|
423
|
+
// Insert new line after current line and enter INSERT mode
|
424
|
+
buffer.vimOpenLineBelow();
|
425
|
+
updateMode('INSERT');
|
426
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
427
|
+
return true;
|
428
|
+
}
|
429
|
+
case 'O': {
|
430
|
+
// Insert new line before current line and enter INSERT mode
|
431
|
+
buffer.vimOpenLineAbove();
|
432
|
+
updateMode('INSERT');
|
433
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
434
|
+
return true;
|
435
|
+
}
|
436
|
+
case '0': {
|
437
|
+
// Move to start of line
|
438
|
+
buffer.vimMoveToLineStart();
|
439
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
440
|
+
return true;
|
441
|
+
}
|
442
|
+
case '$': {
|
443
|
+
// Move to end of line
|
444
|
+
buffer.vimMoveToLineEnd();
|
445
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
446
|
+
return true;
|
447
|
+
}
|
448
|
+
case '^': {
|
449
|
+
// Move to first non-whitespace character
|
450
|
+
buffer.vimMoveToFirstNonWhitespace();
|
451
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
452
|
+
return true;
|
453
|
+
}
|
454
|
+
case 'g': {
|
455
|
+
if (state.pendingOperator === 'g') {
|
456
|
+
// Second 'g' - go to first line (gg command)
|
457
|
+
buffer.vimMoveToFirstLine();
|
458
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: null });
|
459
|
+
}
|
460
|
+
else {
|
461
|
+
// First 'g' - wait for second g
|
462
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: 'g' });
|
463
|
+
}
|
464
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
465
|
+
return true;
|
466
|
+
}
|
467
|
+
case 'G': {
|
468
|
+
if (state.count > 0) {
|
469
|
+
// Go to specific line number (1-based) when a count was provided
|
470
|
+
buffer.vimMoveToLine(state.count);
|
471
|
+
}
|
472
|
+
else {
|
473
|
+
// Go to last line when no count was provided
|
474
|
+
buffer.vimMoveToLastLine();
|
475
|
+
}
|
476
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
477
|
+
return true;
|
478
|
+
}
|
479
|
+
case 'I': {
|
480
|
+
// Enter INSERT mode at start of line (first non-whitespace)
|
481
|
+
buffer.vimInsertAtLineStart();
|
482
|
+
updateMode('INSERT');
|
483
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
484
|
+
return true;
|
485
|
+
}
|
486
|
+
case 'A': {
|
487
|
+
// Enter INSERT mode at end of line
|
488
|
+
buffer.vimAppendAtLineEnd();
|
489
|
+
updateMode('INSERT');
|
490
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
491
|
+
return true;
|
492
|
+
}
|
493
|
+
case 'd': {
|
494
|
+
if (state.pendingOperator === 'd') {
|
495
|
+
// Second 'd' - delete N lines (dd command)
|
496
|
+
const repeatCount = getCurrentCount();
|
497
|
+
executeCommand(CMD_TYPES.DELETE_LINE, repeatCount);
|
498
|
+
dispatch({
|
499
|
+
type: 'SET_LAST_COMMAND',
|
500
|
+
command: { type: CMD_TYPES.DELETE_LINE, count: repeatCount },
|
501
|
+
});
|
502
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
503
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: null });
|
504
|
+
}
|
505
|
+
else {
|
506
|
+
// First 'd' - wait for movement command
|
507
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: 'd' });
|
508
|
+
}
|
509
|
+
return true;
|
510
|
+
}
|
511
|
+
case 'c': {
|
512
|
+
if (state.pendingOperator === 'c') {
|
513
|
+
// Second 'c' - change N entire lines (cc command)
|
514
|
+
const repeatCount = getCurrentCount();
|
515
|
+
executeCommand(CMD_TYPES.CHANGE_LINE, repeatCount);
|
516
|
+
dispatch({
|
517
|
+
type: 'SET_LAST_COMMAND',
|
518
|
+
command: { type: CMD_TYPES.CHANGE_LINE, count: repeatCount },
|
519
|
+
});
|
520
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
521
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: null });
|
522
|
+
}
|
523
|
+
else {
|
524
|
+
// First 'c' - wait for movement command
|
525
|
+
dispatch({ type: 'SET_PENDING_OPERATOR', operator: 'c' });
|
526
|
+
}
|
527
|
+
return true;
|
528
|
+
}
|
529
|
+
case 'D': {
|
530
|
+
// Delete from cursor to end of line (equivalent to d$)
|
531
|
+
executeCommand(CMD_TYPES.DELETE_TO_EOL, 1);
|
532
|
+
dispatch({
|
533
|
+
type: 'SET_LAST_COMMAND',
|
534
|
+
command: { type: CMD_TYPES.DELETE_TO_EOL, count: 1 },
|
535
|
+
});
|
536
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
537
|
+
return true;
|
538
|
+
}
|
539
|
+
case 'C': {
|
540
|
+
// Change from cursor to end of line (equivalent to c$)
|
541
|
+
executeCommand(CMD_TYPES.CHANGE_TO_EOL, 1);
|
542
|
+
dispatch({
|
543
|
+
type: 'SET_LAST_COMMAND',
|
544
|
+
command: { type: CMD_TYPES.CHANGE_TO_EOL, count: 1 },
|
545
|
+
});
|
546
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
547
|
+
return true;
|
548
|
+
}
|
549
|
+
case '.': {
|
550
|
+
// Repeat last command
|
551
|
+
if (state.lastCommand) {
|
552
|
+
const cmdData = state.lastCommand;
|
553
|
+
// All repeatable commands are now handled by executeCommand
|
554
|
+
executeCommand(cmdData.type, cmdData.count);
|
555
|
+
}
|
556
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
557
|
+
return true;
|
558
|
+
}
|
559
|
+
default: {
|
560
|
+
// Check for arrow keys (they have different sequences but known names)
|
561
|
+
if (normalizedKey.name === 'left') {
|
562
|
+
// Left arrow - same as 'h'
|
563
|
+
if (state.pendingOperator === 'c') {
|
564
|
+
return handleChangeMovement('h');
|
565
|
+
}
|
566
|
+
// Normal left movement (same as 'h')
|
567
|
+
buffer.vimMoveLeft(repeatCount);
|
568
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
569
|
+
return true;
|
570
|
+
}
|
571
|
+
if (normalizedKey.name === 'down') {
|
572
|
+
// Down arrow - same as 'j'
|
573
|
+
if (state.pendingOperator === 'c') {
|
574
|
+
return handleChangeMovement('j');
|
575
|
+
}
|
576
|
+
// Normal down movement (same as 'j')
|
577
|
+
buffer.vimMoveDown(repeatCount);
|
578
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
579
|
+
return true;
|
580
|
+
}
|
581
|
+
if (normalizedKey.name === 'up') {
|
582
|
+
// Up arrow - same as 'k'
|
583
|
+
if (state.pendingOperator === 'c') {
|
584
|
+
return handleChangeMovement('k');
|
585
|
+
}
|
586
|
+
// Normal up movement (same as 'k')
|
587
|
+
buffer.vimMoveUp(repeatCount);
|
588
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
589
|
+
return true;
|
590
|
+
}
|
591
|
+
if (normalizedKey.name === 'right') {
|
592
|
+
// Right arrow - same as 'l'
|
593
|
+
if (state.pendingOperator === 'c') {
|
594
|
+
return handleChangeMovement('l');
|
595
|
+
}
|
596
|
+
// Normal right movement (same as 'l')
|
597
|
+
buffer.vimMoveRight(repeatCount);
|
598
|
+
dispatch({ type: 'CLEAR_COUNT' });
|
599
|
+
return true;
|
600
|
+
}
|
601
|
+
// Unknown command, clear count and pending states
|
602
|
+
dispatch({ type: 'CLEAR_PENDING_STATES' });
|
603
|
+
return true; // Still handled by vim to prevent other handlers
|
604
|
+
}
|
605
|
+
}
|
606
|
+
}
|
607
|
+
return false; // Not handled by vim
|
608
|
+
}, [
|
609
|
+
vimEnabled,
|
610
|
+
normalizeKey,
|
611
|
+
handleInsertModeInput,
|
612
|
+
state.mode,
|
613
|
+
state.count,
|
614
|
+
state.pendingOperator,
|
615
|
+
state.lastCommand,
|
616
|
+
dispatch,
|
617
|
+
getCurrentCount,
|
618
|
+
handleChangeMovement,
|
619
|
+
handleOperatorMotion,
|
620
|
+
buffer,
|
621
|
+
executeCommand,
|
622
|
+
updateMode,
|
623
|
+
]);
|
624
|
+
return {
|
625
|
+
mode: state.mode,
|
626
|
+
vimModeEnabled: vimEnabled,
|
627
|
+
handleInput, // Expose the input handler for InputPrompt to use
|
628
|
+
};
|
629
|
+
}
|
630
|
+
//# sourceMappingURL=vim.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"vim.js","sourceRoot":"","sources":["../../../../src/ui/hooks/vim.ts"],"names":[],"mappings":"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"}
|