fregante / GhostText

👻 Use your text editor to write in your browser. Everything you type in the editor will be instantly updated in the browser (and vice versa).
https://GhostText.fregante.com
MIT License
3.25k stars 116 forks source link

Connection is lost after save #292

Open fregante opened 10 months ago

fregante commented 10 months ago

I don't remember if this is a consequence of VSCode's document management, but it's not a desired behavior. We're used to saving often so it should not trigger connection closure when one mistakenly saves a GhostText document.

Extracted from:

kevintraver commented 10 months ago

Ok, I think I figured out why this is happening:

When the file is created it is using an untitled scheme

https://github.com/fregante/GhostText-for-VSCode/blob/d414e46f25df9e78f8a8c126e9fc913dadff2f55/source/extension.ts#L37-L40

const file = vscode.Uri.from({
  scheme: 'untitled',
  path: `${tmpdir()}/${avoidsOverlappingFiles}/${filename}`,
});

from the documentation for onDidCloseTextDocument :

An event that is emitted when a text document is disposed or when the language id of a text document has been changed.

The onDidCloseTextDocument event is being triggered on save because the untitled document is "closed" when it gets saved to disk and becomes a file document.

kevintraver commented 10 months ago

A possible solution:

async function onDocumentClose(closedDocument: vscode.TextDocument) {
  if (closedDocument.uri.scheme === 'untitled') {
    // This is an untitled document. Skip further logic.
    return;
  }
  if (closedDocument.isClosed) {
    documents.delete(closedDocument.uri.toString());
  }
}

the other issue is that the closedDocument.uri is different between when it's unsaved vs saved to disk

untitled:/var/folders/br/l8jb39_j2sl_8mrr859y01_00000gn/

vs

file:///var/folders/br/l8jb39_j2sl_8mrr859y01_00000gn/

fregante commented 10 months ago

VSCode's document management is a joke. I think I just need to avoid using untitled://

This was also mentioned in another issue: autosave to avoid closure prompts

Moulick commented 4 months ago

Can this be something like how git rebase --interactive does it? I have exported EDITOR="code --wait --add" on my terminal. When I run git rebase --interactive, it creates a file and then tells vscode to open that file. Saving the file works fine, and on closing the editor it somehow triggers continue.