Re: sort bug?

2010-10-15 Fir de Conversatie Bram Moolenaar

Christian Brabandt wrote:

 Hi Charles!
 
 On Do, 14 Okt 2010, Charles Campbell wrote:
 
  Bee wrote:
  On Oct 13, 10:00 pm, Beebeeyaw...@gmail.com  wrote:
 
  On Oct 13, 6:56 pm, Charles E Campbell Jrdrc...@campbellfamily.biz
  wrote:
   
  Bee wrote:
 
  sort bug?
   
   
  vim 7.3.27 Linux
  vim 7.3.21 Mac 10.4.11
   
   
  Select the lines between the rules (including the blank lines) and
  sort:
  ','sort n
   
   
  1-2-3-4-5-6
  xxx yyy: 0
  xxx yyy: 1
  xxx yyy: 2
  xxx yyy: 3
  xxx yyy: 4
   
   
  xxx yyy: 5
  xxx yyy: 6
  xxx yyy: 7
  xxx yyy: 8
  xxx yyy: 9
   
   
  1-2-3-4-5-6
   
   
  The result is:
   
   
  1-2-3-4-5-6
  xxx yyy: 0
   
   
  xxx yyy: 1
  xxx yyy: 2
  xxx yyy: 3
  xxx yyy: 4
  xxx yyy: 5
  xxx yyy: 6
  xxx yyy: 7
  xxx yyy: 8
  xxx yyy: 9
  1-2-3-4-5-6
   
   
  I would expect this and it is what I get when using the shell:
  ','!sort -n
   
   
  1-2-3-4-5-6
   
   
  xxx yyy: 0
  xxx yyy: 1
  xxx yyy: 2
  xxx yyy: 3
  xxx yyy: 4
  xxx yyy: 5
  xxx yyy: 6
  xxx yyy: 7
  xxx yyy: 8
  xxx yyy: 9
  1-2-3-4-5-6
   
   
  I tried your example and was unable to duplicate the problem.  Have you
  tried putting this in a file, say sort.test:
  vim -u NONE -N sort.test
  :%sort
 
   
  I tried that, and I tried using V and selecting all the lines, and each
  time I got the I would expect this... result.
 
  Thank you, I did not think to do vim -u NONE -N and...
  I then get the expected result!
  That means something in my vimrc is causing the sort problem.
  I will remember to do that first next time.
   
  Oops!
  I copied what you had done and that works, but that is not the case I
  was using.
 
  Try it selecting the lines and
 
  :','sort n
 
  Do not forget the n numeric sort option.
 
  With [n] sorting is done on the first decimal number
  in the line (after or inside a {pattern} match).
  One leading '-' is included in the number.
 
 
  OK, now that I'm using sort n -- I can duplicate the behavior.
 
 Yes empty lines are considered as they would contain a zero. And in case 
 another line has the same number, the original order would remain. In 
 this case, the line with the 0 stays on top. (Really strange is the 
 result, if you have an empty line, followed by a line containing a zero 
 followed by an empty line.)
 
 Attached patch fixes that.

Thanks.  The number is a long, thus SHRT_MIN is not the smallest number.
To avoid problems with old compilers I'll use MAXLNUM made negative.

Hmm, when there are negative numbers there is another problem, I'll see
if I can fix that as well...  Ah, subtracting two longs and storing the
result in an int truncates the number.

-- 
FIRST HEAD: All right! All right! We'll kill him first and then have tea and
biscuits.
 Monty Python and the Holy Grail PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\download, build and distribute -- http://www.A-A-P.org///
 \\\help me help AIDS victims -- http://ICCF-Holland.org///

-- 
You received this message from the vim_dev maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php


Re: sort bug?

2010-10-14 Fir de Conversatie Christian Brabandt
Hi Charles!

