aboutsummaryrefslogtreecommitdiff
path: root/ui-curses.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-11-14 23:30:17 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-11-15 12:56:56 +0100
commit0f479c4da7f0c62d7422417d3d0601c853f043aa (patch)
tree6bb592276fd977cdbca06f8bab4eac6c4d148cf5 /ui-curses.c
parentd770aa314255313e97b3ecb4c0cafde0fca16c9d (diff)
downloadvis-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.c56
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) {