static void op_cut(qw_edit_t *e, qw_core_t *c) { if (e->ms != -1 && e->me != -1) { op_copy(e, c); op_del_mark(e); } }
/* Be careful: name is not copied, but assigned! */ var var_as_var_t(bombyx_env_t *env, var_t *vt) { var v = {0}; v.name = vt->v.name; op_copy(env, &v, &vt->v); v.ref = vt; return v; }
/* Synchronizes var with vars[] if necessary Var is NOT modified */ void var_sync(bombyx_env_t *env, var *a) { if (a->ref) { op_copy(env, &(a->ref)->v, a); } else if (a->name) { var_t *vt = var_lookup(env->vars, a->name); if (vt) { op_copy(env, &vt->v, a); } else { runtime_error(env, "Variable '%s' not found.", a->name); } } }
qw_op_t qw_edit_op(qw_edit_t *e, qw_event_t *ev) { qw_op_t r = QW_OP_NOP; qw_core_t *c = ev->c; switch (ev->o) { case QW_OP_LEFT: op_left(e); break; case QW_OP_RIGHT: op_right(e); break; case QW_OP_UP: op_up(e, ev->f); break; case QW_OP_DOWN: op_down(e, ev->f); break; case QW_OP_PGUP: op_pgup(e, ev->f); break; case QW_OP_PGDN: op_pgdn(e, ev->f); break; case QW_OP_BOL: op_bol(e); break; case QW_OP_EOL: op_eol(e); break; case QW_OP_BOR: op_bor(e, ev->f); break; case QW_OP_EOR: op_eor(e, ev->f); break; case QW_OP_BOF: op_bof(e); break; case QW_OP_EOF: op_eof(e); break; case QW_OP_CHAR: op_char(e, ev->w); break; case QW_OP_DEL: op_del(e); break; case QW_OP_BACKSPACE: op_backspace(e); break; case QW_OP_NEWLINE: op_char(e, L'\n'); break; case QW_OP_TAB: op_tab(e, ev->f, c); break; case QW_OP_HARD_TAB: op_char(e, L'\t'); break; case QW_OP_DEL_ROW: op_del_row(e, ev->f); break; case QW_OP_UNDO: op_undo(e); break; case QW_OP_MARK: op_mark(e); break; case QW_OP_UNMARK: op_unmark(e); break; case QW_OP_COPY: op_copy(e, c); op_unmark(e); break; case QW_OP_PASTE: op_paste(e, c); break; case QW_OP_CUT: op_cut(e, c); break; case QW_OP_SAVE: op_save(e); break; case QW_OP_SHOW_CODES: ev->f->l = L" \xb6"[!!(ev->f->l == L' ')]; break; case QW_OP_SEARCH: op_search(e, c); break; case QW_OP_CLOSE: r = QW_OP_DESTROY; break; case QW_OP_DESTROY: r = QW_OP_DESTROY; break; case QW_OP_NOP: case QW_OP_COUNT: break; } return r; }