/
CDC-1.1/
parent $generic_editor
object $note_editor

var $root child_index 0
var $root owners [$note_editor]
var $root owned [$note_editor]
var $root fertile 0
var $has_commands commands [["save", 'save_cmd]]
var $has_commands shortcuts []
var $root inited 1
var $command_aliases command_aliases []
var $root manager $note_editor
var $root writable [$note_editor]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'note_editor

method start_editing
    arg what;
    var obj, text;
    
    // called by $user_input.edit_cmd
    obj = (| sender().match_environment(what) |);
    if ((!obj) || (!(| obj.writeable_by(sender()) |))) {
        sender().tell(("I don't see a note around here called " + what) + " that you can edit.");
        return 0;
    }
    catch any {
        text = sender().run_with_users_perms(obj, 'text);
    } with handler {
        sender().tell(("You cannot edit " + what) + ".");
        sender().tell("Error: " + ((traceback()[1])[2]));
        return 0;
    }
    sender().tell(("Now editing " + what) + ".");
    
    // user doing editing, obj edited, text, current line number, changes made
    return #[['user, sender()], ['obj, obj], ['text, text], ['cur_line, 1], ['changed, 0]];
.

method help_msg
    var msg;
    
    msg = [];
    msg = msg + ["The note editor allows you to write on notes interactively."];
    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 + ["  save         store text to note"];
    msg = msg + [""];
    return msg;
.

method save_cmd
    arg editing, cmd;
    var error;
    
    .perms(sender(), 'parser);
    catch any {
        (editing['user]).run_with_users_perms(editing['obj], 'erase_cmd, "", "all", "", "");
        (editing['user]).run_with_users_perms(editing['obj], 'add_text, editing['text], $user);
        (editing['user]).tell("Done.");
    
        // clear modified flag
        editing = $dict.replace(editing, 'changed, 0);
    } with handler {
        (editing['user]).tell("An error occurred attempting to save.");
        (editing['user]).tell("The error was " + ((traceback()[1])[2]));
    }
    return editing;
.