Fix empty buffer being created when opening files using cmdline arguments and allow opening non-existent files

This commit is contained in:
EnumDev 2025-06-07 20:38:36 +03:00
parent fa622762f2
commit 448ebe27cf
4 changed files with 24 additions and 21 deletions

View File

@ -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

View File

@ -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()
}

View File

@ -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

View File

@ -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()