comparison editor.luan @ 17:273aebbcf90b

add goto
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 06 Apr 2025 19:21:25 -0600
parents 90abee9e07d5
children fd6d0162e924
comparison
equal deleted inserted replaced
16:90abee9e07d5 17:273aebbcf90b
4 local stringify = Luan.stringify or error() 4 local stringify = Luan.stringify or error()
5 local String = require "luan:String.luan" 5 local String = require "luan:String.luan"
6 local sub_string = String.sub or error() 6 local sub_string = String.sub or error()
7 local replace = String.replace or error() 7 local replace = String.replace or error()
8 local starts_with = String.starts_with or error() 8 local starts_with = String.starts_with or error()
9 local to_number = String.to_number or error()
9 local Io = require "luan:Io.luan" 10 local Io = require "luan:Io.luan"
10 local print = Io.print or error() 11 local print = Io.print or error()
11 local new_file = Io.schemes.file or error() 12 local new_file = Io.schemes.file or error()
12 local Math = require "luan:Math.luan" 13 local Math = require "luan:Math.luan"
13 local min = Math.min or error() 14 local min = Math.min or error()
23 local new_check_box_menu_item = require("luan:swing/Check_box_menu_item.luan").new or error() 24 local new_check_box_menu_item = require("luan:swing/Check_box_menu_item.luan").new or error()
24 local int_to_color = require("luan:swing/Color.luan").int_to_color or error() 25 local int_to_color = require("luan:swing/Color.luan").int_to_color or error()
25 local create_empty_border = require("luan:swing/Border.luan").create_empty_border or error() 26 local create_empty_border = require("luan:swing/Border.luan").create_empty_border or error()
26 local Option_pane = require "luan:swing/Option_pane.luan" 27 local Option_pane = require "luan:swing/Option_pane.luan"
27 local show_message_dialog = Option_pane.show_message_dialog or error() 28 local show_message_dialog = Option_pane.show_message_dialog or error()
29 local show_input_dialog = Option_pane.show_input_dialog or error()
28 local Logging = require "luan:logging/Logging.luan" 30 local Logging = require "luan:logging/Logging.luan"
29 local logger = Logging.logger "editor" 31 local logger = Logging.logger "editor"
30 32
31 33
32 local new_window 34 local new_window
166 end 168 end
167 do 169 do
168 local show_column = new_menu_item() 170 local show_column = new_menu_item()
169 show_column.text = "Show Cursor Column" 171 show_column.text = "Show Cursor Column"
170 show_column.add_action_listener(function() 172 show_column.add_action_listener(function()
171 --logger.info(window.cursor_column())
172 show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() ) 173 show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() )
173 end) 174 end)
174 view_menu.add(show_column) 175 view_menu.add(show_column)
176 end
177 do
178 local goto = new_menu_item()
179 goto.text = "Goto Line"
180 goto.accelerator = "meta G"
181 goto.add_action_listener(function()
182 local input = show_input_dialog( window.frame, "Cursor Column: "..window.cursor_column() )
183 --logger.info("input "..input)
184 local line = input and to_number(input)
185 if line ~= nil then
186 window.goto(line)
187 end
188 end)
189 view_menu.add(goto)
175 end 190 end
176 menu_bar.add(view_menu) 191 menu_bar.add(view_menu)
177 end 192 end
178 return menu_bar 193 return menu_bar
179 end 194 end
311 local cursor_pos = text_area.get_selection() 326 local cursor_pos = text_area.get_selection()
312 local line = text_area.get_line_from_position(cursor_pos) 327 local line = text_area.get_line_from_position(cursor_pos)
313 local start_line_pos = text_area.get_line_start_position(line) 328 local start_line_pos = text_area.get_line_start_position(line)
314 return cursor_pos - start_line_pos + 1 329 return cursor_pos - start_line_pos + 1
315 end 330 end
331 function window.goto(line)
332 local pos = text_area.get_line_start_position(line)
333 text_area.set_selection(pos)
334 end
316 local menu_bar = make_menu_bar(window) 335 local menu_bar = make_menu_bar(window)
317 frame.set_menu_bar(menu_bar) 336 frame.set_menu_bar(menu_bar)
318 frame.pack() 337 frame.pack()
319 frame.visible = true 338 frame.visible = true
320 text_area.request_focus_in_window() 339 text_area.request_focus_in_window()