Mercurial Hosting > editor
changeset 7:ce4233ff5ce8
add revert
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 31 Mar 2025 22:36:47 -0600 |
parents | 524d6b1c26b4 |
children | ba302f81b38c |
files | editor.luan |
diffstat | 1 files changed, 25 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
diff -r 524d6b1c26b4 -r ce4233ff5ce8 editor.luan --- a/editor.luan Mon Mar 31 21:50:46 2025 -0600 +++ b/editor.luan Mon Mar 31 22:36:47 2025 -0600 @@ -4,6 +4,8 @@ local Io = require "luan:Io.luan" local print = Io.print or error() local new_file = Io.schemes.file or error() +local Math = require "luan:Math.luan" +local min = Math.min or error() local Swing = require "luan:swing/Swing.luan" local new_frame = require("luan:swing/Frame.luan").new or error() local new_label = require("luan:swing/Label.luan").new or error() @@ -21,6 +23,7 @@ local new_window local function make_menu_bar(window) + local revert local menu_bar = new_menu_bar() do local file_menu = new_menu() @@ -43,9 +46,20 @@ local save = new_menu_item() save.text = "Save" save.accelerator = "meta S" - save.add_action_listener(window.save) + save.add_action_listener(function() + if window.save() then + revert.set_enabled(true) + end + end) file_menu.add(save) end + do + revert = new_menu_item() + revert.text = "Revert" + revert.set_enabled(window.has_file) + revert.add_action_listener(window.revert) + file_menu.add(revert) + end menu_bar.add(file_menu) end do @@ -104,6 +118,7 @@ function new_window(file) local window = {} + 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 @@ -132,7 +147,7 @@ text_area.line_wrap = true text_area.tab_size = 4 text_area.set_font{ family="Monospaced", size=13 } - text_area.select(0,0) + text_area.caret_position = 0 --print(text_area.line_count) local scroll_pane = new_scroll_pane(text_area) local list = new_list() @@ -158,13 +173,20 @@ file_chooser.visible = true file = file_chooser.file if file == nil then - return + return false end title = file.canonical().to_string() frame.title = title documents[title] = text_area.document end file.write_text(text_area.text) + return true + end + function window.revert() + local caret_position = text_area.caret_position + local text = file.read_text() + text_area.text = text + text_area.caret_position = min(caret_position,#text) end local menu_bar = make_menu_bar(window) frame.set_menu_bar(menu_bar)