Пример #1
0
static UiWin *ui_window_new(Ui *ui, View *view, File *file, enum UiOption options) {
	UiCurses *uic = (UiCurses*)ui;
	UiCursesWin *win = calloc(1, sizeof(UiCursesWin));
	if (!win)
		return NULL;

	win->uiwin = (UiWin) {
		.draw = ui_window_draw,
		.draw_status = ui_window_draw_status,
		.options_set = ui_window_options_set,
		.options_get = ui_window_options_get,
		.reload = ui_window_reload,
		.syntax_style = ui_window_syntax_style,
	};

	if (!(win->win = newwin(0, 0, 0, 0))) {
		ui_window_free((UiWin*)win);
		return NULL;
	}


	for (int i = 0; i < UI_STYLE_MAX; i++) {
		win->styles[i] = (CellStyle) {
			.fg = -1, .bg = -1, .attr = A_NORMAL,
		};
	}

	win->styles[UI_STYLE_CURSOR].attr |= A_REVERSE;
	win->styles[UI_STYLE_CURSOR_PRIMARY].attr |= A_REVERSE|A_BLINK;
	win->styles[UI_STYLE_SELECTION].attr |= A_REVERSE;
	win->styles[UI_STYLE_COLOR_COLUMN].attr |= A_REVERSE;

	win->ui = uic;
	win->view = view;
	win->file = file;
	view_ui(view, &win->uiwin);

	if (uic->windows)
		uic->windows->prev = win;
	win->next = uic->windows;
	uic->windows = win;

	ui_window_options_set((UiWin*)win, options);

	return &win->uiwin;
}

__attribute__((noreturn)) static void ui_die(Ui *ui, const char *msg, va_list ap) {
	UiCurses *uic = (UiCurses*)ui;
	endwin();
	if (uic->termkey)
		termkey_stop(uic->termkey);
	vfprintf(stderr, msg, ap);
	exit(EXIT_FAILURE);
}
Пример #2
0
void ui_curses_free(Ui *ui) {
	UiCurses *uic = (UiCurses*)ui;
	if (!uic)
		return;
	while (uic->windows)
		ui_window_free((UiWin*)uic->windows);
	endwin();
	if (uic->termkey)
		termkey_destroy(uic->termkey);
	free(uic);
}
Пример #3
0
void ui_curses_free(Ui *ui) {
    UiCurses *uic = (UiCurses*)ui;
    if (!uic)
        return;
    while (uic->windows)
        ui_window_free((UiWin*)uic->windows);
    endwin();
    if (uic->termkey)
        termkey_destroy(uic->termkey);
    tcsetattr(STDERR_FILENO, TCSANOW, &uic->tio);
    free(uic);
}