comparison editor.luan @ 4:3d6414265959

add save
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 31 Mar 2025 19:14:04 -0600
parents a79a840691b1
children 57b4c281a03e
comparison
equal deleted inserted replaced
3:a79a840691b1 4:3d6414265959
20 20
21 local new_window 21 local new_window
22 22
23 local function make_menu_bar(window) 23 local function make_menu_bar(window)
24 local menu_bar = new_menu_bar() 24 local menu_bar = new_menu_bar()
25 do
25 local file_menu = new_menu() 26 local file_menu = new_menu()
26 file_menu.text = "File" 27 file_menu.text = "File"
28 do
27 local new_file = new_menu_item() 29 local new_file = new_menu_item()
28 new_file.text = "New File" 30 new_file.text = "New File"
29 new_file.accelerator = "meta N" 31 new_file.accelerator = "meta N"
30 new_file.add_action_listener(function() 32 new_file.add_action_listener(function()
31 new_window() 33 new_window()
32 end) 34 end)
33 file_menu.add(new_file) 35 file_menu.add(new_file)
36 end
37 do
34 local open = new_menu_item() 38 local open = new_menu_item()
35 open.text = "Open..." 39 open.text = "Open..."
36 open.accelerator = "meta O" 40 open.accelerator = "meta O"
37 open.add_action_listener(function() 41 open.add_action_listener(function()
38 local file_chooser = window.frame.file_chooser_load() 42 local file_chooser = window.frame.file_chooser_load()
44 if file ~= nil then 48 if file ~= nil then
45 new_window(file) 49 new_window(file)
46 end 50 end
47 end) 51 end)
48 file_menu.add(open) 52 file_menu.add(open)
53 end
54 do
55 local save = new_menu_item()
56 save.text = "Save"
57 save.accelerator = "meta S"
58 save.add_action_listener(function()
59 if window.file == nil then
60 local file_chooser = window.frame.file_chooser_save()
61 file_chooser.visible = true
62 local file = file_chooser.file
63 if file == nil then
64 return
65 end
66 window.file = file
67 window.frame.title = file.canonical().to_string()
68 end
69 window.file.write_text(window.text_area.text)
70 end)
71 file_menu.add(save)
72 end
49 menu_bar.add(file_menu) 73 menu_bar.add(file_menu)
74 end
75 do
50 local view_menu = new_menu() 76 local view_menu = new_menu()
51 view_menu.text = "View" 77 view_menu.text = "View"
78 do
52 local word_wrap = new_check_box_menu_item() 79 local word_wrap = new_check_box_menu_item()
53 word_wrap.text = "Word Wrap" 80 word_wrap.text = "Word Wrap"
54 word_wrap.state = window.text_area.line_wrap 81 word_wrap.state = window.text_area.line_wrap
55 word_wrap.add_action_listener(function() 82 word_wrap.add_action_listener(function()
56 window.text_area.line_wrap = word_wrap.state 83 window.text_area.line_wrap = word_wrap.state
57 end) 84 end)
58 view_menu.add(word_wrap) 85 view_menu.add(word_wrap)
86 end
59 menu_bar.add(view_menu) 87 menu_bar.add(view_menu)
88 end
60 return menu_bar 89 return menu_bar
61 end 90 end
62 91
63 local n_windows = 0 92 local n_windows = 0
64 93
65 function new_window(file) 94 function new_window(file)
66 local frame = new_frame() 95 local frame = new_frame()
67 frame.title = file and file.canonical().to_string() or "untitled" 96 frame.title = file and file.canonical().to_string() or "new"
68 frame.add_close_listener(function() 97 frame.add_close_listener(function()
69 n_windows = n_windows - 1 98 n_windows = n_windows - 1
70 if n_windows == 0 then 99 if n_windows == 0 then
71 Luan.exit() 100 Luan.exit()
72 end 101 end