Loading ...
Sorry, an error occurred while loading the content.
 

[PATCH] reset global values of number/relativenumber correctly (Was Patch 7.3.810)

Expand Messages
  • Markus Heidelberg
    Hello, ... this bug I wanted to fix since a long time. See these problem reports for reference:
    Message 1 of 3 , Feb 16, 2013
      Hello,

      > Patch 7.3.810
      > Problem: 'relativenumber is reset unexpectedly. (Fran├žois Ingelrest)
      > Solution: After an option was reset also reset the global value. Add a test.
      > (Christian Brabandt)

      this bug I wanted to fix since a long time.
      See these problem reports for reference:
      http://groups.google.com/group/vim_dev/tree/browse_frm/month/2011-06/a31555949a630937#doc_704d17d6ef33a9cb
      http://groups.google.com/group/vim_dev/tree/browse_frm/month/2012-03/a6662e58cccb720e#doc_e373c950580fd7f0

      However, this patch doesn't consider ":setlocal", which now clears the
      global value of the 'nu' or 'rnu' counterpart.

      Here is a patch for this and for doing it right for ":setglobal", both
      with a test. And an additional test for ":set" and its influence on the
      global value.


      diff -r 84cc49b2da4f src/option.c
      --- a/src/option.c Sat Feb 16 18:16:15 2013 +0100
      +++ b/src/option.c Sun Feb 17 00:07:08 2013 +0100
      @@ -7630,22 +7630,31 @@
      }
      #endif

      - /* 'number', 'relativenumber' */
      - else if ((int *)varp == &curwin->w_p_nu
      - || (int *)varp == &curwin->w_p_rnu)
      - {
      - /* If 'number' is set, reset 'relativenumber'. */
      - /* If 'relativenumber' is set, reset 'number'. */
      - if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
      - {
      - curwin->w_p_rnu = FALSE;
      + /* If 'number' is set, reset 'relativenumber'. */
      + /* If 'relativenumber' is set, reset 'number'. */
      + else if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
      + {
      + curwin->w_p_rnu = FALSE;
      +
      + /* Only reset the other global value if the own value is set globally. */
      + if (((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0))
      curwin->w_allbuf_opt.wo_rnu = FALSE;
      - }
      - if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
      - {
      - curwin->w_p_nu = FALSE;
      + }
      + else if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
      + {
      + curwin->w_p_nu = FALSE;
      +
      + /* Only reset the other global value if the own value is set globally. */
      + if (((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0))
      curwin->w_allbuf_opt.wo_nu = FALSE;
      - }
      + }
      + else if ((int *)varp == &curwin->w_allbuf_opt.wo_nu && curwin->w_allbuf_opt.wo_nu)
      + {
      + curwin->w_allbuf_opt.wo_rnu = FALSE;
      + }
      + else if ((int *)varp == &curwin->w_allbuf_opt.wo_rnu && curwin->w_allbuf_opt.wo_rnu)
      + {
      + curwin->w_allbuf_opt.wo_nu = FALSE;
      }

      else if ((int *)varp == &curbuf->b_p_ro)
      diff -r 84cc49b2da4f src/testdir/test89.in
      --- a/src/testdir/test89.in Sat Feb 16 18:16:15 2013 +0100
      +++ b/src/testdir/test89.in Sun Feb 17 00:07:08 2013 +0100
      @@ -10,6 +10,43 @@
      :$put ='results:'
      :$put a
      :$put b
      +:"
      +:set nonu nornu
      +:setglobal nu
      +:setlocal rnu
      +:redir @c | setglobal nu? | redir END
      +:set nonu nornu
      +:setglobal rnu
      +:setlocal nu
      +:redir @d | setglobal rnu? | redir END
      +:$put =':setlocal must NOT reset the other global value'
      +:$put c
      +:$put d
      +:"
      +:set nonu nornu
      +:setglobal nu
      +:setglobal rnu
      +:redir @e | setglobal nu? | redir END
      +:set nonu nornu
      +:setglobal rnu
      +:setglobal nu
      +:redir @f | setglobal rnu? | redir END
      +:$put =':setglobal MUST reset the other global value'
      +:$put e
      +:$put f
      +:"
      +:set nonu nornu
      +:set nu
      +:set rnu
      +:redir @g | setglobal nu? | redir END
      +:set nonu nornu
      +:set rnu
      +:set nu
      +:redir @h | setglobal rnu? | redir END
      +:$put =':set MUST reset the other global value'
      +:$put g
      +:$put h
      +:"
      :/^results/,$w! test.out
      :q!
      ENDTEST
      diff -r 84cc49b2da4f src/testdir/test89.ok
      --- a/src/testdir/test89.ok Sat Feb 16 18:16:15 2013 +0100
      +++ b/src/testdir/test89.ok Sun Feb 17 00:07:08 2013 +0100
      @@ -5,3 +5,18 @@

      nonumber
      relativenumber
      +:setlocal must NOT reset the other global value
      +
      + number
      +
      + relativenumber
      +:setglobal MUST reset the other global value
      +
      +nonumber
      +
      +norelativenumber
      +:set MUST reset the other global value
      +
      +nonumber
      +
      +norelativenumber

      --
      --
      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

      ---
      You received this message because you are subscribed to the Google Groups "vim_dev" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • Bram Moolenaar
      ... Thanks! I ll add it to the todo list. -- SECOND SOLDIER: It could be carried by an African swallow! FIRST SOLDIER: Oh yes! An African swallow maybe ...
      Message 2 of 3 , Feb 17, 2013
        Markus Heidelberg wrote:

        > > Patch 7.3.810
        > > Problem: 'relativenumber is reset unexpectedly. (Fran├žois Ingelrest)
        > > Solution: After an option was reset also reset the global value. Add a test.
        > > (Christian Brabandt)
        >
        > this bug I wanted to fix since a long time.
        > See these problem reports for reference:
        > http://groups.google.com/group/vim_dev/tree/browse_frm/month/2011-06/a31555949a630937#doc_704d17d6ef33a9cb
        > http://groups.google.com/group/vim_dev/tree/browse_frm/month/2012-03/a6662e58cccb720e#doc_e373c950580fd7f0
        >
        > However, this patch doesn't consider ":setlocal", which now clears the
        > global value of the 'nu' or 'rnu' counterpart.
        >
        > Here is a patch for this and for doing it right for ":setglobal", both
        > with a test. And an additional test for ":set" and its influence on the
        > global value.

        Thanks! I'll add it to the todo list.


        --
        SECOND SOLDIER: It could be carried by an African swallow!
        FIRST SOLDIER: Oh yes! An African swallow maybe ... but not a European
        swallow. that's my point.
        "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

        /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
        /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
        \\\ an exciting new programming language -- http://www.Zimbu.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

        ---
        You received this message because you are subscribed to the Google Groups "vim_dev" group.
        To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
        For more options, visit https://groups.google.com/groups/opt_out.
      Your message has been successfully submitted and would be delivered to recipients shortly.