int viundochange(char **args) { handleundo(); if(curchange->next) { do { applychange(curchange); curchange = curchange->next; } while(curchange->next); setlastline(); return 0; } else return undo(args); }
int redo(UNUSED(char **args)) { handleundo(); do { if(!curchange->next) return 1; if (applychange(curchange)) curchange = curchange->next; else break; } while(curchange->prev->flags & CH_NEXT); setlastline(); return 0; }
int undo(UNUSED(char **args)) { handleundo(); do { if(!curchange->prev) return 1; if (unapplychange(curchange->prev)) curchange = curchange->prev; else break; } while(curchange->flags & CH_PREV); setlastline(); return 0; }
mod_export void handleundo(void) { int remetafy; /* * Yuk: we call this from within the completion system, * so we need to convert back to the form which can be * copied into undo entries. */ if (zlemetaline != NULL) { unmetafy_line(); remetafy = 1; } else remetafy = 0; mkundoent(); if(nextchanges) { setlastline(); if(curchange->next) { freechanges(curchange->next); curchange->next = NULL; free(curchange->del); free(curchange->ins); curchange->del = curchange->ins = NULL; curchange->dell = curchange->insl = 0; } nextchanges->prev = curchange->prev; if(curchange->prev) curchange->prev->next = nextchanges; else changes = nextchanges; curchange->prev = endnextchanges; endnextchanges->next = curchange; nextchanges = endnextchanges = NULL; } if (remetafy) metafy_line(); }
int undo(char **args) { zlong last_change = (zlong)0; if (*args) { last_change = zstrtol(*args, NULL, 0); } handleundo(); do { if(!curchange->prev) return 1; if (unapplychange(curchange->prev)) curchange = curchange->prev; else break; } while (*args ? curchange->changeno != last_change : (curchange->flags & CH_PREV)); setlastline(); return 0; }