hi,

If you find-file (C-x C-f) and select a directory instead of a file,
mg will eventually call dired but due to the current location of the
call to dired in mg, find-file calls showbuffer() multiple times.
Apart from being wastefull, doing this results in the cursor ending up
on the wrong line of the dired buffer, it lands on line 1 instead of
the line after "..". 

This diff checks to see if the requested path is a directory as soon
as find-file is called, and if so calls dired. This removes the
problems mention previously. 

Comments/ok?

mark

Index: file.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/file.c,v
retrieving revision 1.97
diff -u -p -u -p -r1.97 file.c
--- file.c      25 Mar 2015 12:25:36 -0000      1.97
+++ file.c      25 Sep 2015 10:40:57 -0000
@@ -45,10 +45,10 @@ fileinsert(int f, int n)
 }
 
 /*
- * Select a file for editing.  Look around to see if you can find the file
- * in another buffer; if you can find it, just switch to the buffer.  If
- * you cannot find the file, create a new buffer, read in the text, and
- * switch to the new buffer.
+ * Select a file for editing.  If the file is a directory, invoke dired.
+ * Otherwise look around to see if you can find the file in another buffer;
+ * if you can find it, just switch to the buffer.  If you cannot find the
+ * file, create a new buffer, read in the text, and switch to the new buffer.
  */
 /* ARGSUSED */
 int
@@ -66,6 +66,12 @@ filevisit(int f, int n)
                return (ABORT);
        else if (bufp[0] == '\0')
                return (FALSE);
+       if (fisdir(fname) == TRUE) {
+               if ((bp = dired_(bufp)) == FALSE)
+                       return (FALSE);
+               curbp = bp;
+               return (showbuffer(bp, curwp, WFFULL | WFMODE));
+       }
        adjf = adjustname(fname, TRUE);
        if (adjf == NULL)
                return (FALSE);

Reply via email to