void vis_free(Vis *vis) { if (!vis) return; if (vis->event && vis->event->vis_quit) vis->event->vis_quit(vis); vis->event = NULL; while (vis->windows) vis_window_close(vis->windows); file_free(vis, vis->command_file); file_free(vis, vis->search_file); file_free(vis, vis->error_file); for (int i = 0; i < LENGTH(vis->registers); i++) register_release(&vis->registers[i]); vis->ui->free(vis->ui); map_free(vis->cmds); map_free_full(vis->usercmds); map_free(vis->options); map_free(vis->actions); map_free(vis->keymap); buffer_release(&vis->input_queue); for (int i = 0; i < VIS_MODE_INVALID; i++) map_free(vis_modes[i].bindings); array_release_full(&vis->motions); array_release_full(&vis->textobjects); free(vis); }
void editor_free(Editor *ed) { if (!ed) return; while (ed->windows) editor_window_close(ed->windows); file_free(ed, ed->prompt->file); window_free(ed->prompt); text_regex_free(ed->search_pattern); for (int i = 0; i < REG_LAST; i++) register_release(&ed->registers[i]); for (int i = 0; i < MACRO_LAST; i++) macro_release(&ed->macros[i]); editor_syntax_unload(ed); ed->ui->free(ed->ui); map_free(ed->cmds); map_free(ed->options); buffer_release(&ed->buffer_repeat); free(ed); }