changeset 4:3d6414265959

add save
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 31 Mar 2025 19:14:04 -0600
parents a79a840691b1
children 57b4c281a03e
files editor.luan
diffstat 1 files changed, 30 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/editor.luan	Mon Mar 31 17:17:38 2025 -0600
+++ b/editor.luan	Mon Mar 31 19:14:04 2025 -0600
@@ -22,8 +22,10 @@
 
 local function make_menu_bar(window)
 	local menu_bar = new_menu_bar()
+	do
 		local file_menu = new_menu()
 		file_menu.text = "File"
+		do
 			local new_file = new_menu_item()
 			new_file.text = "New File"
 			new_file.accelerator = "meta N"
@@ -31,6 +33,8 @@
 				new_window()
 			end)
 			file_menu.add(new_file)
+		end
+		do
 			local open = new_menu_item()
 			open.text = "Open..."
 			open.accelerator = "meta O"
@@ -46,9 +50,32 @@
 				end
 			end)
 			file_menu.add(open)
+		end
+		do
+			local save = new_menu_item()
+			save.text = "Save"
+			save.accelerator = "meta S"
+			save.add_action_listener(function()
+				if window.file == nil then
+					local file_chooser = window.frame.file_chooser_save()
+					file_chooser.visible = true
+					local file = file_chooser.file
+					if file == nil then
+						return
+					end
+					window.file = file
+					window.frame.title = file.canonical().to_string()
+				end
+				window.file.write_text(window.text_area.text)
+			end)
+			file_menu.add(save)
+		end
 		menu_bar.add(file_menu)
+	end
+	do
 		local view_menu = new_menu()
 		view_menu.text = "View"
+		do
 			local word_wrap = new_check_box_menu_item()
 			word_wrap.text = "Word Wrap"
 			word_wrap.state = window.text_area.line_wrap
@@ -56,7 +83,9 @@
 				window.text_area.line_wrap = word_wrap.state
 			end)
 			view_menu.add(word_wrap)
+		end
 		menu_bar.add(view_menu)
+	end
 	return menu_bar
 end
 
@@ -64,7 +93,7 @@
 
 function new_window(file)
 	local frame = new_frame()
-	frame.title = file and file.canonical().to_string() or "untitled"
+	frame.title = file and file.canonical().to_string() or "new"
 	frame.add_close_listener(function()
 		n_windows = n_windows - 1
 		if n_windows == 0 then