Allow all non-ephemeral buffers to be toggled write/read-only. This
toggle works while mg is running, unlike the -R option which is only
during mg startup.
ok?
Index: buffer.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/buffer.c,v
retrieving revision 1.104
diff -u -p -u -p -r1.104 buffer.c
--- buffer.c 6 Aug 2017 04:39:45 -0000 1.104
+++ buffer.c 27 Nov 2018 19:52:41 -0000
@@ -31,6 +31,28 @@ extern int globalwd;
/* ARGSUSED */
int
+togglereadonlyall(int f, int n)
+{
+ struct buffer *bp = NULL;
+ int len = 0;
+
+ allbro = !allbro;
+ for (bp = bheadp; bp != NULL; bp = bp->b_bufp) {
+ len = strlen(bp->b_bname);
+ if (bp->b_bname[0] != '*' && bp->b_bname[len - 1] != '*') {
+ if (allbro)
+ bp->b_flag |= BFREADONLY;
+ else
+ bp->b_flag &= ~BFREADONLY;
+ }
+ }
+ curwp->w_rflag |= WFMODE;
+
+ return (TRUE);
+}
+
+/* ARGSUSED */
+int
togglereadonly(int f, int n)
{
int s;
Index: def.h
===================================================================
RCS file: /cvs/src/usr.bin/mg/def.h,v
retrieving revision 1.156
diff -u -p -u -p -r1.156 def.h
--- def.h 29 Aug 2018 07:50:16 -0000 1.156
+++ def.h 27 Nov 2018 19:52:41 -0000
@@ -417,6 +417,7 @@ int delwind(int, int);
/* buffer.c */
int togglereadonly(int, int);
+int togglereadonlyall(int, int);
struct buffer *bfind(const char *, int);
int poptobuffer(int, int);
int killbuffer(struct buffer *);
@@ -737,6 +738,7 @@ extern int defb_flag;
extern int doaudiblebell;
extern int dovisiblebell;
extern int dblspace;
+extern int allbro;
extern char cinfo[];
extern char *keystrings[];
extern char pat[NPAT];
Index: funmap.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/funmap.c,v
retrieving revision 1.54
diff -u -p -u -p -r1.54 funmap.c
--- funmap.c 29 Aug 2018 07:50:16 -0000 1.54
+++ funmap.c 27 Nov 2018 19:52:41 -0000
@@ -201,6 +201,7 @@ static struct funmap functnames[] = {
{usebuffer, "switch-to-buffer",},
{poptobuffer, "switch-to-buffer-other-window",},
{togglereadonly, "toggle-read-only" },
+ {togglereadonlyall, "toggle-read-only-all" },
{twiddle, "transpose-chars",},
{transposepara, "transpose-paragraphs",},
{transposeword, "transpose-words",},
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/main.c,v
retrieving revision 1.84
diff -u -p -u -p -r1.84 main.c
--- main.c 16 Sep 2016 17:17:40 -0000 1.84
+++ main.c 27 Nov 2018 19:52:41 -0000
@@ -28,6 +28,7 @@ int startrow; /* row to start
*/
int doaudiblebell; /* audible bell toggle */
int dovisiblebell; /* visible bell toggle */
int dblspace; /* sentence end #spaces */
+int allbro; /* all buffs read-only */
struct buffer *curbp; /* current buffer */
struct buffer *bheadp; /* BUFFER list head */
struct mgwin *curwp; /* current window */
@@ -65,6 +66,7 @@ main(int argc, char **argv)
switch (o) {
case 'R':
bro = 1;
+ allbro = 1;
break;
case 'n':
nobackups = 1;
Index: mg.1
===================================================================
RCS file: /cvs/src/usr.bin/mg/mg.1,v
retrieving revision 1.108
diff -u -p -u -p -r1.108 mg.1
--- mg.1 18 Nov 2018 07:57:28 -0000 1.108
+++ mg.1 27 Nov 2018 19:52:41 -0000
@@ -884,6 +884,10 @@ Prompt and switch to a new buffer in the
Switch to buffer in another window.
.It toggle-read-only
Toggle the read-only flag on the current buffer.
+.It toggle-read-only-all
+Toggle the read-only flag on all non-ephemeral buffers.
+A simple toggle that switches a global read-only flag either on
+or off.
.It transpose-chars
Transpose the two characters in front of and under dot,
then move forward one character.