Mercurial Hosting > editor
changeset 5:57b4c281a03e
shared documents
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 31 Mar 2025 21:01:25 -0600 |
parents | 3d6414265959 |
children | 524d6b1c26b4 |
files | editor.luan |
diffstat | 1 files changed, 43 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/editor.luan Mon Mar 31 19:14:04 2025 -0600 +++ b/editor.luan Mon Mar 31 21:01:25 2025 -0600 @@ -29,45 +29,21 @@ local new_file = new_menu_item() new_file.text = "New File" new_file.accelerator = "meta N" - new_file.add_action_listener(function() - new_window() - end) + new_file.add_action_listener(new_window) file_menu.add(new_file) end do local open = new_menu_item() open.text = "Open..." open.accelerator = "meta O" - open.add_action_listener(function() - local file_chooser = window.frame.file_chooser_load() - if window.file ~= nil then - file_chooser.directory = window.file.parent() - end - file_chooser.visible = true - local file = file_chooser.file - if file ~= nil then - new_window(file) - end - end) + open.add_action_listener(window.open) file_menu.add(open) end do local save = new_menu_item() save.text = "Save" save.accelerator = "meta S" - save.add_action_listener(function() - if window.file == nil then - local file_chooser = window.frame.file_chooser_save() - file_chooser.visible = true - local file = file_chooser.file - if file == nil then - return - end - window.file = file - window.frame.title = file.canonical().to_string() - end - window.file.write_text(window.text_area.text) - end) + save.add_action_listener(window.save) file_menu.add(save) end menu_bar.add(file_menu) @@ -90,10 +66,13 @@ end local n_windows = 0 +local documents = {} function new_window(file) + local window = {} local frame = new_frame() - frame.title = file and file.canonical().to_string() or "new" + 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 @@ -101,8 +80,17 @@ end end) local text_area = new_text_area() - if file ~= nil and file.is_file() then - text_area.text = file.read_text() + window.text_area = text_area + if file ~= nil then + local document = documents[title] + if document == nil then + documents[title] = text_area.document + else + text_area.document = document + end + if file.is_file() then + text_area.text = file.read_text() + end end text_area.rows = 10 text_area.columns = 20 @@ -119,11 +107,31 @@ list.add_element("3") --scroll_pane.set_row_header_view(list) frame.add(scroll_pane) - local window = { - frame = frame - file = file - text_area = text_area - } + function window.open() + local file_chooser = frame.file_chooser_load() + if file ~= nil then + file_chooser.directory = file.parent() + end + file_chooser.visible = true + local new_file = file_chooser.file + if new_file ~= nil then + new_window(new_file) + end + end + function window.save() + if file == nil then + local file_chooser = frame.file_chooser_save() + file_chooser.visible = true + file = file_chooser.file + if file == nil then + return + end + title = file.canonical().to_string() + frame.title = title + documents[title] = text_area.document + end + file.write_text(text_area.text) + end local menu_bar = make_menu_bar(window) frame.set_menu_bar(menu_bar) frame.pack()