Mercurial Hosting > editor
changeset 21:79f060db4d79
work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 08 Apr 2025 19:43:16 -0600 |
parents | 1bfd4a2d6d4e |
children | b2d9b3836c2b |
files | dev.sh editor.luan |
diffstat | 2 files changed, 137 insertions(+), 179 deletions(-) [+] |
line wrap: on
line diff
--- a/dev.sh Tue Apr 08 13:42:59 2025 -0600 +++ b/dev.sh Tue Apr 08 19:43:16 2025 -0600 @@ -1,1 +1,1 @@ -java -Xdock:name="Luan Editor" -classpath $CLASSPATH luan.Luan editor.luan "$@" 2> >(grep --line-buffered -v 'openAndSavePanelService' >&2) 2>&1 | tee err +java -Xdock:name="Luan Editor" -classpath $CLASSPATH luan.Luan editor.luan "$@" 2>&1 | grep --line-buffered -v 'openAndSavePanelService' | tee err
--- a/editor.luan Tue Apr 08 13:42:59 2025 -0600 +++ b/editor.luan Tue Apr 08 19:43:16 2025 -0600 @@ -19,7 +19,9 @@ local new_scroll_pane = require("luan:swing/Scroll_pane.luan").new or error() local new_text_area_line_numbers = require("luan:swing/Text_area_line_numbers.luan").new or error() local new_menu_bar = require("luan:swing/Menu_bar.luan").new or error() -local new_menu = require("luan:swing/Menu.luan").new or error() +local Menu = require "luan:swing/Menu.luan" +local new_menu = Menu.new or error() +local separator = Menu.separator or error() local new_menu_item = require("luan:swing/Menu_item.luan").new or error() local new_check_box_menu_item = require("luan:swing/Check_box_menu_item.luan").new or error() local int_to_color = require("luan:swing/Color.luan").int_to_color or error() @@ -48,187 +50,143 @@ end local function make_menu_bar(window) - local menu_bar = new_menu_bar() - do - local file_menu = new_menu() - file_menu.text = "File" - do - local new_file = new_menu_item{ - text = "New File" - accelerator = "meta N" - action_listener = function(_) - new_window() - end - } - file_menu.add(new_file) - end - do - local open = new_menu_item{ - text = "Open..." - accelerator = "meta O" - action_listener = action_listener(window.open) - } - file_menu.add(open) - end - local revert - do - local save = new_menu_item{ - text = "Save" - accelerator = "meta S" - action_listener = function(_) - if window.save() then - revert.set_enabled(true) - end - end - } - file_menu.add(save) - end - do - revert = new_menu_item{ - text = "Revert" - enabled = window.has_file - action_listener = action_listener(window.revert) - } - file_menu.add(revert) - end - menu_bar.add(file_menu) + local document = window.text_area.document + local revert = new_menu_item{ + text = "Revert" + enabled = window.has_file + action_listener = action_listener(window.revert) + } + local undo = new_menu_item{ + text = "Undo" + accelerator = "meta Z" + action_listener = action_listener(document.undo) + } + local redo = new_menu_item{ + text = "Redo" + accelerator = "meta shift Z" + action_listener = action_listener(document.redo) + } + local function update_undo_redo() + undo.set_enabled(document.can_undo()) + redo.set_enabled(document.can_redo()) end - do - local edit_menu = new_menu() - edit_menu.text = "Edit" - local document = window.text_area.document - local undo, redo - do - undo = new_menu_item{ - text = "Undo" - accelerator = "meta Z" - action_listener = action_listener(document.undo) - } - edit_menu.add(undo) - end - do - redo = new_menu_item{ - text = "Redo" - accelerator = "meta shift Z" - action_listener = action_listener(document.redo) - } - edit_menu.add(redo) - end - local function update_undo_redo() - undo.set_enabled(document.can_undo()) - redo.set_enabled(document.can_redo()) - end - edit_menu.dont_gc(update_undo_redo) - update_undo_redo() - document.add_undo_listener(update_undo_redo) - edit_menu.add_separator() - do - local cut = new_menu_item{ - text = "Cut" - accelerator = "meta X" - action_listener = action_listener(window.text_area.cut) - } - edit_menu.add(cut) - end - do - local copy = new_menu_item{ - text = "Copy" - accelerator = "meta C" - action_listener = action_listener(window.text_area.copy) + window.update_undo_redo = update_undo_redo -- dont gc + update_undo_redo() + document.add_undo_listener(update_undo_redo) + + return new_menu_bar{ + menus = { + new_menu{ + text = "File" + menu_items = { + new_menu_item{ + text = "New File" + accelerator = "meta N" + action_listener = function(_) + new_window() + end + } + new_menu_item{ + text = "Open..." + accelerator = "meta O" + action_listener = action_listener(window.open) + } + new_menu_item{ + text = "Save" + accelerator = "meta S" + action_listener = function(_) + if window.save() then + revert.set_enabled(true) + end + end + } + revert + } } - edit_menu.add(copy) - end - do - local paste = new_menu_item{ - text = "Paste" - accelerator = "meta V" - action_listener = action_listener(window.text_area.paste) - } - edit_menu.add(paste) - end - edit_menu.add_separator() - do - local indent = new_menu_item{ - text = "Indent" - accelerator = "meta CLOSE_BRACKET" - action_listener = action_listener(window.indent) - } - edit_menu.add(indent) - end - do - local unindent = new_menu_item{ - text = "Unindent" - accelerator = "meta OPEN_BRACKET" - action_listener = action_listener(window.unindent) - } - edit_menu.add(unindent) - end - edit_menu.add_separator() - do - local select_all = new_menu_item{ - text = "Select All" - accelerator = "meta A" - action_listener = action_listener(window.text_area.select_all) - } - edit_menu.add(select_all) - end - edit_menu.add_separator() - do - local find = new_menu_item{ - text = "Find and Replace" - accelerator = "meta F" - action_listener = action_listener(window.show_find_dialog) + new_menu{ + text = "Edit" + menu_items = { + undo + redo + separator + new_menu_item{ + text = "Cut" + accelerator = "meta X" + action_listener = action_listener(window.text_area.cut) + } + new_menu_item{ + text = "Copy" + accelerator = "meta C" + action_listener = action_listener(window.text_area.copy) + } + new_menu_item{ + text = "Paste" + accelerator = "meta V" + action_listener = action_listener(window.text_area.paste) + } + separator + new_menu_item{ + text = "Indent" + accelerator = "meta CLOSE_BRACKET" + action_listener = action_listener(window.indent) + } + new_menu_item{ + text = "Unindent" + accelerator = "meta OPEN_BRACKET" + action_listener = action_listener(window.unindent) + } + separator + new_menu_item{ + text = "Select All" + accelerator = "meta A" + action_listener = action_listener(window.text_area.select_all) + } + separator + new_menu_item{ + text = "Find and Replace" + accelerator = "meta F" + action_listener = action_listener(window.show_find_dialog) + } + } } - edit_menu.add(find) - end - menu_bar.add(edit_menu) - end - do - local view_menu = new_menu() - view_menu.text = "View" - do - local word_wrap = new_check_box_menu_item{ - text = "Word Wrap" - state = window.text_area.line_wrap - action_listener = function(event) - window.text_area.line_wrap = event.source.state - end + new_menu{ + text = "View" + menu_items = { + new_check_box_menu_item{ + text = "Word Wrap" + state = window.text_area.line_wrap + action_listener = function(event) + window.text_area.line_wrap = event.source.state + end + } + new_check_box_menu_item{ + text = "Show Whitespace" + action_listener = function(event) + window.text_area.show_whitespace(event.source.state) + end + } + new_menu_item{ + text = "Show Cursor Column" + action_listener = function(_) + show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() ) + end + } + new_menu_item{ + text = "Goto Line" + accelerator = "meta G" + action_listener = function(_) + local input = show_input_dialog( window.frame, "Goto line" ) + --logger.info("input "..input) + local line = input and to_number(input) + if line ~= nil then + window.goto(line) + end + end + } + } } - view_menu.add(word_wrap) - end - do - local show_whitespace = new_check_box_menu_item() - show_whitespace.text = "Show Whitespace" - show_whitespace.add_action_listener(function(_) - window.text_area.show_whitespace(show_whitespace.state) - end) - view_menu.add(show_whitespace) - end - do - local show_column = new_menu_item() - show_column.text = "Show Cursor Column" - show_column.add_action_listener(function(_) - show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() ) - end) - view_menu.add(show_column) - end - do - local goto = new_menu_item() - goto.text = "Goto Line" - goto.accelerator = "meta G" - goto.add_action_listener(function(_) - local input = show_input_dialog( window.frame, "Goto line" ) - --logger.info("input "..input) - local line = input and to_number(input) - if line ~= nil then - window.goto(line) - end - end) - view_menu.add(goto) - end - menu_bar.add(view_menu) - end - return menu_bar + } + } end local function make_find_dialog(window)