diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts index b1f7074e30b..757b17aaa11 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.ts @@ -1425,6 +1425,13 @@ export class InlineChatController2 implements IEditorContribution { } })); + const defaultPlaceholderObs = visibleSessionObs.map((session, r) => { + return session?.initialSelection.isEmpty() + ? localize('placeholder', "Generate code") + : localize('placeholderWithSelection', "Modify selected code"); + }); + + this._store.add(autorun(r => { // HIDE/SHOW @@ -1438,6 +1445,7 @@ export class InlineChatController2 implements IEditorContribution { ctxInlineChatVisible.set(true); this._zone.value.widget.chatWidget.setModel(session.chatModel); if (!this._zone.value.position) { + this._zone.value.widget.chatWidget.setInputPlaceholder(defaultPlaceholderObs.read(r)); this._zone.value.widget.chatWidget.input.renderAttachedContext(); // TODO - fights layout bug this._zone.value.show(session.initialPosition); } @@ -1474,6 +1482,7 @@ export class InlineChatController2 implements IEditorContribution { return observableFromEvent(this, response.onDidChange, () => response.response.value.findLast(part => part.kind === 'progressMessage')).read(r); }); + this._store.add(autorun(r => { const response = lastResponseObs.read(r); @@ -1489,7 +1498,7 @@ export class InlineChatController2 implements IEditorContribution { // no response or not in progress this._zone.value.widget.domNode.classList.toggle('request-in-progress', false); - this._zone.value.widget.chatWidget.setInputPlaceholder(localize('placeholder', "Edit, refactor, and generate code")); + this._zone.value.widget.chatWidget.setInputPlaceholder(defaultPlaceholderObs.read(r)); } else { this._zone.value.widget.domNode.classList.toggle('request-in-progress', true); diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.ts index 22e566f61fe..323b97a3d45 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.ts @@ -9,6 +9,7 @@ import { URI } from '../../../../base/common/uri.js'; import { IActiveCodeEditor, ICodeEditor } from '../../../../editor/browser/editorBrowser.js'; import { Position } from '../../../../editor/common/core/position.js'; import { IRange } from '../../../../editor/common/core/range.js'; +import { Selection } from '../../../../editor/common/core/selection.js'; import { IValidEditOperation } from '../../../../editor/common/model.js'; import { createDecorator, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { ChatViewPaneTarget, IChatWidgetService } from '../../chat/browser/chat.js'; @@ -35,6 +36,7 @@ export interface IInlineChatSessionEndEvent extends IInlineChatSessionEvent { export interface IInlineChatSession2 { readonly initialPosition: Position; + readonly initialSelection: Selection; readonly uri: URI; readonly chatModel: IChatModel; readonly editingSession: IChatEditingSession; diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts index 2e50d987fa9..5a14d5f4070 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts @@ -399,6 +399,7 @@ export class InlineChatSessionServiceImpl implements IInlineChatSessionService { const result: IInlineChatSession2 = { uri, initialPosition: editor.getSelection().getStartPosition().delta(-1), /* one line above selection start */ + initialSelection: editor.getSelection(), chatModel, editingSession: chatModel.editingSession!, dispose: store.dispose.bind(store)