qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs dired.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs dired.c
Date: Mon, 03 Mar 2014 23:24:09 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        14/03/03 23:24:09

Modified files:
        .              : dired.c 

Log message:
        Improve robusness of dired mode

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/dired.c?cvsroot=qemacs&r1=1.39&r2=1.40

Patches:
Index: dired.c
===================================================================
RCS file: /sources/qemacs/qemacs/dired.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- dired.c     1 Mar 2014 19:24:02 -0000       1.39
+++ dired.c     3 Mar 2014 23:24:09 -0000       1.40
@@ -73,14 +73,16 @@
     }
 }
 
-static DiredState *dired_get_state(EditState *s)
+static DiredState *dired_get_state(EditState *s, int status)
 {
     DiredState *ds = s->b->priv_data;
 
     if (ds && ds->signature == &dired_signature)
         return ds;
 
+    if (status)
     put_status(s, "Not a dired buffer");
+
     return NULL;
 }
 
@@ -91,7 +93,7 @@
     const StringItem *item;
     const DiredItem *dip;
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return NULL;
 
     /* CG: assuming buf_size > 0 */
@@ -118,7 +120,7 @@
     int i;
 
     if (target) {
-        if (!(ds = dired_get_state(s)))
+        if (!(ds = dired_get_state(s, 1)))
             return -1;
 
         for (i = 0; i < ds->items.nb_items; i++) {
@@ -181,7 +183,7 @@
     EditBuffer *b;
     int index, i;
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     index = dired_get_index(s);
@@ -194,9 +196,8 @@
 
     /* construct list buffer */
     b = s->b;
-    b->flags &= ~BF_READONLY;
     /* deleting buffer contents resets s->offset and s->offset_top */
-    eb_delete(b, 0, b->total_size);
+    eb_clear(b);
 
     if (DIRED_HEADER) {
         long long total_bytes;
@@ -244,7 +245,7 @@
     unsigned char ch;
     int index;
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     index = dired_get_index(s);
@@ -267,7 +268,7 @@
     DiredState *ds;
     const char *p;
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     for (p = sort_order; *p; p++) {
@@ -322,7 +323,7 @@
     int ct, len, index;
     StringItem *item;
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     /* free previous list, if any */
@@ -496,7 +497,7 @@
     char target[MAX_FILENAME_SIZE];
     char filename[MAX_FILENAME_SIZE];
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     pstrcpy(target, sizeof(target), ds->path);
@@ -510,7 +511,7 @@
     DiredState *ds;
     char target[MAX_FILENAME_SIZE];
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     dired_get_filename(s, target, sizeof(target), -1);
@@ -523,7 +524,7 @@
     char filename[MAX_FILENAME_SIZE];
     int index;
 
-    if (!(ds = dired_get_state(s)))
+    if (!(ds = dired_get_state(s, 1)))
         return;
 
     /* Prevent point from going beyond list */
@@ -548,8 +549,13 @@
 {
     DiredState *ds = b->priv_data;
 
+    if (ds && ds->signature == &dired_signature) {
     dired_free(ds);
+    }
+
     qe_free(&b->priv_data);
+    if (b->close == dired_close)
+        b->close = NULL;
 }
 
 static int dired_mode_init(EditState *s, ModeSavedData *saved_data)
@@ -585,11 +591,6 @@
     return 0;
 }
 
-static void dired_mode_close(EditState *s)
-{
-    list_mode.mode_close(s);
-}
-
 /* can only apply dired mode on directories */
 static int dired_mode_probe(ModeDef *mode, ModeProbeData *p)
 {
@@ -714,7 +715,6 @@
     dired_mode.name = "dired";
     dired_mode.mode_probe = dired_mode_probe;
     dired_mode.mode_init = dired_mode_init;
-    dired_mode.mode_close = dired_mode_close;
     /* CG: not a good idea, display hook has side effect on layout */
     dired_mode.display_hook = dired_display_hook;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]