Jon G
Jon G

Reputation: 185

VSCode create unsaved file and add content

In VS Code I would like to create a new document in a new editor (same window), but it need to remain unsaved. I cannot find a way to programmatically set the content of this document while it is in a unsaved state.

I have used: commands.executeCommand("workbench.action.files.newUntitledFile") but there seems to be no way to then add content to the file.

When I create a new temporary file and open it with: workspace.openTextDocument(path) The file is already saved.

Any thoughts?

Upvotes: 10

Views: 5980

Answers (4)

maxrzaw
maxrzaw

Reputation: 143

I was having some issues when the document was eventually saved using this solution from Matt, but I was able to use it in combination with DarkTrick's response.

By using the default behavior of creating an empty document and making it active in the then clause.

vscode.workspace.openTextDocument({
    content: newXmlContent,
    language: "xml"
}).then(newDocument => {
    vscode.window.showTextDocument(newDocument);
});

This allows me to create an untitled document with any content I want and show it in the editor. I was not able to give it a specific name though. This might be a limitation of creating an untitled document.

Upvotes: 3

DarkTrick
DarkTrick

Reputation: 3467

I don't know how to open it in the editor, but you can create an unsaved file with content like the following:

vscode.workspace.openTextDocument({
  content: "your content", 
  language: "text"
});

Upvotes: 2

VonC
VonC

Reputation: 1324248

That should be supported in VSCode 1.54 (Feb. 2021), meaning the vscode.workspace.openTextDocument script from Matt is implemented by default:

Open Editors New Untitled File action

We have introduced a New Untitled File action in the Open Editors view title area.

New untitled file -- https://media.githubusercontent.com/media/microsoft/vscode-docs/9ffb91c3746c3dd1156970d23e22aa57ca2fe525/release-notes/images/1_54/new-untitled-file.png

Upvotes: 0

Matt Bierner
Matt Bierner

Reputation: 65223

Try using openTextDocument with an untitled document to create a unsaved file at a given path, and then use WorkspaceEdit to add some text:

import * as vscode from 'vscode';
import * as path from 'path';

const newFile = vscode.Uri.parse('untitled:' + path.join(vscode.workspace.rootPath, 'safsa.txt'));
vscode.workspace.openTextDocument(newFile).then(document => {
    const edit = new vscode.WorkspaceEdit();
    edit.insert(newFile, new vscode.Position(0, 0), "Hello world!");
    return vscode.workspace.applyEdit(edit).then(success => {
        if (success) {
            vscode.window.showTextDocument(document);
        } else {
            vscode.window.showInformationMessage('Error!');
        }
    });
});

The new file will be unsaved when first opened, but saved to the given path when a user saves it.

Hope that provides a good starting point.

Upvotes: 13

Related Questions