don't crash with no buffers, and clear the screen on exit
authorJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 25 Nov 2019 18:35:06 +0000 (20:35 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 25 Nov 2019 18:35:06 +0000 (20:35 +0200)
libvisor/src/visor.c
visor/src/term.c
visor/src/term.h

index 2c93521..84ffd95 100644 (file)
@@ -100,13 +100,15 @@ void vi_term_size(struct visor *vi, int xsz, int ysz)
 
 void vi_redraw(struct visor *vi)
 {
 
 void vi_redraw(struct visor *vi)
 {
-       int i, col, cur_x = 0, cur_y = 0;
+       int i = 0, col, cur_x = 0, cur_y = 0;
        char c;
        struct vi_buffer *vb;
        struct vi_span *sp, *spans_end;
        const char *tptr, *tend;
        vi_addr spoffs, addr;
 
        char c;
        struct vi_buffer *vb;
        struct vi_span *sp, *spans_end;
        const char *tptr, *tend;
        vi_addr spoffs, addr;
 
+       if(!vi->buflist) goto end;
+
        vb = vi->buflist;
        if(!(sp = vi_buf_find_span(vb, vb->view_start, &spoffs))) {
                sp = vb->spans;
        vb = vi->buflist;
        if(!(sp = vi_buf_find_span(vb, vb->view_start, &spoffs))) {
                sp = vb->spans;
index af7d278..4746836 100644 (file)
@@ -56,11 +56,20 @@ int term_init(const char *ttypath)
 
 void term_cleanup(void)
 {
 
 void term_cleanup(void)
 {
+       term_clear();
+       term_setcursor(0, 0);
+       term_flush();
        tcsetattr(ttyfd, TCSAFLUSH, &saved_term);
        close(ttyfd);
        ttyfd = -1;
 }
 
        tcsetattr(ttyfd, TCSAFLUSH, &saved_term);
        close(ttyfd);
        ttyfd = -1;
 }
 
+void term_reset(void)
+{
+       term_puts("\033c");
+       term_flush();
+}
+
 void term_getsize(int *width, int *height)
 {
        *width = term_width;
 void term_getsize(int *width, int *height)
 {
        *width = term_width;
index c1ce67d..fbf0558 100644 (file)
@@ -36,6 +36,7 @@ union term_event {
 
 int term_init(const char *ttypath);
 void term_cleanup(void);
 
 int term_init(const char *ttypath);
 void term_cleanup(void);
+void term_reset(void);
 
 void term_getsize(int *width, int *height);
 void term_resize_func(void (*func)(int, int));
 
 void term_getsize(int *width, int *height);
 void term_resize_func(void (*func)(int, int));