In mg dired mode, if you execute these commands:

dired-copy-file
dired-rename-file
dired-create-directory

The dired buffer is not refreshed with the updated action. This diff
fixes that. Comments/oks?

-lum

Index: dired.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/dired.c,v
retrieving revision 1.52
diff -u -p -r1.52 dired.c
--- dired.c     3 Nov 2012 15:36:03 -0000       1.52
+++ dired.c     27 May 2013 13:35:09 -0000
@@ -44,6 +44,7 @@ static int     d_backpage(int, int);
 static int      d_forwline(int, int);
 static int      d_backline(int, int);
 static void     reaper(int);
+static struct buffer   *refreshbuffer(struct buffer *);
 
 extern struct keymap_s helpmap, cXmap, metamap;
 
@@ -422,7 +423,8 @@ d_copy(int f, int n)
        ret = (copy(frname, toname) >= 0) ? TRUE : FALSE;
        if (ret != TRUE)
                return (ret);
-       bp = dired_(curbp->b_fname);
+       if ((bp = refreshbuffer(curbp)) == NULL)
+               return (FALSE);
        return (showbuffer(bp, curwp, WFFULL | WFMODE));
 }
 
@@ -455,7 +457,8 @@ d_rename(int f, int n)
        ret = (rename(frname, toname) >= 0) ? TRUE : FALSE;
        if (ret != TRUE)
                return (ret);
-       bp = dired_(curbp->b_fname);
+       if ((bp = refreshbuffer(curbp)) == NULL)
+               return (FALSE);
        return (showbuffer(bp, curwp, WFFULL | WFMODE));
 }
 
@@ -638,8 +641,28 @@ d_create_directory(int f, int n)
                    tocreate);
                return (FALSE);
        }
-       bp = dired_(curbp->b_fname);
+       if ((bp = refreshbuffer(curbp)) == NULL)
+               return (FALSE);
        return (showbuffer(bp, curwp, WFFULL | WFMODE));
+}
+
+struct buffer *
+refreshbuffer(struct buffer *bp)
+{
+       char    *tmp;
+
+       tmp = strdup(bp->b_fname);
+       killbuffer(bp);
+
+       /* dired_() uses findbuffer() to create new buffer */
+       if ((bp = dired_(tmp)) == NULL) {
+               free(tmp);
+               return (NULL);
+       }
+       free(tmp);
+       curbp = bp;
+
+       return (bp);
 }
 
 static int

Reply via email to