Mercurial Hosting > editor
comparison editor.luan @ 24:da93a58e24aa
work
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Wed, 09 Apr 2025 11:43:31 -0600 |
| parents | e4af9e024d63 |
| children | ce3d1dc406a8 |
comparison
equal
deleted
inserted
replaced
| 23:e4af9e024d63 | 24:da93a58e24aa |
|---|---|
| 226 local documents = {} | 226 local documents = {} |
| 227 | 227 |
| 228 function new_window(file) | 228 function new_window(file) |
| 229 local window = {} | 229 local window = {} |
| 230 window.has_file = file~=nil and file.is_file() | 230 window.has_file = file~=nil and file.is_file() |
| 231 local frame = new_frame() | 231 local text_area = new_text_area{ |
| 232 window.frame = frame | 232 rows = 10 |
| 233 columns = 20 | |
| 234 wrap_style_word = true | |
| 235 line_wrap = true | |
| 236 tab_size = 4 | |
| 237 font = { family="Monospaced", size=13 } | |
| 238 border = create_empty_border(0,4,0,4) | |
| 239 } | |
| 240 window.text_area = text_area | |
| 233 local title = file and file.canonical().to_string() or "new" | 241 local title = file and file.canonical().to_string() or "new" |
| 234 frame.add_close_listener(function() | |
| 235 n_windows = n_windows - 1 | |
| 236 if n_windows == 0 then | |
| 237 Luan.exit() | |
| 238 end | |
| 239 end) | |
| 240 local text_area = new_text_area{} | |
| 241 window.text_area = text_area | |
| 242 if file ~= nil then | 242 if file ~= nil then |
| 243 local document = documents[title] | 243 local document = documents[title] |
| 244 if document == nil then | 244 if document == nil then |
| 245 documents[title] = text_area.document | 245 documents[title] = text_area.document |
| 246 else | 246 else |
| 249 if file.is_file() then | 249 if file.is_file() then |
| 250 text_area.text = file.read_text() | 250 text_area.text = file.read_text() |
| 251 text_area.document.clear_unedited() | 251 text_area.document.clear_unedited() |
| 252 end | 252 end |
| 253 end | 253 end |
| 254 text_area.set_selection(0) | |
| 255 local frame = new_frame{ | |
| 256 content_pane = new_scroll_pane{ | |
| 257 view = text_area | |
| 258 row_header_view = new_text_area_line_numbers{ | |
| 259 text_area = text_area | |
| 260 foreground_color = int_to_color(0x888888) | |
| 261 border = create_empty_border(0,8,0,8) | |
| 262 } | |
| 263 } | |
| 264 } | |
| 265 window.frame = frame | |
| 266 frame.add_close_listener(function() | |
| 267 n_windows = n_windows - 1 | |
| 268 if n_windows == 0 then | |
| 269 Luan.exit() | |
| 270 end | |
| 271 end) | |
| 254 local function set_title() | 272 local function set_title() |
| 255 local s = title | 273 local s = title |
| 256 if not text_area.document.is_unedited() then | 274 if not text_area.document.is_unedited() then |
| 257 s = s.." *" | 275 s = s.." *" |
| 258 end | 276 end |
| 259 frame.title = s | 277 frame.title = s |
| 260 end | 278 end |
| 261 set_title() | 279 set_title() |
| 262 text_area.dont_gc(set_title) | 280 window.set_title = set_title -- dont gc |
| 263 text_area.document.add_undo_listener(set_title) | 281 text_area.document.add_undo_listener(set_title) |
| 264 text_area.rows = 10 | |
| 265 text_area.columns = 20 | |
| 266 text_area.wrap_style_word = true | |
| 267 text_area.line_wrap = true | |
| 268 text_area.tab_size = 4 | |
| 269 text_area.set_font{ family="Monospaced", size=13 } | |
| 270 text_area.set_selection(0) | |
| 271 --print(text_area.line_count) | |
| 272 local scroll_pane = new_scroll_pane{ | |
| 273 view = text_area | |
| 274 } | |
| 275 local line_numbers = new_text_area_line_numbers{ | |
| 276 text_area = text_area | |
| 277 } | |
| 278 line_numbers.foreground_color = int_to_color(0x888888) | |
| 279 line_numbers.border = create_empty_border(0,8,0,8) | |
| 280 scroll_pane.set_row_header_view(line_numbers) | |
| 281 frame.add(scroll_pane) | |
| 282 function window.open() | 282 function window.open() |
| 283 local file_chooser = frame.file_chooser_load() | 283 local file_chooser = frame.file_chooser_load() |
| 284 if file ~= nil then | 284 if file ~= nil then |
| 285 file_chooser.directory = file.parent() | 285 file_chooser.directory = file.parent() |
| 286 end | 286 end |
