diff options
Diffstat (limited to 'src/cmd/9term/9term.c')
-rw-r--r-- | src/cmd/9term/9term.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c index ed68ed19..5ca47b90 100644 --- a/src/cmd/9term/9term.c +++ b/src/cmd/9term/9term.c @@ -67,7 +67,7 @@ threadmain(int argc, char *argv[]) fontname = EARGF(usage()); break; case 's': - /* no-op */ + scrolling = TRUE; break; case 'c': cooked = TRUE; @@ -114,7 +114,7 @@ threadmain(int argc, char *argv[]) timerinit(); servedevtext(); rcpid = rcstart(argc, argv, &rcfd, &sfd); - w = new(screen, FALSE, rcpid, ".", nil, nil); + w = new(screen, FALSE, scrolling, rcpid, ".", nil, nil); threadcreate(keyboardthread, nil, STACK); threadcreate(mousethread, nil, STACK); @@ -241,7 +241,7 @@ wpointto(Point pt) } Window* -new(Image *i, int hideit, int pid, char *dir, char *cmd, char **argv) +new(Image *i, int hideit, int scrollit, int pid, char *dir, char *cmd, char **argv) { Window *w; Mousectl *mc; @@ -258,7 +258,7 @@ new(Image *i, int hideit, int pid, char *dir, char *cmd, char **argv) *mc = *mousectl; /* mc->image = i; */ mc->c = cm; - w = wmk(i, mc, ck, cctl); + w = wmk(i, mc, ck, cctl, scrollit); free(mc); /* wmk copies *mc */ window = erealloc(window, ++nwindow*sizeof(Window*)); window[nwindow-1] = w; @@ -288,6 +288,7 @@ enum Snarf, Plumb, Send, + Scroll, Cook }; @@ -298,6 +299,7 @@ char *menu2str[] = { "plumb", "send", "cook", + "scroll", nil }; @@ -315,6 +317,10 @@ button2menu(Window *w) if(w->deleted) return; incref(&w->ref); + if(w->scrolling) + menu2str[Scroll] = "noscroll"; + else + menu2str[Scroll] = "scroll"; if(cooked) menu2str[Cook] = "nocook"; else @@ -358,7 +364,11 @@ button2menu(Window *w) wsetselect(w, w->nr, w->nr); wshow(w, w->nr); break; - + + case Scroll: + if(w->scrolling ^= 1) + wshow(w, w->nr); + break; case Cook: cooked ^= 1; break; |