From 6622203506c8ea02ed913f25a6e5354c7baa88cf Mon Sep 17 00:00:00 2001 From: Kharec Date: Thu, 15 Oct 2026 17:57:24 +0200 Subject: [PATCH] fix: create the file passed on the command line when it is missing A path that did not exist was silently ignored: plotzilla new-script.fountain opened an untitled document instead of a new script saved to that file on the first save. --- CHANGELOG.md | 2 ++ app.go | 7 ++++++- main.go | 4 +--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53c3fda..166866d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ version is in the `VERSION` file. ### Fixed +- `plotzilla new-script.fountain` opens a new script that will be saved to that file, + instead of an untitled document that forgot the name it was given. - The unsaved-changes marker is now updated atomically: an edit landing while a save finished could make the close confirmation unreliable. - Saving is now durable: the file is synced to disk before it replaces the old one (a diff --git a/app.go b/app.go index 1b7bda5..53fa110 100644 --- a/app.go +++ b/app.go @@ -89,13 +89,18 @@ func (a *App) beforeClose(ctx context.Context) bool { func (a *App) NewDocument() *screenplay.Document { return screenplay.New() } -// InitialFile returns the script passed on the command line, if any. +// InitialFile returns the script passed on the command line, if any. A +// path that does not exist yet opens a new script, written there on the +// first save: `plotzilla new-script.fountain` creates the file. func (a *App) InitialFile() (*OpenResult, error) { if a.initialPath == "" { return nil, nil } path := a.initialPath a.initialPath = "" + if _, err := os.Stat(path); errors.Is(err, os.ErrNotExist) { + return &OpenResult{Path: path, Document: screenplay.New()}, nil + } return a.load(path) } diff --git a/main.go b/main.go index 5b10d0e..15252ff 100644 --- a/main.go +++ b/main.go @@ -29,9 +29,7 @@ func main() { app := NewApp() for _, arg := range os.Args[1:] { if !strings.HasPrefix(arg, "-") { - if _, err := os.Stat(arg); err == nil { - app.initialPath = arg - } + app.initialPath = arg // may not exist yet: then it is a new script break } }