parent $generic_editor object $code_editor var $root child_index 0 var $root owners [$code_editor] var $root owned [$code_editor] var $root fertile 0 var $has_commands commands [["compile", 'compile_cmd], ["refresh", 'refresh_cmd]] var $has_commands shortcuts [] var $root inited 1 var $command_aliases command_aliases [] var $root manager $code_editor var $root writable [$code_editor] var $root readable ['parameters, 'methods, 'code] var $root dbref 'code_editor var $old_command_environment verb_cache #[] var $old_command_environment command_cache [["compile", 'compile_cmd], ["refresh", 'refresh_cmd], ["@abort|abort", 'abort_cmd], ["quit|@quit", 'quit_cmd], ["list|nlist *", 'list_cmd], ["ins?ert *", 'insert_cmd], ["del?ete *", 'del_line_cmd], ["join *", 'join_cmd], ["enter", 'enter_cmd], ["help", 'help_screen]] var $old_command_environment shortcuts_cache [["\"*", 'add_line_cmd, [1]], ["s/*/*", 'sub_cmd, ["", 1, 2]], ["fill * @*", 'fill_cmd, ["", 1, 2]], ["fill *", 'fill_cmd, ["", 1, ""]]] method start_editing arg what; var ref, obj, method, code; // called by $user_input.edit_cmd ref = $parse.reference(what); obj = (| sender().match_environment(ref[1]) |); if (!obj) { sender().tell(what + " does not describe an editable method."); return 0; } method = tosym(ref[2]); catch any { code = sender().run_with_users_perms(obj, 'list_method, method, 2); } with handler { if (error() == ~methodnf) { code = []; } else { sender().tell(("You cannot edit " + what) + "."); sender().tell("Error: " + ((traceback()[1])[2])); return 0; } } sender().tell(("Now editing " + what) + "."); code = $generic_editor.adjust(code, 'spaces); // user doing editing, obj to be programmed, method to be programmed, code, current line // number, changes made return #[['user, sender()], ['obj, obj], ['method, method], ['text, code], ['cur_line, 1], ['changed, 0]]; . method compile_cmd arg editing, cmd; var errors, last_edit; .perms(sender(), 'parser); catch any { last_edit = (" // Edited: " + ($time.ldate('mdy, 'dash))) + "/"; last_edit = (last_edit + ($time.ltime('12hr, '_ampm))) + " "; last_edit = (last_edit + "by: ") + ((editing['user]).namef('ref)); errors = (editing['user]).run_with_users_perms(editing['obj], 'compile, (editing['text]) + [last_edit], editing['method]); if (errors) { (editing['user]).tell(errors); } else { (editing['user]).tell("Method compiled."); // clear modified flag editing = editing.replace('changed, 0); } } with handler { (editing['user]).tell("An error occurred attempting to compile."); (editing['user]).tell("The error was " + ((traceback()[1])[2])); } return editing; . method refresh_cmd arg editing, com; var code; // re-loads method if not changed .perms(sender(), 'parser); if (editing['changed]) { (editing['user]).tell("Changes have been made. Compile first to refresh."); } else { catch any { code = (editing['user]).run_with_users_perms(editing['obj], 'list_method, editing['method], 2); } with handler { (editing['user]).tell("Unable to list method into buffer, error was " + ((traceback()[1])[2])); return editing; } editing = editing.replace('text, code); (editing['user]).tell("Done."); } return editing; . method help_msg var msg; msg = []; msg = msg + ["The code editor allows you to modify and re-compile methods."]; msg = msg + ["It includes these commands it inherits from the generic editor:"]; msg = msg + pass(); msg = msg + [""]; msg = msg + ["And adds the following:"]; msg = msg + [" compile compile and store current text"]; msg = msg + [" refresh re-load compiled method"]; msg = msg + [""]; return msg; .