bool editor_window_split(Win *original) { Win *win = window_new_file(original->editor, original->file); if (!win) return false; win->file = original->file; win->file->refcount++; view_syntax_set(win->view, view_syntax_get(original->view)); view_cursor_to(win->view, view_cursor_get(original->view)); editor_draw(win->editor); return true; }
bool vis_window_split(Win *original) { Win *win = window_new_file(original->vis, original->file); if (!win) return false; for (size_t i = 0; i < LENGTH(win->modes); i++) { if (original->modes[i].bindings) win->modes[i].bindings = map_new(); if (win->modes[i].bindings) map_copy(win->modes[i].bindings, original->modes[i].bindings); } win->file = original->file; win->file->refcount++; view_syntax_set(win->view, view_syntax_get(original->view)); view_options_set(win->view, view_options_get(original->view)); view_cursor_to(win->view, view_cursor_get(original->view)); vis_draw(win->vis); return true; }
bool editor_window_new(Editor *ed, const char *filename) { File *file = file_new(ed, filename); if (!file) return false; Win *win = window_new_file(ed, file); if (!win) { file_free(ed, file); return false; } if (filename) { for (Syntax *syn = ed->syntaxes; syn && syn->name; syn++) { if (!regexec(&syn->file_regex, filename, 0, NULL, 0)) { view_syntax_set(win->view, syn); break; } } } editor_draw(ed); return true; }