diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-11-14 23:30:17 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-11-15 12:56:56 +0100 |
| commit | 0f479c4da7f0c62d7422417d3d0601c853f043aa (patch) | |
| tree | 6bb592276fd977cdbca06f8bab4eac6c4d148cf5 /ui-curses.c | |
| parent | d770aa314255313e97b3ecb4c0cafde0fca16c9d (diff) | |
| download | vis-0f479c4da7f0c62d7422417d3d0601c853f043aa.tar.gz vis-0f479c4da7f0c62d7422417d3d0601c853f043aa.tar.xz | |
vis: defer UI initialization and overhaul argument parsing
Do not initalize curses UI before it is actually needed.
Move vis command line argument parsing logic into main.c.
This fixes `vis -v` output and exit status.
Fix #351
Diffstat (limited to 'ui-curses.c')
| -rw-r--r-- | ui-curses.c | 56 |
1 files changed, 24 insertions, 32 deletions
diff --git a/ui-curses.c b/ui-curses.c index b8f1e05..b1972da 100644 --- a/ui-curses.c +++ b/ui-curses.c @@ -1048,16 +1048,6 @@ static void ui_info_hide(Ui *ui) { } } -static bool ui_init(Ui *ui, Vis *vis) { - UiCurses *uic = (UiCurses*)ui; - uic->vis = vis; - return true; -} - -static bool ui_start(Ui *ui) { - return true; -} - static TermKey *ui_termkey_new(int fd) { TermKey *termkey = termkey_new(fd, TERMKEY_FLAG_UTF8); if (termkey) @@ -1127,12 +1117,9 @@ static int ui_colors(Ui *ui) { return COLORS; } -Ui *ui_curses_new(void) { - - UiCurses *uic = calloc(1, sizeof(UiCurses)); - Ui *ui = (Ui*)uic; - if (!uic) - return NULL; +static bool ui_init(Ui *ui, Vis *vis) { + UiCurses *uic = (UiCurses*)ui; + uic->vis = vis; tcgetattr(STDERR_FILENO, &uic->tio); if (!(uic->termkey = ui_termkey_new(STDIN_FILENO))) goto err; @@ -1155,13 +1142,30 @@ Ui *ui_curses_new(void) { keypad(stdscr, TRUE); meta(stdscr, TRUE); curs_set(0); - /* needed because we use getch() which implicitly calls refresh() which - would clear the screen (overwrite it with an empty / unused stdscr */ - refresh(); + + struct sigaction sa; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sa.sa_handler = sigwinch_handler; + sigaction(SIGWINCH, &sa, NULL); + sigaction(SIGCONT, &sa, NULL); + + ui_resize(ui); + + return true; +err: + ui_die_msg(ui, "Failed to start curses interface\n"); + return false; +} + +Ui *ui_curses_new(void) { + + Ui *ui = calloc(1, sizeof(UiCurses)); + if (!ui) + return NULL; *ui = (Ui) { .init = ui_init, - .start = ui_start, .free = ui_curses_free, .termkey_get = ui_termkey_get, .suspend = ui_suspend, @@ -1183,19 +1187,7 @@ Ui *ui_curses_new(void) { .colors = ui_colors, }; - struct sigaction sa; - sa.sa_flags = 0; - sigemptyset(&sa.sa_mask); - sa.sa_handler = sigwinch_handler; - sigaction(SIGWINCH, &sa, NULL); - sigaction(SIGCONT, &sa, NULL); - - ui_resize(ui); - return ui; -err: - ui_curses_free(ui); - return NULL; } void ui_curses_free(Ui *ui) { |
