Change:
uses quick chat and has found that going between the input and the response is cumbersome because of our underlying list structure. This is in particular an issue because we now have many hyperlinked tab stops. ! We should provide a way to go between the input and the focused response. AFAICT, there is not a way to do this. Pressing seems to focus the input (unexpectedly), but there's no way to get back to the response. Thoughts?
Makes sense. Probably just need to handle the keybindings better
these probably just need logic for QC
Tyler figured out that there is a way to do this, but it's in the reverse direction from what one might expect based on tab order. Use to focus the input and to focus the last response.
Talked to JooYoung and it's fine to have these reversed, we'll want to be sure that using doesn't still focus the input box.
working afaict - and for response -input and vice versa, tab works fine as well

Discussion:
import { IChatEditorOptions } from '../chatEditor.js'; import { ChatEditorInput } from '../chatEditorInput.js'; import { ChatViewPane } from '../chatViewPane.js'; <del> import { CONTEXT_CHAT_ENABLED, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION } from '../../common/chatContextKeys.js'; </del> <ins> import { CONTEXT_CHAT_ENABLED, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_QUICK_CHAT } from '../../common/chatContextKeys.js'; </ins> import { IChatDetail, IChatService } from '../../common/chatService.js'; import { IChatRequestViewModel, IChatResponseViewModel, isRequestVM } from '../../common/chatViewModel.js'; import { IChatWidgetHistoryService } from '../../common/chatWidgetHistoryService.js';

keybinding: [ // On mac, require that the cursor is at the top of the input, to avoid stealing cmd+up to move the cursor to the top { <del> when: CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, </del> <ins> when: ContextKeyExpr.and(CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_QUICK_CHAT.negate()), </ins> primary: KeyMod.CtrlCmd | KeyCode.UpArrow, weight: KeybindingWeight.EditorContrib, }, // On win/linux, ctrl+up can always focus the chat list { <del> when: ContextKeyExpr.or(IsWindowsContext, IsLinuxContext), </del> <ins> when: ContextKeyExpr.and(ContextKeyExpr.or(IsWindowsContext, IsLinuxContext), CONTEXT_IN_QUICK_CHAT.negate()), </ins> primary: KeyMod.CtrlCmd | KeyCode.UpArrow, weight: KeybindingWeight.EditorContrib, <ins> }, { when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_QUICK_CHAT), primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, </ins> } ] });

id: 'workbench.action.chat.focusInput', title: localize2('interactiveSession.focusInput.label', "Focus Chat Input"), f1: false, <del> keybinding: { primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate()) } </del> <ins> keybinding: [ { primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate(), CONTEXT_IN_QUICK_CHAT.negate()), }, { when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate(), CONTEXT_IN_QUICK_CHAT), primary: KeyMod.CtrlCmd | KeyCode.UpArrow, weight: KeybindingWeight.WorkbenchContrib, } ] </ins> }); } run(accessor: ServicesAccessor, ...args: any[]) {