This diff allows mg(1) to specify an alternative startup file on
the fly when starting mg:

$ mg -u ~/.mg2

I decided to use "u" since that is what emacs uses to load
another user's init file:

https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html

Perhaps "f" would be better but that is being used to set mg modes

Also, I decided not to load the default startup file if the
alternative is not found since it seems more obvious that something
is wrong that way.

Any comments/ok?

Mark

Index: def.h
===================================================================
RCS file: /cvs/src/usr.bin/mg/def.h,v
retrieving revision 1.166
diff -u -p -u -p -r1.166 def.h
--- def.h       9 Feb 2020 10:13:13 -0000       1.166
+++ def.h       21 Feb 2021 12:55:41 -0000
@@ -471,7 +471,7 @@ int          ffputbuf(FILE *, struct buffer *,
 int             ffgetline(FILE *, char *, int, int *);
 int             fbackupfile(const char *);
 char           *adjustname(const char *, int);
-char           *startupfile(char *);
+char           *startupfile(char *, char *);
 int             copy(char *, char *);
 struct list    *make_file_list(char *);
 int             fisdir(const char *);
Index: fileio.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/fileio.c,v
retrieving revision 1.106
diff -u -p -u -p -r1.106 fileio.c
--- fileio.c    22 Jun 2019 10:21:57 -0000      1.106
+++ fileio.c    21 Feb 2021 12:55:41 -0000
@@ -330,7 +330,7 @@ adjustname(const char *fn, int slashslas
  * to the startup file name.
  */
 char *
-startupfile(char *suffix)
+startupfile(char *suffix, char *conffile)
 {
        static char      file[NFILEN];
        char            *home;
@@ -339,7 +339,9 @@ startupfile(char *suffix)
        if ((home = getenv("HOME")) == NULL || *home == '\0')
                goto nohome;

-       if (suffix == NULL) {
+       if (conffile != NULL) {
+               (void)strncpy(file, conffile, NFILEN);
+       } else if (suffix == NULL) {
                ret = snprintf(file, sizeof(file), _PATH_MG_STARTUP, home);
                if (ret < 0 || ret >= sizeof(file))
                        return (NULL);
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/main.c,v
retrieving revision 1.87
diff -u -p -u -p -r1.87 main.c
--- main.c      22 Jun 2019 15:38:15 -0000      1.87
+++ main.c      21 Feb 2021 12:55:41 -0000
@@ -48,7 +48,8 @@ extern void     closetags(void);
 static __dead void
 usage()
 {
-       fprintf(stderr, "usage: %s [-nR] [-f mode] [+number] [file ...]\n",
+       fprintf(stderr, "usage: %s [-nR] [-f mode] [-u file] [+number] "
+           "[file ...]\n",
            __progname);
        exit(1);
 }
@@ -56,7 +57,7 @@ usage()
 int
 main(int argc, char **argv)
 {
-       char            *cp, *init_fcn_name = NULL;
+       char            *cp, *conffile = NULL, *init_fcn_name = NULL;
        PF               init_fcn = NULL;
        int              o, i, nfiles;
        int              nobackups = 0;
@@ -66,7 +67,7 @@ main(int argc, char **argv)
            NULL) == -1)
                err(1, "pledge");

-       while ((o = getopt(argc, argv, "nRf:")) != -1)
+       while ((o = getopt(argc, argv, "nRf:u:")) != -1)
                switch (o) {
                case 'R':
                        allbro = 1;
@@ -80,6 +81,9 @@ main(int argc, char **argv)
                                    "initial function");
                        init_fcn_name = optarg;
                        break;
+               case 'u':
+                       conffile = optarg;
+                       break;
                default:
                        usage();
                }
@@ -129,7 +133,7 @@ main(int argc, char **argv)
        update(CMODE);

        /* user startup file. */
-       if ((cp = startupfile(NULL)) != NULL)
+       if ((cp = startupfile(NULL, conffile)) != NULL)
                (void)load(cp);

        /*
Index: mg.1
===================================================================
RCS file: /cvs/src/usr.bin/mg/mg.1,v
retrieving revision 1.118
diff -u -p -u -p -r1.118 mg.1
--- mg.1        8 Nov 2019 19:54:40 -0000       1.118
+++ mg.1        21 Feb 2021 12:55:42 -0000
@@ -11,6 +11,7 @@
 .Nm mg
 .Op Fl nR
 .Op Fl f Ar mode
+.Op Fl u Ar file
 .Op + Ns Ar number
 .Op Ar
 .Sh DESCRIPTION
@@ -38,6 +39,11 @@ line of the file, +-2 will be second las
 Run the mode command for all buffers created from
 arguments on the command line, including the
 scratch buffer and all files.
+.It Fl u Ar file
+Use
+.Ar file
+as the startup file, instead of the default
+.Pa ~/.mg .
 .It Fl n
 Turn off backup file generation.
 .It Fl R
Index: ttykbd.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/ttykbd.c,v
retrieving revision 1.19
diff -u -p -u -p -r1.19 ttykbd.c
--- ttykbd.c    17 Dec 2017 14:37:57 -0000      1.19
+++ ttykbd.c    21 Feb 2021 12:55:42 -0000
@@ -58,7 +58,8 @@ ttykeymapinit(void)
                dobindkey(fundamental_map, "delete-char", key_dc);

        if ((cp = getenv("TERM"))) {
-               if (((cp = startupfile(cp)) != NULL) && (load(cp) != TRUE))
+               if (((cp = startupfile(cp, NULL)) != NULL) &&
+                   (load(cp) != TRUE))
                        ewprintf("Error reading key initialization file");
        }
        if (keypad_xmit)

Reply via email to