On Do, 14 Okt 2010, Charles Campbell wrote:

 Bee wrote:
 On Oct 13, 10:00 pm, Beebeeyaw...@gmail.com  wrote:

 On Oct 13, 6:56 pm, Charles E Campbell Jrdrc...@campbellfamily.biz
 wrote:
  
 Bee wrote:

 sort bug?
  
  
 vim 7.3.27 Linux
 vim 7.3.21 Mac 10.4.11
  
  
 Select the lines between the rules (including the blank lines) and
 sort:
 ','sort n
  
  
 1-2-3-4-5-6
 xxx yyy: 0
 xxx yyy: 1
 xxx yyy: 2
 xxx yyy: 3
 xxx yyy: 4
  
  
 xxx yyy: 5
 xxx yyy: 6
 xxx yyy: 7
 xxx yyy: 8
 xxx yyy: 9
  
  
 1-2-3-4-5-6
  
  
 The result is:
  
  
 1-2-3-4-5-6
 xxx yyy: 0
  
  
 xxx yyy: 1
 xxx yyy: 2
 xxx yyy: 3
 xxx yyy: 4
 xxx yyy: 5
 xxx yyy: 6
 xxx yyy: 7
 xxx yyy: 8
 xxx yyy: 9
 1-2-3-4-5-6
  
  
 I would expect this and it is what I get when using the shell:
 ','!sort -n
  
  
 1-2-3-4-5-6
  
  
 xxx yyy: 0
 xxx yyy: 1
 xxx yyy: 2
 xxx yyy: 3
 xxx yyy: 4
 xxx yyy: 5
 xxx yyy: 6
 xxx yyy: 7
 xxx yyy: 8
 xxx yyy: 9
 1-2-3-4-5-6
  
  
 I tried your example and was unable to duplicate the problem.  Have you
 tried putting this in a file, say sort.test:
 vim -u NONE -N sort.test
 :%sort

  
 I tried that, and I tried using V and selecting all the lines, and each
 time I got the I would expect this... result.

 Thank you, I did not think to do vim -u NONE -N and...
 I then get the expected result!
 That means something in my vimrc is causing the sort problem.
 I will remember to do that first next time.
  
 Oops!
 I copied what you had done and that works, but that is not the case I
 was using.

 Try it selecting the lines and

 :','sort n

 Do not forget the n numeric sort option.

 With [n] sorting is done on the first decimal number
 in the line (after or inside a {pattern} match).
 One leading '-' is included in the number.


 OK, now that I'm using sort n -- I can duplicate the behavior.

Yes empty lines are considered as they would contain a zero. And in case 
another line has the same number, the original order would remain. In 
this case, the line with the 0 stays on top. (Really strange is the 
result, if you have an empty line, followed by a line containing a zero 
followed by an empty line.)

Attached patch fixes that.


regards,
Christian

-- 
You received this message from the vim_dev maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
# HG changeset patch
# Parent b8dbee14a3d8e29383c979b5bdb59ba1d0585ddf

diff --git a/src/ex_cmds.c b/src/ex_cmds.c
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -491,7 +491,11 @@
 		s = skiptodigit(p);
 	if (s  p  s[-1] == '-')
 		--s;  /* include preceding negative sign */
-	vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
+	if (*s == NUL)
+		/* empty lines should be first  */
+		nrs[lnum - eap-line1].start_col_nr = SHRT_MIN;
+	else
+		vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
 	nrs[lnum - eap-line1].start_col_nr, NULL);
 	(*s2) = c;
 	}


sort bug?

2010-10-13 Fir de Conversatie Bee
sort bug?

vim 7.3.27 Linux
vim 7.3.21 Mac 10.4.11

Select the lines between the rules (including the blank lines) and
sort:
','sort n

1-2-3-4-5-6
xxx yyy: 0
xxx yyy: 1
xxx yyy: 2
xxx yyy: 3
xxx yyy: 4

xxx yyy: 5
xxx yyy: 6
xxx yyy: 7
xxx yyy: 8
xxx yyy: 9

1-2-3-4-5-6

The result is:

1-2-3-4-5-6
xxx yyy: 0


xxx yyy: 1
xxx yyy: 2
xxx yyy: 3
xxx yyy: 4
xxx yyy: 5
xxx yyy: 6
xxx yyy: 7
xxx yyy: 8
xxx yyy: 9
1-2-3-4-5-6

I would expect this and it is what I get when using the shell:
','!sort -n

1-2-3-4-5-6


xxx yyy: 0
xxx yyy: 1
xxx yyy: 2
xxx yyy: 3
xxx yyy: 4
xxx yyy: 5
xxx yyy: 6
xxx yyy: 7
xxx yyy: 8
xxx yyy: 9
1-2-3-4-5-6

-- 
You received this message from the vim_dev maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php


Re: sort bug?

2010-10-13 Fir de Conversatie Charles E Campbell Jr

Bee wrote:

sort bug?

vim 7.3.27 Linux
vim 7.3.21 Mac 10.4.11

Select the lines between the rules (including the blank lines) and
sort:
','sort n

1-2-3-4-5-6
xxx yyy: 0
xxx yyy: 1
xxx yyy: 2
xxx yyy: 3
xxx yyy: 4

xxx yyy: 5
xxx yyy: 6
xxx yyy: 7
xxx yyy: 8
xxx yyy: 9

1-2-3-4-5-6

The result is:

1-2-3-4-5-6
xxx yyy: 0


xxx yyy: 1
xxx yyy: 2
xxx yyy: 3
xxx yyy: 4
xxx yyy: 5
xxx yyy: 6
xxx yyy: 7
xxx yyy: 8
xxx yyy: 9
1-2-3-4-5-6

I would expect this and it is what I get when using the shell:
','!sort -n

1-2-3-4-5-6


