@@ -28,6 +28,7 @@ import TaskHeader from "./TaskHeader"
2828import AutoApproveMenu from "./AutoApproveMenu"
2929import { AudioType } from "../../../../src/shared/WebviewMessage"
3030import { validateCommand } from "../../utils/command-validation"
31+ import { modes } from "../../../../src/shared/modes"
3132
3233interface ChatViewProps {
3334 isHidden : boolean
@@ -38,6 +39,9 @@ interface ChatViewProps {
3839
3940export const MAX_IMAGES_PER_MESSAGE = 20 // Anthropic limits to 20 images
4041
42+ const isMac = navigator . platform . toUpperCase ( ) . indexOf ( "MAC" ) >= 0
43+ const modeShortcutText = `${ isMac ? "⌘" : "Ctrl" } + . for next mode`
44+
4145const ChatView = ( { isHidden, showAnnouncement, hideAnnouncement, showHistoryView } : ChatViewProps ) => {
4246 const {
4347 version,
@@ -963,6 +967,33 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
963967 isWriteToolAction ,
964968 ] )
965969
970+ // Add this new function to handle mode switching
971+ const switchToNextMode = useCallback ( ( ) => {
972+ const currentModeIndex = modes . findIndex ( ( m ) => m . slug === mode )
973+ const nextModeIndex = ( currentModeIndex + 1 ) % modes . length
974+ setMode ( modes [ nextModeIndex ] . slug )
975+ } , [ mode , setMode ] )
976+
977+ // Add keyboard event handler
978+ const handleKeyDown = useCallback (
979+ ( event : KeyboardEvent ) => {
980+ // Check for Command + . (period)
981+ if ( ( event . metaKey || event . ctrlKey ) && event . key === "." ) {
982+ event . preventDefault ( ) // Prevent default browser behavior
983+ switchToNextMode ( )
984+ }
985+ } ,
986+ [ switchToNextMode ] ,
987+ )
988+
989+ // Add event listener
990+ useEffect ( ( ) => {
991+ window . addEventListener ( "keydown" , handleKeyDown )
992+ return ( ) => {
993+ window . removeEventListener ( "keydown" , handleKeyDown )
994+ }
995+ } , [ handleKeyDown ] )
996+
966997 return (
967998 < div
968999 style = { {
@@ -1171,6 +1202,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
11711202 } }
11721203 mode = { mode }
11731204 setMode = { setMode }
1205+ modeShortcutText = { modeShortcutText }
11741206 />
11751207
11761208 < div id = "chat-view-portal" />
0 commit comments