From 448ebe27cfaecab21769d2f79f8b4b23577b61dd Mon Sep 17 00:00:00 2001 From: EnumDev Date: Sat, 7 Jun 2025 20:38:36 +0300 Subject: [PATCH] Fix empty buffer being created when opening files using cmdline arguments and allow opening non-existent files --- src/buffer.go | 24 +++++++++++++++--------- src/main.go | 15 +++++---------- src/top_menu.go | 2 +- src/window.go | 4 +++- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/buffer.go b/src/buffer.go index 8e34d36..5ff640f 100644 --- a/src/buffer.go +++ b/src/buffer.go @@ -80,7 +80,7 @@ func GetOpenFileBuffer(filename string) *Buffer { return nil } -func CreateFileBuffer(filename string) (*Buffer, error) { +func CreateFileBuffer(filename string, openNonExistentFile bool) (*Buffer, error) { // Replace tilde with home directory if filename != "~" && strings.HasPrefix(filename, "~/") { homedir, err := os.UserHomeDir() @@ -99,12 +99,14 @@ func CreateFileBuffer(filename string) (*Buffer, error) { } stat, err := os.Stat(abs) - if err != nil { - return nil, err - } + if !openNonExistentFile { + if err != nil { + return nil, err + } - if !stat.Mode().IsRegular() { - return nil, fmt.Errorf("%s is not a regular file", filename) + if !stat.Mode().IsRegular() { + return nil, fmt.Errorf("%s is not a regular file", filename) + } } buffer := Buffer{ @@ -115,9 +117,13 @@ func CreateFileBuffer(filename string) (*Buffer, error) { filename: abs, } - err = buffer.Load() - if err != nil { - return nil, err + // Load file contents if no error was encountered in stat call + if err == nil { + err = buffer.Load() + + if err != nil { + return nil, err + } } Buffers[buffer.Id] = &buffer diff --git a/src/main.go b/src/main.go index c4f18a1..e41de8f 100644 --- a/src/main.go +++ b/src/main.go @@ -11,26 +11,21 @@ func main() { log.Fatalf("Failed to create window: %v", err) } - var initialBuffer *Buffer = nil - - if len(os.Args) > 0 { + if len(os.Args) > 1 { for _, file := range os.Args[1:] { - b, err := CreateFileBuffer(file) + b, err := CreateFileBuffer(file, true) if err != nil { PrintMessage(window, "Could not open file: "+file) continue } - if initialBuffer == nil { - initialBuffer = b + if window.textArea.CurrentBuffer.Name == "New File 1" { + delete(Buffers, window.textArea.CurrentBuffer.Id) + window.textArea.CurrentBuffer = b } } } - if initialBuffer != nil { - window.textArea.CurrentBuffer = initialBuffer - } - for window.screen != nil { window.Draw() } diff --git a/src/top_menu.go b/src/top_menu.go index 3e00adf..313fc16 100644 --- a/src/top_menu.go +++ b/src/top_menu.go @@ -53,7 +53,7 @@ func initTopMenu() { PrintMessage(window, fmt.Sprintf("File already open! Switching to buffer: %s", openBuffer.Name)) window.textArea.CurrentBuffer = openBuffer } else { - newBuffer, err := CreateFileBuffer(input) + newBuffer, err := CreateFileBuffer(input, false) if err != nil { PrintMessage(window, fmt.Sprintf("Could not open file: %s", err.Error())) return diff --git a/src/window.go b/src/window.go index 9a0193a..5f2c545 100644 --- a/src/window.go +++ b/src/window.go @@ -46,7 +46,9 @@ func CreateWindow() (*Window, error) { } // Create empty buffer if nil - window.textArea.CurrentBuffer = CreateBuffer("New File 1") + if window.textArea.CurrentBuffer == nil { + window.textArea.CurrentBuffer = CreateBuffer("New File 1") + } // Create tcell screen screen, err := tcell.NewScreen()