aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c53
1 files changed, 26 insertions, 27 deletions
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 <Key> */
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);