From 7e85064ac77ea43e84d88eb910b0adb6f07d5d12 Mon Sep 17 00:00:00 2001 From: Randy Palamar Date: Tue, 21 May 2024 10:23:25 -0600 Subject: remove some ui pointer chasing There only exists a single Ui so there is no need to force a pointer redirection for accessing it. The Ui member was moved down in vis-core.h to punt around an issue with the way lua checks for existing objects. It may show up again as I flatten more structs. --- vis.c | 53 ++++++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index be4a66a..9bac2a8 100644 --- a/vis.c +++ b/vis.c @@ -202,8 +202,7 @@ static void window_free(Win *win) { if (other->parent == win) other->parent = NULL; } - if (vis->ui) - ui_window_free(win->ui); + ui_window_free(win->ui); view_free(win->view); for (size_t i = 0; i < LENGTH(win->modes); i++) map_free(win->modes[i].bindings); @@ -382,7 +381,7 @@ Win *window_new_file(Vis *vis, File *file, enum UiOption options) { win->file = file; win->view = view_new(file->text); win->expandtab = false; - win->ui = ui_window_new(vis->ui, win, options); + win->ui = ui_window_new(&vis->ui, win, options); if (!win->view || !win->ui) { window_free(win); return NULL; @@ -434,7 +433,7 @@ bool vis_window_change_file(Win *win, const char* filename) { } bool vis_window_split(Win *original) { - original->vis->ui->doupdate = false; + original->vis->ui.doupdate = false; Win *win = window_new_file(original->vis, original->file, UI_OPTION_STATUSBAR); if (!win) return false; @@ -447,7 +446,7 @@ bool vis_window_split(Win *original) { win->file = original->file; view_options_set(win->view, UI_OPTIONS_GET(original->view->ui)); view_cursors_to(win->view->selection, view_cursor_get(original->view)); - win->vis->ui->doupdate = true; + win->vis->ui.doupdate = true; return true; } @@ -482,21 +481,21 @@ void vis_draw(Vis *vis) { } void vis_redraw(Vis *vis) { - ui_redraw(vis->ui); - ui_draw(vis->ui); + ui_redraw(&vis->ui); + ui_draw(&vis->ui); } bool vis_window_new(Vis *vis, const char *filename) { File *file = file_new(vis, filename, false); if (!file) return false; - vis->ui->doupdate = false; + vis->ui.doupdate = false; Win *win = window_new_file(vis, file, UI_OPTION_STATUSBAR|UI_OPTION_SYMBOL_EOF); if (!win) { file_free(vis, file); return false; } - vis->ui->doupdate = true; + vis->ui.doupdate = true; return true; } @@ -567,14 +566,15 @@ void vis_window_close(Win *win) { vis_draw(vis); } -Vis *vis_new(Ui *ui) { - if (!ui) - return NULL; +Vis *vis_new(void) { Vis *vis = calloc(1, sizeof(Vis)); if (!vis) return NULL; vis->exit_status = -1; - vis->ui = ui; + if (!ui_terminal_init(&vis->ui)) { + free(vis); + return NULL; + } vis->change_colors = true; for (size_t i = 0; i < LENGTH(vis->registers); i++) register_init(&vis->registers[i]); @@ -629,7 +629,7 @@ void vis_free(Vis *vis) { file_free(vis, vis->error_file); for (int i = 0; i < LENGTH(vis->registers); i++) register_release(&vis->registers[i]); - ui_terminal_free(vis->ui); + ui_terminal_free(&vis->ui); if (vis->usercmds) { const char *name; while (map_first(vis->usercmds, &name) && vis_cmd_unregister(vis, name)); @@ -960,7 +960,7 @@ void vis_cancel(Vis *vis) { void vis_die(Vis *vis, const char *msg, ...) { va_list ap; va_start(ap, msg); - ui_die(vis->ui, msg, ap); + ui_die(&vis->ui, msg, ap); va_end(ap); } @@ -968,7 +968,7 @@ const char *vis_keys_next(Vis *vis, const char *keys) { if (!keys || !*keys) return NULL; TermKeyKey key; - TermKey *termkey = vis->ui->termkey; + TermKey *termkey = vis->ui.termkey; const char *next = NULL; /* first try to parse a special key of the form */ if (*keys == '<' && keys[1] && (next = termkey_strpkey(termkey, keys+1, &key, TERMKEY_FORMAT_VIM)) && *next == '>') @@ -996,7 +996,7 @@ long vis_keys_codepoint(Vis *vis, const char *keys) { long codepoint = -1; const char *next; TermKeyKey key; - TermKey *termkey = vis->ui->termkey; + TermKey *termkey = vis->ui.termkey; if (!keys[0]) return -1; @@ -1189,9 +1189,9 @@ static void vis_keys_push(Vis *vis, const char *input, size_t pos, bool record) static const char *getkey(Vis *vis) { TermKeyKey key = { 0 }; - if (!ui_getkey(vis->ui, &key)) + if (!ui_getkey(&vis->ui, &key)) return NULL; - ui_info_hide(vis->ui); + ui_info_hide(&vis->ui); bool use_keymap = vis->mode->id != VIS_MODE_INSERT && vis->mode->id != VIS_MODE_REPLACE && !vis->keymap_disabled; @@ -1205,7 +1205,7 @@ static const char *getkey(Vis *vis) { } } - TermKey *termkey = vis->ui->termkey; + TermKey *termkey = vis->ui.termkey; if (key.type == TERMKEY_TYPE_UNKNOWN_CSI) { long args[18]; size_t nargs; @@ -1299,16 +1299,16 @@ int vis_run(Vis *vis) { } if (vis->resume) { - ui_terminal_resume(vis->ui); + ui_terminal_resume(&vis->ui); vis->resume = false; } if (vis->need_resize) { - ui_resize(vis->ui); + ui_resize(&vis->ui); vis->need_resize = false; } - ui_draw(vis->ui); + ui_draw(&vis->ui); idle.tv_sec = vis->mode->idle_timeout; int r = pselect(vis_process_before_tick(&fds) + 1, &fds, NULL, NULL, timeout, &emptyset); @@ -1328,8 +1328,7 @@ int vis_run(Vis *vis) { continue; } - TermKey *termkey = vis->ui->termkey; - termkey_advisereadable(termkey); + termkey_advisereadable(vis->ui.termkey); const char *key; while ((key = getkey(vis))) @@ -1624,7 +1623,7 @@ int vis_pipe(Vis *vis, File *file, Filerange *range, const char *argv[], return -1; } - ui_terminal_save(vis->ui, fullscreen); + ui_terminal_save(&vis->ui, fullscreen); pid_t pid = fork(); if (pid == -1) { @@ -1818,7 +1817,7 @@ err: sigaction(SIGTERM, &sigterm_old, NULL); vis->interrupted = false; - ui_terminal_restore(vis->ui); + ui_terminal_restore(&vis->ui); if (WIFEXITED(status)) return WEXITSTATUS(status); -- cgit v1.2.3