Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preserve untitled files for next time #4985

Closed
1 task done
Tracked by #7371 ...
assayire opened this issue Feb 28, 2023 · 20 comments
Closed
1 task done
Tracked by #7371 ...

Preserve untitled files for next time #4985

assayire opened this issue Feb 28, 2023 · 20 comments
Labels
enhancement [core label] priority request A request from a stakeholder or influential user serialization Restoration of the editor state after a restart workspace Feedback for workspace management, layout, interactions, etc

Comments

@assayire
Copy link

Check for existing issues

  • Completed

Describe the feature

As a Zed lover, I want Zed to not ask to save/delete untitled files when quitting the app but preserve them as is, and have them available for me to work on next time I open zed.

PS: Feature can be tried out in Sublime Text and couple of other editors.

If applicable, add mockups / screenshots to help present your vision of the feature

No response

@assayire assayire added enhancement [core label] triage Maintainer needs to classify the issue labels Feb 28, 2023
@JosephTLyons JosephTLyons added workspace Feedback for workspace management, layout, interactions, etc serialization Restoration of the editor state after a restart and removed triage Maintainer needs to classify the issue labels Feb 28, 2023
@JosephTLyons JosephTLyons transferred this issue from zed-industries/community Jan 24, 2024
@porsager
Copy link

porsager commented Feb 5, 2024

Very much miss this feature, but one super important thing - if it is added - is absolute certainty that you won't loose content in these "unsaved buffers/documents". Once you start relying on this feature it's an extremely great way to keep notes / snippets, etc, but it needs to be something you can trust. I have 9 year old unsaved content in Sublime, which I'd love to move over, but I don't want to risk loosing them (happened a couple of times in the good old textmate days during an upgrade).

@JosephTLyons JosephTLyons added the priority request A request from a stakeholder or influential user label Mar 4, 2024
@jacksongoode
Copy link

Agree, this is without a doubt a feature I can't migrate to Zed from Sublime without.

@Parithi
Copy link

Parithi commented Mar 26, 2024

+1 Looking forward to having this feature on Zed. This is the one that stops me from migrating from VSCode.

@ddegner
Copy link

ddegner commented Apr 14, 2024

Cat sat on my power button and force quit everything. Lost an hour or so of writing.

Hopefully the feature will save me next time.

@akano-su
Copy link

Just ran into this issue and was very upset. Zed. Please. Since Atom stopped development, I haven't migrated to another text editor but you were SUPPOSED TO BE THE ONE!!

@NicolayD
Copy link

Chiming in on this - this would allow users to use new tabs for notes. It would be immensely helpful.

@ylluminate
Copy link

It looks like this is in progress. Any idea of a timetable we'll see this ready? I also think a lot of us are waiting for this to really kick Zed's tires.

@rgilbert82

This comment has been minimized.

@selfish
Copy link

selfish commented Jun 9, 2024

Chiming in - this is the only thing stopping me from uninstalling Sublime and fully making the switch.

@mileusna
Copy link

I was just about to raise this issue too. All major editors like VS Code and Sublime preserve unsaved files. Zed should do the same, especially considering its frequent updates that require restarts.

@ddegner
Copy link

ddegner commented Jun 15, 2024

Cat sat on my power button and force quit everything. Lost an hour or so of writing.

Hopefully the feature will save me next time.

Bug fixed. The cat has a new home.

@MemeKing
Copy link

I would love for this feature to be added. It's more than just a convenience, it's practically a whole lifestyle.

mrnugget added a commit that referenced this issue Jul 17, 2024
This adds the ability for Zed to restore unsaved buffers on restart. The
user is no longer prompted to save/discard/cancel when trying to close a
Zed window with dirty buffers in it. Instead those dirty buffers are
stored and restored on restart.

It does this by saving the contents of dirty buffers to the internal
SQLite database in which Zed stores other data too. On restart, if there
are dirty buffers in the database, they are restored.

On certain events (buffer changed, file saved, ...) Zed will serialize
these buffers, throttled to a 100ms, so that we don't overload the
machine by saving on every keystroke. When Zed quits, it waits until all
the buffers are serialized.


### Current limitations
- It does not persist undo-history (right now we don't persist/restore
undo-history regardless of dirty buffers or not)
- It does not restore buffers in windows without projects/worktrees.
Example: if you open a new window with `cmd-shift-n` and type something
in a buffer, this will _not_ be stored and you will be asked whether to
save/discard on quit. In the future, we want to fix this by also
restoring windows without projects/worktrees.

### Demo



https://github.com/user-attachments/assets/45c63237-8848-471f-8575-ac05496bba19



### Related tickets

I'm unsure about closing them, without also fixing the 2nd limitation:
restoring of worktree-less windows. So let's wait until that.

- #4985
- #4683

### Note on performance

- Serializing editing buffer (asynchronously on background thread) with
500k lines takes ~200ms on M3 Max. That's an extreme case and that
performance seems acceptable.

Release Notes:

- Added automatic restoring of unsaved buffers. Zed can now be closed
even if there are unsaved changes in buffers. One current limitation is
that this only works when having projects open, not single files or
empty windows with unsaved buffers. The feature can be turned off by
setting `{"session": {"restore_unsaved_buffers": false}}`.

---------

Co-authored-by: Bennet <bennet@zed.dev>
Co-authored-by: Antonio <antonio@zed.dev>
@mrnugget
Copy link
Member

A first version of this has been merged: #13546

