changeset 20:1bfd4a2d6d4e

work
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 08 Apr 2025 13:42:59 -0600
parents ba59fdcf41f3
children 79f060db4d79
files editor.luan
diffstat 1 files changed, 48 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/editor.luan	Mon Apr 07 22:34:55 2025 -0600
+++ b/editor.luan	Tue Apr 08 13:42:59 2025 -0600
@@ -41,6 +41,12 @@
 
 local new_window
 
+local function action_listener(fn)
+	return function(_)
+		fn()
+	end
+end
+
 local function make_menu_bar(window)
 	local menu_bar = new_menu_bar()
 	do
@@ -50,7 +56,9 @@
 			local new_file = new_menu_item{
 				text = "New File"
 				accelerator = "meta N"
-				action_listener = new_window
+				action_listener = function(_)
+					new_window()
+				end
 			}
 			file_menu.add(new_file)
 		end
@@ -58,7 +66,7 @@
 			local open = new_menu_item{
 				text = "Open..."
 				accelerator = "meta O"
-				action_listener = window.open
+				action_listener = action_listener(window.open)
 			}
 			file_menu.add(open)
 		end
@@ -67,7 +75,7 @@
 			local save = new_menu_item{
 				text = "Save"
 				accelerator = "meta S"
-				action_listener = function()
+				action_listener = function(_)
 					if window.save() then
 						revert.set_enabled(true)
 					end
@@ -79,7 +87,7 @@
 			revert = new_menu_item{
 				text = "Revert"
 				enabled = window.has_file
-				action_listener = window.revert
+				action_listener = action_listener(window.revert)
 			}
 			file_menu.add(revert)
 		end
@@ -94,7 +102,7 @@
 			undo = new_menu_item{
 				text = "Undo"
 				accelerator = "meta Z"
-				action_listener = document.undo
+				action_listener = action_listener(document.undo)
 			}
 			edit_menu.add(undo)
 		end
@@ -102,7 +110,7 @@
 			redo = new_menu_item{
 				text = "Redo"
 				accelerator = "meta shift Z"
-				action_listener = document.redo
+				action_listener = action_listener(document.redo)
 			}
 			edit_menu.add(redo)
 		end
@@ -118,7 +126,7 @@
 			local cut = new_menu_item{
 				text = "Cut"
 				accelerator = "meta X"
-				action_listener = window.text_area.cut
+				action_listener = action_listener(window.text_area.cut)
 			}
 			edit_menu.add(cut)
 		end
@@ -126,7 +134,7 @@
 			local copy = new_menu_item{
 				text = "Copy"
 				accelerator = "meta C"
-				action_listener = window.text_area.copy
+				action_listener = action_listener(window.text_area.copy)
 			}
 			edit_menu.add(copy)
 		end
@@ -134,39 +142,43 @@
 			local paste = new_menu_item{
 				text = "Paste"
 				accelerator = "meta V"
-				action_listener = window.text_area.paste
+				action_listener = action_listener(window.text_area.paste)
 			}
 			edit_menu.add(paste)
 		end
 		edit_menu.add_separator()
 		do
-			local indent = new_menu_item()
-			indent.text = "Indent"
-			indent.accelerator = "meta CLOSE_BRACKET"
-			indent.add_action_listener(window.indent)
+			local indent = new_menu_item{
+				text = "Indent"
+				accelerator = "meta CLOSE_BRACKET"
+				action_listener = action_listener(window.indent)
+			}
 			edit_menu.add(indent)
 		end
 		do
-			local unindent = new_menu_item()
-			unindent.text = "Unindent"
-			unindent.accelerator = "meta OPEN_BRACKET"
-			unindent.add_action_listener(window.unindent)
+			local unindent = new_menu_item{
+				text = "Unindent"
+				accelerator = "meta OPEN_BRACKET"
+				action_listener = action_listener(window.unindent)
+			}
 			edit_menu.add(unindent)
 		end
 		edit_menu.add_separator()
 		do
-			local select_all = new_menu_item()
-			select_all.text = "Select All"
-			select_all.accelerator = "meta A"
-			select_all.add_action_listener(window.text_area.select_all)
+			local select_all = new_menu_item{
+				text = "Select All"
+				accelerator = "meta A"
+				action_listener = action_listener(window.text_area.select_all)
+			}
 			edit_menu.add(select_all)
 		end
 		edit_menu.add_separator()
 		do
-			local find = new_menu_item()
-			find.text = "Find and Replace"
-			find.accelerator = "meta F"
-			find.add_action_listener(window.show_find_dialog)
+			local find = new_menu_item{
+				text = "Find and Replace"
+				accelerator = "meta F"
+				action_listener = action_listener(window.show_find_dialog)
+			}
 			edit_menu.add(find)
 		end
 		menu_bar.add(edit_menu)
@@ -175,18 +187,19 @@
 		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
-			word_wrap.add_action_listener(function()
-				window.text_area.line_wrap = word_wrap.state
-			end)
+			local word_wrap = new_check_box_menu_item{
+				text = "Word Wrap"
+				state = window.text_area.line_wrap
+				action_listener = function(event)
+					window.text_area.line_wrap = event.source.state
+				end
+			}
 			view_menu.add(word_wrap)
 		end
 		do
 			local show_whitespace = new_check_box_menu_item()
 			show_whitespace.text = "Show Whitespace"
-			show_whitespace.add_action_listener(function()
+			show_whitespace.add_action_listener(function(_)
 				window.text_area.show_whitespace(show_whitespace.state)
 			end)
 			view_menu.add(show_whitespace)
@@ -194,7 +207,7 @@
 		do
 			local show_column = new_menu_item()
 			show_column.text = "Show Cursor Column"
-			show_column.add_action_listener(function()
+			show_column.add_action_listener(function(_)
 				show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() )
 			end)
 			view_menu.add(show_column)
@@ -203,7 +216,7 @@
 			local goto = new_menu_item()
 			goto.text = "Goto Line"
 			goto.accelerator = "meta G"
-			goto.add_action_listener(function()
+			goto.add_action_listener(function(_)
 				local input = show_input_dialog( window.frame, "Goto line" )
 				--logger.info("input "..input)
 				local line = input and to_number(input)
@@ -275,6 +288,7 @@
 		end
 		if file.is_file() then
 			text_area.text = file.read_text()
+			text_area.document.clear_unedited()
 		end
 	end
 	local function set_title()