diff editor.luan @ 10:a83c8842ca3b

add edited
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 02 Apr 2025 21:19:25 -0600
parents 9d8440e0aecc
children 538cb5ad031c
line wrap: on
line diff
--- a/editor.luan	Wed Apr 02 17:45:24 2025 -0600
+++ b/editor.luan	Wed Apr 02 21:19:25 2025 -0600
@@ -23,7 +23,6 @@
 local new_window
 
 local function make_menu_bar(window)
-	local revert
 	local menu_bar = new_menu_bar()
 	do
 		local file_menu = new_menu()
@@ -42,6 +41,7 @@
 			open.add_action_listener(window.open)
 			file_menu.add(open)
 		end
+		local revert
 		do
 			local save = new_menu_item()
 			save.text = "Save"
@@ -67,33 +67,27 @@
 		edit_menu.text = "Edit"
 		local document = window.text_area.document
 		local undo, redo
-		local function update_undo_redo()
-			undo.set_enabled(document.can_undo())
-			redo.set_enabled(document.can_redo())
-		end
-		edit_menu.update_undo_redo = update_undo_redo  -- prevent gc
 		do
 			undo = new_menu_item()
 			undo.text = "Undo"
 			undo.accelerator = "meta Z"
-			undo.add_action_listener(function()
-				document.undo()
-				update_undo_redo()
-			end)
+			undo.add_action_listener(document.undo)
 			edit_menu.add(undo)
 		end
 		do
 			redo = new_menu_item()
 			redo.text = "Redo"
 			redo.accelerator = "meta shift Z"
-			redo.add_action_listener(function()
-				document.redo()
-				update_undo_redo()
-			end)
+			redo.add_action_listener(document.redo)
 			edit_menu.add(redo)
 		end
+		local function update_undo_redo()
+			undo.set_enabled(document.can_undo())
+			redo.set_enabled(document.can_redo())
+		end
+		edit_menu.update_undo_redo = update_undo_redo  -- prevent gc
 		update_undo_redo()
-		document.add_undoable_edit_listener(update_undo_redo)
+		document.add_undo_listener(update_undo_redo)
 		edit_menu.add_separator()
 		do
 			local cut = new_menu_item()
@@ -151,7 +145,6 @@
 	window.has_file = file~=nil and file.is_file()
 	local frame = new_frame()
 	local title = file and file.canonical().to_string() or "new"
-	frame.title = title
 	frame.add_close_listener(function()
 		n_windows = n_windows - 1
 		if n_windows == 0 then
@@ -171,6 +164,16 @@
 			text_area.text = file.read_text()
 		end
 	end
+	local function set_title()
+		local s = title
+		if not text_area.document.is_unedited() then
+			s = s.." *"
+		end
+		frame.title = s
+	end
+	set_title()
+	text_area.set_title = set_title  -- no gc
+	text_area.document.add_undo_listener(set_title)
 	text_area.rows = 10
 	text_area.columns = 20
 	text_area.wrap_style_word = true
@@ -210,6 +213,7 @@
 			documents[title] = text_area.document
 		end
 		file.write_text(text_area.text)
+		text_area.document.set_unedited()
 		return true
 	end
 	function window.revert()
@@ -217,6 +221,7 @@
 		local text = file.read_text()
 		text_area.text = text
 		text_area.caret_position = min(caret_position,#text)
+		text_area.document.set_unedited()
 	end
 	local menu_bar = make_menu_bar(window)
 	frame.set_menu_bar(menu_bar)