From 5abb1fedd9fd900ab553c0c8913ee2f78426d529 Mon Sep 17 00:00:00 2001 From: andrepimenta Date: Mon, 28 Jul 2025 23:45:42 +0100 Subject: [PATCH] Save message in text box --- src/extension.ts | 19 +++++++++++++++++++ src/ui.ts | 22 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index c760616..59b8e2a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -127,6 +127,7 @@ class ClaudeChatProvider { private _currentClaudeProcess: cp.ChildProcess | undefined; private _selectedModel: string = 'default'; // Default model private _isProcessing: boolean | undefined; + private _draftMessage: string = ''; constructor( private readonly _extensionUri: vscode.Uri, @@ -236,6 +237,14 @@ class ClaudeChatProvider { // Send current settings to webview this._sendCurrentSettings(); + + // Send saved draft message if any + if (this._draftMessage) { + this._postMessage({ + type: 'restoreInputText', + data: this._draftMessage + }); + } } private _handleWebviewMessage(message: any) { @@ -324,6 +333,9 @@ class ClaudeChatProvider { case 'enableYoloMode': this._enableYoloMode(); return; + case 'saveInputText': + this._saveInputText(message.text); + return; } } @@ -430,6 +442,9 @@ class ClaudeChatProvider { this._isProcessing = true; + // Clear draft message since we're sending it + this._draftMessage = ''; + // Show original user input in chat and save to conversation (without mode prefixes) this._sendAndSaveMessage({ type: 'userInput', @@ -2149,6 +2164,10 @@ class ClaudeChatProvider { } } + private _saveInputText(text: string): void { + this._draftMessage = text || ''; + } + private async _updateSettings(settings: { [key: string]: any }): Promise { const config = vscode.workspace.getConfiguration('claudeCodeChat'); diff --git a/src/ui.ts b/src/ui.ts index 80827b2..60b8297 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -1543,6 +1543,18 @@ const html = ` messageInput.addEventListener('input', adjustTextareaHeight); + // Save input text as user types (debounced) + let saveInputTimeout; + messageInput.addEventListener('input', () => { + clearTimeout(saveInputTimeout); + saveInputTimeout = setTimeout(() => { + vscode.postMessage({ + type: 'saveInputText', + text: messageInput.value + }); + }, 500); // Save after 500ms of no typing + }); + messageInput.addEventListener('keydown', (e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); @@ -2490,6 +2502,16 @@ const html = ` updateStatusWithTotals(); break; + case 'restoreInputText': + const inputField = document.getElementById('messageInput'); + if (inputField && message.data) { + inputField.value = message.data; + // Auto-resize the textarea + inputField.style.height = 'auto'; + inputField.style.height = Math.min(inputField.scrollHeight, 200) + 'px'; + } + break; + case 'output': if (message.data.trim()) { let displayData = message.data;