changeset 9:9d8440e0aecc

add undo
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 02 Apr 2025 17:45:24 -0600
parents ba302f81b38c
children a83c8842ca3b
files editor.luan
diffstat 1 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/editor.luan	Mon Mar 31 22:42:44 2025 -0600
+++ b/editor.luan	Wed Apr 02 17:45:24 2025 -0600
@@ -65,6 +65,36 @@
 	do
 		local edit_menu = new_menu()
 		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)
+			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)
+			edit_menu.add(redo)
+		end
+		update_undo_redo()
+		document.add_undoable_edit_listener(update_undo_redo)
+		edit_menu.add_separator()
 		do
 			local cut = new_menu_item()
 			cut.text = "Cut"