git: 9front

Download patch

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;
--