Mercurial Hosting > editor
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()