shithub: acme

Download patch

ref: 17bbd3c623715b0ebb5c7cf5d2c8a1be0ec0e352
parent: c22df7a04d883e941f4b38c8ac48bd20ee9e0699
author: glenda <glenda@cirno>
date: Thu Apr 3 21:05:30 EDT 2025

add alt-detection, add ctrl-s to save and ctrl-shift-s to saveall

--- a/acme.c
+++ b/acme.c
@@ -410,6 +410,7 @@
 			if(*s == 'k' || *s == 'K') {
 				shiftdown = utfrune(s+1, Kshift) != nil;
 				ctldown = utfrune(s+1, Kctl) != nil;
+				altdown = utfrune(s+1, Kalt) != nil;
 				free(s);
 				break;
 			}
--- a/dat.h
+++ b/dat.h
@@ -559,6 +559,7 @@
 Rune		*delcmd;			/* what command deleted the window. eg, Del, Delete, Delmesg */
 int			shiftdown;
 int			ctldown;
+int			altdown;
 
 Channel	*cplumb;		/* chan(Plumbmsg*) */
 Channel	*cwait;		/* chan(Waitmsg) */
--- a/fns.h
+++ b/fns.h
@@ -5,6 +5,7 @@
 #define	fbufalloc()	emalloc(BUFSIZE)
 #define	fbuffree(x)	free(x)
 
+void	putall(Text*, Text*, Text*, int, int, Rune*, int);
 void	plumblook(Plumbmsg*m);
 void	plumbshow(Plumbmsg*m);
 void	putsnarf(void);
--- a/text.c
+++ b/text.c
@@ -705,6 +705,20 @@
 		if(t->q0 != t->q1)
 			cut(t, t, nil, TRUE, FALSE, nil, 0);
 		return;
+	case 0x13: /* ^S: Save file */
+    	typecommit(t);
+    	if(t->what == Body && t->w) {
+        	put(t, nil, nil, XXX, XXX, nil, 0);
+    	}
+    	return;
+    case 'S': /* Ctl-Shift-s to save all. 
+    		   * there's probably a better way to do this */
+    	if(ctldown){
+    		typecommit(t);
+    		putall(nil, nil, nil, 0, 0, nil, 0);
+    		return;
+    	}
+    	break; /* just insert S */
 	case 0x16:	/* ^V: paste from snarf buffer */
 		paste(t, t, nil, TRUE, TRUE, nil, 0);
 		return;
--