ref: 3db2f9012c77291753d9b0132b9ff6d2e05bcd48
parent: 9dee44064a338d305241e4599d8c2e085c364317
author: kvik <kvik@a-b.xyz>
date: Sun May 31 18:39:46 EDT 2020
acme: implement 'scratch' ctl command (thanks Drew DeVault) The new command marks the target window as a scratch window -- a window whose state cannot be "dirtied" by changes made to its body, therefore avoiding warnings about unsaved changes when deleting the window or exiting acme. Existing examples of scratch windows are error, directory, and guide windows, whose scratchness is set internally. With the new command users and programs alike can create their own scratch windows. This is put to use in acme's own win(1).
--- a/acme/bin/source/win/main.c
+++ b/acme/bin/source/win/main.c
@@ -64,6 +64,7 @@
wintagwrite(win, "Send Noscroll", 5+8);
ctlprint(win->ctl, "scroll");
+ ctlprint(win->ctl, "scratch");
snprint(buf, sizeof(buf), "/proc/%d/notepg", getpid());
notepg = open(buf, OWRITE);
--- a/sys/man/4/acme
+++ b/sys/man/4/acme
@@ -280,6 +280,9 @@
.B Put
interactive command with no arguments; accepts no arguments.
.TP
+.B scratch
+Turn off tracking the `dirty' status, the window stays clean.
+.TP
.B scroll
Cancel a
.B noscroll
--- a/sys/src/cmd/acme/xfid.c
+++ b/sys/src/cmd/acme/xfid.c
@@ -759,6 +759,10 @@
if(strncmp(p, "scroll", 6) == 0){ /* turn on automatic scrolling (writes to body only) */w->noscroll = FALSE;
m = 6;
+ }else
+ if(strncmp(p, "scratch", 7) == 0){ /* mark as a scratch file */+ w->isscratch = TRUE;
+ m = 7;
}else{err = Ebadctl;
break;
--
⑨