+void
+tprinter(char *s, size_t len) {
+ if(iofd != -1 && xwrite(iofd, s, len) < 0) {
+ fprintf(stderr, "Error writing in %s:%s\n",
+ opt_io, strerror(errno));
+ close(iofd);
+ iofd = -1;
+ }
+}
+
+void
+toggleprinter(const Arg *arg) {
+ term.mode ^= MODE_PRINT;
+}
+
+void
+printscreen(const Arg *arg) {
+ tdump();
+}
+
+void
+printsel(const Arg *arg) {
+ tdumpsel();
+}
+
+void
+tdumpsel(void)
+{
+ char *ptr;
+
+ if((ptr = getsel())) {
+ tprinter(ptr, strlen(ptr));
+ free(ptr);
+ }
+}
+
+void
+tdumpline(int n) {
+ Glyph *bp, *end;
+
+ bp = &term.line[n][0];
+ end = &bp[term.col-1];
+ while(end > bp && !strcmp(" ", end->c))
+ --end;
+ if(bp != end || strcmp(bp->c, " ")) {
+ for( ;bp <= end; ++bp)
+ tprinter(bp->c, strlen(bp->c));
+ }
+ tprinter("\n", 1);
+}
+
+void
+tdump(void) {
+ int i;
+
+ for(i = 0; i < term.row; ++i)
+ tdumpline(i);
+}
+