Mercurial Hosting > editor
comparison editor.luan @ 10:a83c8842ca3b
add edited
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Wed, 02 Apr 2025 21:19:25 -0600 |
| parents | 9d8440e0aecc |
| children | 538cb5ad031c |
comparison
equal
deleted
inserted
replaced
| 9:9d8440e0aecc | 10:a83c8842ca3b |
|---|---|
| 21 | 21 |
| 22 | 22 |
| 23 local new_window | 23 local new_window |
| 24 | 24 |
| 25 local function make_menu_bar(window) | 25 local function make_menu_bar(window) |
| 26 local revert | |
| 27 local menu_bar = new_menu_bar() | 26 local menu_bar = new_menu_bar() |
| 28 do | 27 do |
| 29 local file_menu = new_menu() | 28 local file_menu = new_menu() |
| 30 file_menu.text = "File" | 29 file_menu.text = "File" |
| 31 do | 30 do |
| 40 open.text = "Open..." | 39 open.text = "Open..." |
| 41 open.accelerator = "meta O" | 40 open.accelerator = "meta O" |
| 42 open.add_action_listener(window.open) | 41 open.add_action_listener(window.open) |
| 43 file_menu.add(open) | 42 file_menu.add(open) |
| 44 end | 43 end |
| 44 local revert | |
| 45 do | 45 do |
| 46 local save = new_menu_item() | 46 local save = new_menu_item() |
| 47 save.text = "Save" | 47 save.text = "Save" |
| 48 save.accelerator = "meta S" | 48 save.accelerator = "meta S" |
| 49 save.add_action_listener(function() | 49 save.add_action_listener(function() |
| 65 do | 65 do |
| 66 local edit_menu = new_menu() | 66 local edit_menu = new_menu() |
| 67 edit_menu.text = "Edit" | 67 edit_menu.text = "Edit" |
| 68 local document = window.text_area.document | 68 local document = window.text_area.document |
| 69 local undo, redo | 69 local undo, redo |
| 70 do | |
| 71 undo = new_menu_item() | |
| 72 undo.text = "Undo" | |
| 73 undo.accelerator = "meta Z" | |
| 74 undo.add_action_listener(document.undo) | |
| 75 edit_menu.add(undo) | |
| 76 end | |
| 77 do | |
| 78 redo = new_menu_item() | |
| 79 redo.text = "Redo" | |
| 80 redo.accelerator = "meta shift Z" | |
| 81 redo.add_action_listener(document.redo) | |
| 82 edit_menu.add(redo) | |
| 83 end | |
| 70 local function update_undo_redo() | 84 local function update_undo_redo() |
| 71 undo.set_enabled(document.can_undo()) | 85 undo.set_enabled(document.can_undo()) |
| 72 redo.set_enabled(document.can_redo()) | 86 redo.set_enabled(document.can_redo()) |
| 73 end | 87 end |
| 74 edit_menu.update_undo_redo = update_undo_redo -- prevent gc | 88 edit_menu.update_undo_redo = update_undo_redo -- prevent gc |
| 75 do | |
| 76 undo = new_menu_item() | |
| 77 undo.text = "Undo" | |
| 78 undo.accelerator = "meta Z" | |
| 79 undo.add_action_listener(function() | |
| 80 document.undo() | |
| 81 update_undo_redo() | |
| 82 end) | |
| 83 edit_menu.add(undo) | |
| 84 end | |
| 85 do | |
| 86 redo = new_menu_item() | |
| 87 redo.text = "Redo" | |
| 88 redo.accelerator = "meta shift Z" | |
| 89 redo.add_action_listener(function() | |
| 90 document.redo() | |
| 91 update_undo_redo() | |
| 92 end) | |
| 93 edit_menu.add(redo) | |
| 94 end | |
| 95 update_undo_redo() | 89 update_undo_redo() |
| 96 document.add_undoable_edit_listener(update_undo_redo) | 90 document.add_undo_listener(update_undo_redo) |
| 97 edit_menu.add_separator() | 91 edit_menu.add_separator() |
| 98 do | 92 do |
| 99 local cut = new_menu_item() | 93 local cut = new_menu_item() |
| 100 cut.text = "Cut" | 94 cut.text = "Cut" |
| 101 cut.accelerator = "meta X" | 95 cut.accelerator = "meta X" |
| 149 function new_window(file) | 143 function new_window(file) |
| 150 local window = {} | 144 local window = {} |
| 151 window.has_file = file~=nil and file.is_file() | 145 window.has_file = file~=nil and file.is_file() |
| 152 local frame = new_frame() | 146 local frame = new_frame() |
| 153 local title = file and file.canonical().to_string() or "new" | 147 local title = file and file.canonical().to_string() or "new" |
| 154 frame.title = title | |
| 155 frame.add_close_listener(function() | 148 frame.add_close_listener(function() |
| 156 n_windows = n_windows - 1 | 149 n_windows = n_windows - 1 |
| 157 if n_windows == 0 then | 150 if n_windows == 0 then |
| 158 Luan.exit() | 151 Luan.exit() |
| 159 end | 152 end |
| 169 end | 162 end |
| 170 if file.is_file() then | 163 if file.is_file() then |
| 171 text_area.text = file.read_text() | 164 text_area.text = file.read_text() |
| 172 end | 165 end |
| 173 end | 166 end |
| 167 local function set_title() | |
| 168 local s = title | |
| 169 if not text_area.document.is_unedited() then | |
| 170 s = s.." *" | |
| 171 end | |
| 172 frame.title = s | |
| 173 end | |
| 174 set_title() | |
| 175 text_area.set_title = set_title -- no gc | |
| 176 text_area.document.add_undo_listener(set_title) | |
| 174 text_area.rows = 10 | 177 text_area.rows = 10 |
| 175 text_area.columns = 20 | 178 text_area.columns = 20 |
| 176 text_area.wrap_style_word = true | 179 text_area.wrap_style_word = true |
| 177 text_area.line_wrap = true | 180 text_area.line_wrap = true |
| 178 text_area.tab_size = 4 | 181 text_area.tab_size = 4 |
| 208 title = file.canonical().to_string() | 211 title = file.canonical().to_string() |
| 209 frame.title = title | 212 frame.title = title |
| 210 documents[title] = text_area.document | 213 documents[title] = text_area.document |
| 211 end | 214 end |
| 212 file.write_text(text_area.text) | 215 file.write_text(text_area.text) |
| 216 text_area.document.set_unedited() | |
| 213 return true | 217 return true |
| 214 end | 218 end |
| 215 function window.revert() | 219 function window.revert() |
| 216 local caret_position = text_area.caret_position | 220 local caret_position = text_area.caret_position |
| 217 local text = file.read_text() | 221 local text = file.read_text() |
| 218 text_area.text = text | 222 text_area.text = text |
| 219 text_area.caret_position = min(caret_position,#text) | 223 text_area.caret_position = min(caret_position,#text) |
| 224 text_area.document.set_unedited() | |
| 220 end | 225 end |
| 221 local menu_bar = make_menu_bar(window) | 226 local menu_bar = make_menu_bar(window) |
| 222 frame.set_menu_bar(menu_bar) | 227 frame.set_menu_bar(menu_bar) |
| 223 frame.pack() | 228 frame.pack() |
| 224 frame.visible = true | 229 frame.visible = true |
