--- a/Makefile 2011-11-13 01:01:34.394429572 -0500 +++ b/Makefile 2011-11-13 01:04:32.024012806 -0500 @@ -5,7 +5,7 @@ all: fbpad %.o: %.c $(CC) -c $(CFLAGS) $< -fbpad: fbpad.o term.o pad.o draw.o font.o +fbpad: fbpad.o term.o pad.o draw.o font.o scrsnap.o $(CC) -o $@ $^ $(LDFLAGS) clean: rm -f *.o fbpad --- a/fbpad.c 2011-11-13 01:13:43.202630158 -0500 +++ b/fbpad.c 2011-11-13 01:14:28.032518474 -0500 @@ -20,6 +20,7 @@ #include "pad.h" #include "term.h" #include "util.h" +#include "scrsnap.h" #include "draw.h" #define CTRLKEY(x) ((x) - 96) @@ -27,6 +28,7 @@ #define NTAGS (sizeof(tags) - 1) #define NTERMS (NTAGS * 2) #define TERMOPEN(i) (terms[i].fd) +#define TERMSNAP(i) (strchr(TAGS_SAVED, tags[(i) % NTAGS])) static char tags[] = TAGS; static struct term terms[NTERMS]; @@ -52,7 +54,11 @@ static void term_switch(int oidx, int nidx, int show, int save, int load) { int flags = show ? (load ? TERM_REDRAW : TERM_VISIBLE) : TERM_HIDDEN; + if (save && TERMOPEN(oidx) && TERMSNAP(oidx)) + scr_snap(&terms[oidx]); term_save(&terms[oidx]); + if (show && load && TERMOPEN(nidx) && TERMSNAP(nidx)) + flags = scr_load(&terms[nidx]) ? TERM_REDRAW : TERM_VISIBLE; term_load(&terms[nidx], flags); } @@ -104,7 +110,7 @@ static void showtags(void) { - int colors[] = {15, 4, 2}; + int colors[] = {8, 2, 9}; int c = 0; int r = pad_rows() - 1; int i; @@ -121,7 +127,10 @@ if (TERMOPEN(altterm(i))) nt++; pad_put(i == ctag ? '(' : ' ', r, c++, FGCOLOR, BGCOLOR); - pad_put(tags[i], r, c++, colors[nt], BGCOLOR); + if (TERMSNAP(i)) + pad_put(tags[i], r, c++, !nt ? 8 : colors[nt], BGCOLOR); + else + pad_put(tags[i], r, c++, colors[nt], BGCOLOR); pad_put(i == ctag ? ')' : ' ', r, c++, FGCOLOR, BGCOLOR); } } @@ -159,6 +168,9 @@ case 's': term_screenshot(); return; + case 'y': + term_switch(cterm(), cterm(), 1, 0, 1); + return; default: if (strchr(tags, c)) { showtag(strchr(tags, c) - tags); @@ -209,8 +221,10 @@ temp_switch(term_idx[i]); if (ufds[i].revents & POLLIN) term_read(); - if (ufds[i].revents & BADPOLLFLAGS) + if (ufds[i].revents & BADPOLLFLAGS) { + scr_free(&terms[cterm()]); term_end(); + } switch_back(term_idx[i]); } return 0;