It'll go into Preview release this week, on Wednesday. Stable release next week, pending any bug fixes or revision.

Please see the constraints in the pull request description that apply to this version.

@ddegner
Copy link

ddegner commented Jul 22, 2024

The cat will be allowed back inside.

FullSizeRender.mov

mrnugget added a commit that referenced this issue Jul 23, 2024
This adds the ability for Zed to restore multiple windows after
restarting. It's now the default behavior.

Release Notes:

- Added ability to restore all windows that were open when Zed was quit.
Previously only the last used workspace was restored. This is now the
default behavior. To get back the old behavior, add the following to
your settings: `{"restore_on_startup": "last_workspace"}` (Part of
[#4985](#4985) and
[#4683](#4683))

Demo:



https://github.com/user-attachments/assets/57a375ec-0c6a-4724-97c4-3fea8f18bc2d

---------

Co-authored-by: Nathan <nathan@zed.dev>
@JosephTLyons
Copy link
Contributor

JosephTLyons commented Jul 24, 2024

The following PRs have added quite a bit to the workspace serialization story:

There are a few known missing bits here, but I think its best that we close this issue out, in favor of new issues that describe those missing bit, so that we can get a clear understanding of how important these bits are to you all, now that most of the functionality has landed. Here are the new issues (upvote via 👍):

Killer work @mrnugget!

@selfish
Copy link

selfish commented Jul 24, 2024

Thank you @JosephTLyons!
I understand the decision to close that issue. With that I think it's important to mention that #15098 is actually the main reason this feature is so desired. Open a new buffer, type something in, and just know it won't be lost.

@JosephTLyons
Copy link
Contributor

Thank you @JosephTLyons! I understand the decision to close that issue. With that I think it's important to mention that #15098 is actually the main reason this feature is so desired. Open a new buffer, type something in, and just know it won't be lost.

Note that this will work right now (in today's preview release) if you are opening an untitled buffer and there's a worktree in your project panel.

Screen.Recording.2024-07-24.at.6.14.16.PM.mov

The only case in which this doesn't work is if you open up a brand new instance of Zed, one that has no projects in it, and then open a new file. I think we definitely want that, but I think a lot of the headache (80 percent or more) has been addressed by @mrnugget's PRs.

CharlesChen0823 pushed a commit to CharlesChen0823/zed that referenced this issue Jul 29, 2024
…ustries#14965)

This adds the ability for Zed to restore multiple windows after
restarting. It's now the default behavior.

Release Notes:

- Added ability to restore all windows that were open when Zed was quit.
Previously only the last used workspace was restored. This is now the
default behavior. To get back the old behavior, add the following to
your settings: `{"restore_on_startup": "last_workspace"}` (Part of
[zed-industries#4985](zed-industries#4985) and
[zed-industries#4683](zed-industries#4683))

Demo:



https://github.com/user-attachments/assets/57a375ec-0c6a-4724-97c4-3fea8f18bc2d

---------

Co-authored-by: Nathan <nathan@zed.dev>
kevmo314 pushed a commit to kevmo314/zed that referenced this issue Jul 29, 2024
…ustries#14965)

This adds the ability for Zed to restore multiple windows after
restarting. It's now the default behavior.

Release Notes:

- Added ability to restore all windows that were open when Zed was quit.
Previously only the last used workspace was restored. This is now the
default behavior. To get back the old behavior, add the following to
your settings: `{"restore_on_startup": "last_workspace"}` (Part of
[zed-industries#4985](zed-industries#4985) and
[zed-industries#4683](zed-industries#4683))

Demo:



https://github.com/user-attachments/assets/57a375ec-0c6a-4724-97c4-3fea8f18bc2d

---------

Co-authored-by: Nathan <nathan@zed.dev>
@SimbaNinja917
Copy link

I am on Zed Zed 0.150.4 my MBP M1 froze and restarted, and I had an untitled document with very important info, Zed restarted empty. Any chance I can recover it from somewhere?

@mrnugget
Copy link
Member

mrnugget commented Sep 5, 2024

I am on Zed Zed 0.150.4 my MBP M1 froze and restarted, and I had an untitled document with very important info, Zed restarted empty. Any chance I can recover it from somewhere?

Was that file in a project-less window? i.e. just a single window with unnamed buffers? Because those aren't persisted yet (see above).

But here's what you can do to check whether it's been saved:

sqlite3 ~/Library/Application\ Support/Zed/db/0-stable/db.sqlite 'select contents from editors where contents is not null;'

(That's on macOS, on Linux the path is different.)

This returns the contents of all files where content has been saved.

@SimbaNinja917
Copy link

I am on Zed Zed 0.150.4 my MBP M1 froze and restarted, and I had an untitled document with very important info, Zed restarted empty. Any chance I can recover it from somewhere?

Was that file in a project-less window? i.e. just a single window with unnamed buffers? Because those aren't persisted yet (see above).

But here's what you can do to check whether it's been saved:

sqlite3 ~/Library/Application\ Support/Zed/db/0-stable/db.sqlite 'select contents from editors where contents is not null;'

(That's on macOS, on Linux the path is different.)

This returns the contents of all files where content has been saved.

this returned files saved previously as part of a project.
what i had lost was just an open window not part of a project on which i was taking meeting notes. and then lost it all.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement [core label] priority request A request from a stakeholder or influential user serialization Restoration of the editor state after a restart workspace Feedback for workspace management, layout, interactions, etc
Projects
None yet
Development

No branches or pull requests