MCPcopy Create free account
hub / github.com/anus-dev/ANUS / VimModeProvider

Function VimModeProvider

packages/cli/src/ui/contexts/VimModeContext.tsx:28–72  ·  view source on GitHub ↗
({
  children,
  settings,
}: {
  children: React.ReactNode;
  settings: LoadedSettings;
})

Source from the content-addressed store, hash-verified

26const VimModeContext = createContext<VimModeContextType | undefined>(undefined);
27
28export const VimModeProvider = ({
29 children,
30 settings,
31}: {
32 children: React.ReactNode;
33 settings: LoadedSettings;
34}) => {
35 const initialVimEnabled = settings.merged.vimMode ?? false;
36 const [vimEnabled, setVimEnabled] = useState(initialVimEnabled);
37 const [vimMode, setVimMode] = useState<VimMode>(
38 initialVimEnabled ? 'NORMAL' : 'INSERT',
39 );
40
41 useEffect(() => {
42 // Initialize vimEnabled from settings on mount
43 const enabled = settings.merged.vimMode ?? false;
44 setVimEnabled(enabled);
45 // When vim mode is enabled, always start in NORMAL mode
46 if (enabled) {
47 setVimMode('NORMAL');
48 }
49 }, [settings.merged.vimMode]);
50
51 const toggleVimEnabled = useCallback(async () => {
52 const newValue = !vimEnabled;
53 setVimEnabled(newValue);
54 // When enabling vim mode, start in NORMAL mode
55 if (newValue) {
56 setVimMode('NORMAL');
57 }
58 await settings.setValue(SettingScope.User, 'vimMode', newValue);
59 return newValue;
60 }, [vimEnabled, settings]);
61
62 const value = {
63 vimEnabled,
64 vimMode,
65 toggleVimEnabled,
66 setVimMode,
67 };
68
69 return (
70 <VimModeContext.Provider value={value}>{children}</VimModeContext.Provider>
71 );
72};
73
74export const useVimMode = () => {
75 const context = useContext(VimModeContext);

Callers

nothing calls this directly

Calls 1

setValueMethod · 0.45

Tested by

no test coverage detected