Mercurial Hosting > editor
changeset 10:a83c8842ca3b
add edited
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 02 Apr 2025 21:19:25 -0600 |
parents | 9d8440e0aecc |
children | 538cb5ad031c |
files | editor.luan |
diffstat | 1 files changed, 21 insertions(+), 16 deletions(-) [+] |
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)