Skip to content

Commit d04374b

Browse files
committed
Implement automatic focus and text selection for the chat input upon mode changes or new chat initiation
1 parent d237e15 commit d04374b

5 files changed

Lines changed: 14 additions & 2 deletions

File tree

packages/ui/src/components/editor/ChatInput/ChatInput.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type Props = {
3939
}
4040
caret_position_to_set?: number
4141
on_caret_position_set?: () => void
42+
focus_key?: number
4243
}
4344

4445
const format_token_count = (count?: number) => {
@@ -76,8 +77,9 @@ export const ChatInput: React.FC<Props> = (props) => {
7677
useEffect(() => {
7778
if (textarea_ref.current) {
7879
textarea_ref.current.focus()
80+
textarea_ref.current.select()
7981
}
80-
}, [props.value])
82+
}, [props.focus_key])
8183

8284
const get_highlighted_text = (text: string) => {
8385
if (props.is_in_code_completions_mode) {

packages/vscode/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "gemini-coder",
33
"displayName": "Code Web Chat (CWC)",
44
"description": "Free AI pair programming",
5-
"version": "1.307.0",
5+
"version": "1.308.0",
66
"scripts": {
77
"build": "npx vsce package --no-dependencies",
88
"vscode:prepublish": "rimraf out && npm run compile",

packages/vscode/src/view/frontend/View.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const View = () => {
4444
const [home_view_type, set_home_view_type] = useState<HomeViewType>()
4545
const [web_mode, set_web_mode] = useState<WebMode>()
4646
const [api_mode, set_api_mode] = useState<ApiMode>()
47+
const [chat_input_focus_key, set_chat_input_focus_key] = useState(0)
4748

4849
const handle_mouse_enter = () => {
4950
post_message(vscode, {
@@ -146,6 +147,7 @@ export const View = () => {
146147

147148
const handle_web_mode_change = (new_mode: WebMode) => {
148149
set_web_mode(new_mode)
150+
set_chat_input_focus_key((k) => k + 1)
149151
post_message(vscode, {
150152
command: 'SAVE_WEB_MODE',
151153
mode: new_mode
@@ -157,6 +159,7 @@ export const View = () => {
157159

158160
const handle_api_mode_change = (new_mode: ApiMode) => {
159161
set_api_mode(new_mode)
162+
set_chat_input_focus_key((k) => k + 1)
160163
post_message(vscode, {
161164
command: 'SAVE_API_MODE',
162165
mode: new_mode
@@ -344,6 +347,7 @@ export const View = () => {
344347
has_active_selection={has_active_selection}
345348
on_web_mode_change={handle_web_mode_change}
346349
on_api_mode_change={handle_api_mode_change}
350+
chat_input_focus_key={chat_input_focus_key}
347351
/>
348352
</div>
349353
<div
@@ -356,11 +360,13 @@ export const View = () => {
356360
set_active_view('home')
357361
handle_home_view_type_change(HOME_VIEW_TYPES.WEB)
358362
handle_web_mode_change('edit-context')
363+
set_chat_input_focus_key((k) => k + 1)
359364
}}
360365
on_api_call={() => {
361366
set_active_view('home')
362367
handle_home_view_type_change(HOME_VIEW_TYPES.API)
363368
handle_api_mode_change('edit-context')
369+
set_chat_input_focus_key((k) => k + 1)
364370
}}
365371
version={version}
366372
/>

packages/vscode/src/view/frontend/home/Home.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ type Props = {
3737
on_api_mode_change: (mode: ApiMode) => void
3838
has_active_editor: boolean
3939
has_active_selection: boolean
40+
chat_input_focus_key: number
4041
}
4142

4243
export const Home: React.FC<Props> = (props) => {
@@ -576,6 +577,7 @@ export const Home: React.FC<Props> = (props) => {
576577
}
577578
caret_position_to_set={caret_position_to_set}
578579
on_caret_position_set={() => set_caret_position_to_set(undefined)}
580+
chat_input_focus_key={props.chat_input_focus_key}
579581
/>
580582
)
581583
}

packages/vscode/src/view/frontend/home/HomeView/HomeView.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ type Props = {
7373
on_code_completion_with_quick_pick_click: () => void
7474
caret_position_to_set?: number
7575
on_caret_position_set?: () => void
76+
chat_input_focus_key: number
7677
}
7778

7879
const web_mode_labels: Record<WebMode, string> = {
@@ -359,6 +360,7 @@ export const HomeView: React.FC<Props> = (props) => {
359360
}}
360361
caret_position_to_set={props.caret_position_to_set}
361362
on_caret_position_set={props.on_caret_position_set}
363+
focus_key={props.chat_input_focus_key}
362364
/>
363365
</div>
364366

0 commit comments

Comments
 (0)