xxx yyy: 0
xxx yyy: 1
xxx yyy: 2
xxx yyy: 3
xxx yyy: 4
xxx yyy: 5
xxx yyy: 6
xxx yyy: 7
xxx yyy: 8
xxx yyy: 9
1-2-3-4-5-6

  
I tried your example and was unable to duplicate the problem.  Have you 
tried putting this in a file, say sort.test:

vim -u NONE -N sort.test
:%sort

I tried that, and I tried using V and selecting all the lines, and each 
time I got the I would expect this... result.


Regards,
Chip Campbell

--
You received this message from the vim_dev maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php


Re: sort bug?

2010-10-13 Fir de Conversatie Bee
On Oct 13, 6:56 pm, Charles E Campbell Jr drc...@campbellfamily.biz
wrote:
 Bee wrote:
  sort bug?

  vim 7.3.27 Linux
  vim 7.3.21 Mac 10.4.11

  Select the lines between the rules (including the blank lines) and
  sort:
  ','sort n

  1-2-3-4-5-6
  xxx yyy: 0
  xxx yyy: 1
  xxx yyy: 2
  xxx yyy: 3
  xxx yyy: 4

  xxx yyy: 5
  xxx yyy: 6
  xxx yyy: 7
  xxx yyy: 8
  xxx yyy: 9

  1-2-3-4-5-6

  The result is:

  1-2-3-4-5-6
  xxx yyy: 0

  xxx yyy: 1
  xxx yyy: 2
  xxx yyy: 3
  xxx yyy: 4
  xxx yyy: 5
  xxx yyy: 6
  xxx yyy: 7
  xxx yyy: 8
  xxx yyy: 9
  1-2-3-4-5-6

  I would expect this and it is what I get when using the shell:
  ','!sort -n

  1-2-3-4-5-6

  xxx yyy: 0
  xxx yyy: 1
  xxx yyy: 2
  xxx yyy: 3
  xxx yyy: 4
  xxx yyy: 5
  xxx yyy: 6
  xxx yyy: 7
  xxx yyy: 8
  xxx yyy: 9
  1-2-3-4-5-6

 I tried your example and was unable to duplicate the problem.  Have you
 tried putting this in a file, say sort.test:
 vim -u NONE -N sort.test
 :%sort

 I tried that, and I tried using V and selecting all the lines, and each
 time I got the I would expect this... result.

Thank you, I did not think to do vim -u NONE -N and...
I then get the expected result!
That means something in my vimrc is causing the sort problem.
I will remember to do that first next time.

-- 
You received this message from the vim_dev maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php


Re: sort bug?

2010-10-13 Fir de Conversatie Bee
On Oct 13, 10:00 pm, Bee beeyaw...@gmail.com wrote:
 On Oct 13, 6:56 pm, Charles E Campbell Jr drc...@campbellfamily.biz
 wrote:
  Bee wrote:
   sort bug?

   vim 7.3.27 Linux
   vim 7.3.21 Mac 10.4.11

   Select the lines between the rules (including the blank lines) and
   sort:
   ','sort n

   1-2-3-4-5-6
   xxx yyy: 0
   xxx yyy: 1
   xxx yyy: 2
   xxx yyy: 3
   xxx yyy: 4

   xxx yyy: 5
   xxx yyy: 6
   xxx yyy: 7
   xxx yyy: 8
   xxx yyy: 9

   1-2-3-4-5-6

   The result is:

   1-2-3-4-5-6
   xxx yyy: 0

   xxx yyy: 1
   xxx yyy: 2
   xxx yyy: 3
   xxx yyy: 4
   xxx yyy: 5
   xxx yyy: 6
   xxx yyy: 7
   xxx yyy: 8
   xxx yyy: 9
   1-2-3-4-5-6

   I would expect this and it is what I get when using the shell:
   ','!sort -n

   1-2-3-4-5-6

   xxx yyy: 0
   xxx yyy: 1
   xxx yyy: 2
   xxx yyy: 3
   xxx yyy: 4
   xxx yyy: 5
   xxx yyy: 6
   xxx yyy: 7
   xxx yyy: 8
   xxx yyy: 9
   1-2-3-4-5-6

  I tried your example and was unable to duplicate the problem.  Have you
  tried putting this in a file, say sort.test:
  vim -u NONE -N sort.test
  :%sort

  I tried that, and I tried using V and selecting all the lines, and each
  time I got the I would expect this... result.

 Thank you, I did not think to do vim -u NONE -N and...
 I then get the expected result!
 That means something in my vimrc is causing the sort problem.
 I will remember to do that first next time.

Oops!
I copied what you had done and that works, but that is not the case I
was using.

Try it selecting the lines and

:','sort n

Do not forget the n numeric sort option.

With [n] sorting is done on the first decimal number
in the line (after or inside a {pattern} match).
One leading '-' is included in the number.


-- 
You received this message from the vim_dev maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php