comparison src/luan_editor/menu.luan @ 58:7e2d6426c155 default tip

cross-platform accelerators
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 30 May 2025 13:17:51 -0600
parents 6059b4e22d47
children
comparison
equal deleted inserted replaced
57:f91c336cdde5 58:7e2d6426c155
42 status_bar.text = window.title() 42 status_bar.text = window.title()
43 end 43 end
44 } 44 }
45 local undo = new_menu_item{ 45 local undo = new_menu_item{
46 text = "Undo" 46 text = "Undo"
47 accelerator = "meta Z" 47 accelerator = "Z"
48 action_listener = action_listener(document.undo) 48 action_listener = action_listener(document.undo)
49 } 49 }
50 local redo = new_menu_item{ 50 local redo = new_menu_item{
51 text = "Redo" 51 text = "Redo"
52 accelerator = "meta shift Z" 52 accelerator = "shift Z"
53 action_listener = action_listener(document.redo) 53 action_listener = action_listener(document.redo)
54 } 54 }
55 local function update_undo_redo() 55 local function update_undo_redo()
56 undo.set_enabled(document.can_undo()) 56 undo.set_enabled(document.can_undo())
57 redo.set_enabled(document.can_redo()) 57 redo.set_enabled(document.can_redo())
60 update_undo_redo() 60 update_undo_redo()
61 document.add_undo_listener(update_undo_redo) 61 document.add_undo_listener(update_undo_redo)
62 62
63 local find_menu_item = new_check_box_menu_item{ 63 local find_menu_item = new_check_box_menu_item{
64 text = "Find and Replace" 64 text = "Find and Replace"
65 accelerator = "meta F" 65 accelerator = "F"
66 action_listener = function(event) 66 action_listener = function(event)
67 window.show_find_panel(event.source.state) 67 window.show_find_panel(event.source.state)
68 end 68 end
69 } 69 }
70 window.find_menu_item = find_menu_item 70 window.find_menu_item = find_menu_item
74 new_menu{ 74 new_menu{
75 text = "File" 75 text = "File"
76 menu_items = { 76 menu_items = {
77 new_menu_item{ 77 new_menu_item{
78 text = "New File" 78 text = "New File"
79 accelerator = "meta N" 79 accelerator = "N"
80 action_listener = action_listener(window.new) 80 action_listener = action_listener(window.new)
81 } 81 }
82 new_menu_item{ 82 new_menu_item{
83 text = "Open..." 83 text = "Open..."
84 accelerator = "meta O" 84 accelerator = "O"
85 action_listener = action_listener(window.open) 85 action_listener = action_listener(window.open)
86 } 86 }
87 new_menu_item{ 87 new_menu_item{
88 text = "Save" 88 text = "Save"
89 accelerator = "meta S" 89 accelerator = "S"
90 action_listener = function(_) 90 action_listener = function(_)
91 if window.save() then 91 if window.save() then
92 revert.set_enabled(true) 92 revert.set_enabled(true)
93 view_file_path.set_enabled(true) 93 view_file_path.set_enabled(true)
94 end 94 end
125 undo 125 undo
126 redo 126 redo
127 separator 127 separator
128 new_menu_item{ 128 new_menu_item{
129 text = "Cut" 129 text = "Cut"
130 accelerator = "meta X" 130 accelerator = "X"
131 action_listener = action_listener(text_area.cut) 131 action_listener = action_listener(text_area.cut)
132 } 132 }
133 new_menu_item{ 133 new_menu_item{
134 text = "Copy" 134 text = "Copy"
135 accelerator = "meta C" 135 accelerator = "C"
136 action_listener = action_listener(text_area.copy) 136 action_listener = action_listener(text_area.copy)
137 } 137 }
138 new_menu_item{ 138 new_menu_item{
139 text = "Paste" 139 text = "Paste"
140 accelerator = "meta V" 140 accelerator = "V"
141 action_listener = action_listener(text_area.paste) 141 action_listener = action_listener(text_area.paste)
142 } 142 }
143 separator 143 separator
144 new_menu_item{ 144 new_menu_item{
145 text = "Indent" 145 text = "Indent"
146 accelerator = "meta CLOSE_BRACKET" 146 accelerator = "CLOSE_BRACKET"
147 action_listener = action_listener(window.indent) 147 action_listener = action_listener(window.indent)
148 } 148 }
149 new_menu_item{ 149 new_menu_item{
150 text = "Unindent" 150 text = "Unindent"
151 accelerator = "meta OPEN_BRACKET" 151 accelerator = "OPEN_BRACKET"
152 action_listener = action_listener(window.unindent) 152 action_listener = action_listener(window.unindent)
153 } 153 }
154 separator 154 separator
155 new_menu_item{ 155 new_menu_item{
156 text = "Select All" 156 text = "Select All"
157 accelerator = "meta A" 157 accelerator = "A"
158 action_listener = action_listener(text_area.select_all) 158 action_listener = action_listener(text_area.select_all)
159 } 159 }
160 } 160 }
161 } 161 }
162 new_menu{ 162 new_menu{
187 window.set_line_wrap(event.source.state) 187 window.set_line_wrap(event.source.state)
188 end 188 end
189 } 189 }
190 new_check_box_menu_item{ 190 new_check_box_menu_item{
191 text = "Show Whitespace" 191 text = "Show Whitespace"
192 accelerator = "meta W" 192 accelerator = "W"
193 state = text_area.whitespace_visible 193 state = text_area.whitespace_visible
194 action_listener = function(event) 194 action_listener = function(event)
195 window.set_whitespace_visible(event.source.state) 195 window.set_whitespace_visible(event.source.state)
196 end 196 end
197 } 197 }
198 new_check_box_menu_item{ 198 new_check_box_menu_item{
199 text = "Spell Check" 199 text = "Spell Check"
200 accelerator = "meta SEMICOLON" 200 accelerator = "SEMICOLON"
201 action_listener = function(event) 201 action_listener = function(event)
202 spell_check(text_area,event.source.state) 202 spell_check(text_area,event.source.state)
203 end 203 end
204 } 204 }
205 new_menu_item{ 205 new_menu_item{
206 text = "Cursor Column" 206 text = "Cursor Column"
207 accelerator = "meta B" 207 accelerator = "B"
208 action_listener = function(_) 208 action_listener = function(_)
209 status_bar.text = "Cursor Column: "..window.cursor_column() 209 status_bar.text = "Cursor Column: "..window.cursor_column()
210 end 210 end
211 } 211 }
212 new_menu_item{ 212 new_menu_item{
213 text = "Goto Line" 213 text = "Goto Line"
214 accelerator = "meta G" 214 accelerator = "G"
215 action_listener = function(_) 215 action_listener = function(_)
216 local input = show_input_dialog( window.frame, "Goto line" ) 216 local input = show_input_dialog( window.frame, "Goto line" )
217 if input == nil then 217 if input == nil then
218 return 218 return
219 end 219 end
264 end 264 end
265 end 265 end
266 } 266 }
267 new_menu_item{ 267 new_menu_item{
268 text = "List Windows" 268 text = "List Windows"
269 accelerator = "meta L" 269 accelerator = "L"
270 action_listener = action_listener(show_list_window) 270 action_listener = action_listener(show_list_window)
271 } 271 }
272 } 272 }
273 } 273 }
274 } 274 }