Re: [BUG] Disappearing of first line after Ctrl-Y



Hello, Pavel.

The patch for edit.c that fixes all the discribed problems is attached.
At the same time I think that 'Ctrl-Y F3' related bug was just shaded
out but not fixed.

The pathch was produced via
'LC_ALL=C TZ=UTC0 diff -Naur edit.c edit.c.new > edit.c.patch'
command agains 1.42 version of edit.c.

Use 'patch < edit.c.patch' inside 'edit' directory to apply the patch.

BTW, I was not able to find any guidelines or links on how to produce
patches for mc both on mc web site and inside mc sources. So, apologies
if I did something wrong.


On Sun, 3 Nov 2002, Pavel Roskin wrote:

> > Sometimes 1st (on the screen, not in file) line of edited text
> > disappears after pressing Ctrl-Y (or Ctrl-Del) on it. (Cursor moves down
> > in this case, and topmost line is to be updated with a line just before
> > erased one, but it isn't sometimes.)
> >
> > I experienced the bug after making M-? search, and trying to edit found
> > files.
>
> If you see the implementation of edit_delete_line(), it emulates pressing
> backspace until it meets a newline.  The do..while loop means that the
> newline is erased.  Then it's re-added.  Obviously, it you are on the
> first (on screen) line and you the newline, the screen scrolls so that you
> can see the previous line.
>
> I agree that this behavior is not what the user expects, but it's a very
> minor issue.  Feel free to fix it.  Just check if you reach the beginning
> of the string before calling edit_backspace().  Then you won't need to
> insert '\n' at the end of edit_delete_line().

[...]

> > Actually I am not able to reproduce the bug every time exactly the
> > same way as described (i.e. just pressing Ctrl-Y), but the first line is
> > also cleared after Ctrl-Y F3 (and Ctrl-Y Ctrl-O Ctrl-O), and I think this is
> > related to the original bug. (Note that Ctrl-Y is to be pressed on the
> > first displayed line.)
>
> I see.  That's a more serious bug.  That's why it's important to describe
> how to reproduce the bug for sure.  What I wrote before was just about the
> fact that the line comes from the above, not from below, to replace the
> removed line.


...Bye..Dmitry.
--- edit.c	Wed Nov  6 16:33:21 2002
+++ edit.c.new	Wed Nov  6 16:34:44 2002
@@ -1770,14 +1770,20 @@
 void edit_delete_line (WEdit * edit)
 {
     int c;
+
+    /* Delete right part of the line (including '\n' char) */
     do {
-	c = edit_delete (edit);
-    } while (c != '\n' && c);
-    do {
-	c = edit_backspace (edit);
+        c = edit_delete (edit);
     } while (c != '\n' && c);
-    if (c)
-	edit_insert (edit, '\n');
+    
+    /*
+     * Delete left part of the line.
+     * Note, that edit_get_byte() returns '\n' when byte position is < 0.
+     */
+    while (edit_get_byte (edit, edit->curs1 - 1) != '\n')
+    {
+        (void) edit_backspace (edit);
+    };
 }
 
 static void insert_spaces_tab (WEdit * edit, int half)


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