Patch 7.4.2201
Problem:    The sign column disappears when the last sign is deleted.
Solution:   Add the 'signcolumn' option. (Christian Brabandt)
Files:      runtime/doc/options.txt, runtime/optwin.vim, src/edit.c,
            src/move.c, src/option.c, src/option.h, src/proto/option.pro,
            src/screen.c, src/structs.h, src/testdir/test_options.vim


*** ../vim-7.4.2200/runtime/doc/options.txt     2016-07-27 23:26:00.782222261 
+0200
--- runtime/doc/options.txt     2016-08-12 17:50:05.575859943 +0200
***************
*** 6704,6713 ****
  
        Example: Try this together with 'sidescroll' and 'listchars' as
                 in the following example to never allow the cursor to move
!                onto the "extends" character:
  
                 :set nowrap sidescroll=1 listchars=extends:>,precedes:<
                 :set sidescrolloff=1
  
  
                        *'smartcase'* *'scs'* *'nosmartcase'* *'noscs'*
--- 6733,6751 ----
  
        Example: Try this together with 'sidescroll' and 'listchars' as
                 in the following example to never allow the cursor to move
!                onto the "extends" character: >
  
                 :set nowrap sidescroll=1 listchars=extends:>,precedes:<
                 :set sidescrolloff=1
+ <
+                                               *'signcolumn'* *'scl'*
+ 'signcolumn' 'scl'    string  (default "auto")
+                       local to window
+                       {not in Vi}
+                       {not available when compiled without the |+signs|
+                       feature}
+       Whether or not to draw the signcolumn. "auto" means it will only be
+       drawn when there is a sign to display.
  
  
                        *'smartcase'* *'scs'* *'nosmartcase'* *'noscs'*
*** ../vim-7.4.2200/runtime/optwin.vim  2016-07-16 14:46:51.119240709 +0200
--- runtime/optwin.vim  2016-08-12 17:26:01.604631766 +0200
***************
*** 1307,1312 ****
--- 1307,1317 ----
  call <SID>BinOptionL("bl")
  call append("$", "debug\tset to \"msg\" to see all error messages")
  call append("$", " \tset debug=" . &debug)
+ if has("signs")
+   call append("$", "signcolumn\twhether to show the signcolumn")
+   call append("$", "\t(local to window)")
+   call <SID>OptionL("scl")
+ endif
  if has("mzscheme")
    call append("$", "mzquantum\tinterval in milliseconds between polls for 
MzScheme threads")
    call append("$", " \tset mzq=" . &mzq)
*** ../vim-7.4.2200/src/edit.c  2016-08-09 21:51:36.154407615 +0200
--- src/edit.c  2016-08-12 17:30:29.910264818 +0200
***************
*** 6761,6771 ****
        textwidth -= curwin->w_p_fdc;
  #endif
  #ifdef FEAT_SIGNS
!       if (curwin->w_buffer->b_signlist != NULL
! # ifdef FEAT_NETBEANS_INTG
!                         || curwin->w_buffer->b_has_sign_column
! # endif
!                   )
            textwidth -= 1;
  #endif
        if (curwin->w_p_nu || curwin->w_p_rnu)
--- 6761,6767 ----
        textwidth -= curwin->w_p_fdc;
  #endif
  #ifdef FEAT_SIGNS
!       if (signcolumn_on(curwin))
            textwidth -= 1;
  #endif
        if (curwin->w_p_nu || curwin->w_p_rnu)
*** ../vim-7.4.2200/src/move.c  2016-07-24 21:58:39.712057561 +0200
--- src/move.c  2016-08-12 17:30:33.210235702 +0200
***************
*** 890,901 ****
            + wp->w_p_fdc
  #endif
  #ifdef FEAT_SIGNS
!           + (
! # ifdef FEAT_NETBEANS_INTG
!               /* show glyph gutter in netbeans */
!               wp->w_buffer->b_has_sign_column ||
! # endif
!               wp->w_buffer->b_signlist != NULL ? 2 : 0)
  #endif
           );
  }
--- 890,896 ----
            + wp->w_p_fdc
  #endif
  #ifdef FEAT_SIGNS
!           + (signcolumn_on(wp) ? 2 : 0)
  #endif
           );
  }
*** ../vim-7.4.2200/src/option.c        2016-08-07 13:48:04.997106444 +0200
--- src/option.c        2016-08-12 17:48:50.480524989 +0200
***************
*** 253,258 ****
--- 253,261 ----
  # define PV_COCU      OPT_WIN(WV_COCU)
  # define PV_COLE      OPT_WIN(WV_COLE)
  #endif
+ #ifdef FEAT_SIGNS
+ # define PV_SCL               OPT_WIN(WV_SCL)
+ #endif
  
  /* WV_ and BV_ values get typecasted to this for the "indir" field */
  typedef enum
***************
*** 2410,2415 ****
--- 2413,2426 ----
      {"sidescrolloff", "siso", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
                            (char_u *)&p_siso, PV_NONE,
                            {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+     {"signcolumn",   "scl",  P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SIGNS
+                           (char_u *)VAR_WIN, PV_SCL,
+                           {(char_u *)"auto", (char_u *)0L} SCRIPTID_INIT},
+ #else
+                           (char_u *)NULL, PV_NONE,
+                           {(char_u *)NULL, (char_u *)0L}
+ #endif
      {"slowopen",    "slow", P_BOOL|P_VI_DEF,
                            (char_u *)NULL, PV_NONE,
                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
***************
*** 3076,3081 ****
--- 3087,3095 ----
  #ifdef FEAT_INS_EXPAND
  static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview", 
"noinsert", "noselect", NULL};
  #endif
+ #ifdef FEAT_SIGNS
+ static char *(p_scl_values[]) = {"yes", "no", "auto", NULL};
+ #endif
  
  static void set_option_default(int, int opt_flags, int compatible);
  static void set_options_default(int opt_flags);
***************
*** 6978,6983 ****
--- 6992,7006 ----
      }
  #endif /* FEAT_INS_EXPAND */
  
+ #ifdef FEAT_SIGNS
+     /* 'signcolumn' */
+     else if (varp == &curwin->w_p_scl)
+     {
+       if (check_opt_strings(*varp, p_scl_values, FALSE) != OK)
+           errmsg = e_invarg;
+     }
+ #endif
+ 
  
  #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
      else if (varp == &p_toolbar)
***************
*** 10433,10438 ****
--- 10456,10464 ----
  #ifdef FEAT_KEYMAP
        case PV_KMAP:   return (char_u *)&(curbuf->b_p_keymap);
  #endif
+ #ifdef FEAT_SIGNS
+       case PV_SCL:    return (char_u *)&(curwin->w_p_scl);
+ #endif
        default:        EMSG(_("E356: get_varp ERROR"));
      }
      /* always return a valid pointer to avoid a crash! */
***************
*** 10549,10554 ****
--- 10575,10583 ----
  # endif
      to->wo_fmr = vim_strsave(from->wo_fmr);
  #endif
+ #ifdef FEAT_SIGNS
+     to->wo_scl = vim_strsave(from->wo_scl);
+ #endif
      check_winopt(to);         /* don't want NULL pointers */
  }
  
***************
*** 10578,10583 ****
--- 10607,10615 ----
  # endif
      check_string_option(&wop->wo_fmr);
  #endif
+ #ifdef FEAT_SIGNS
+     check_string_option(&wop->wo_scl);
+ #endif
  #ifdef FEAT_RIGHTLEFT
      check_string_option(&wop->wo_rlc);
  #endif
***************
*** 10611,10616 ****
--- 10643,10651 ----
  # endif
      clear_string_option(&wop->wo_fmr);
  #endif
+ #ifdef FEAT_SIGNS
+     clear_string_option(&wop->wo_scl);
+ #endif
  #ifdef FEAT_LINEBREAK
      clear_string_option(&wop->wo_briopt);
  #endif
***************
*** 12274,12276 ****
--- 12309,12330 ----
  {
      return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
  }
+ 
+ #if defined(FEAT_SIGNS) || defined(PROTO)
+ /*
+  * Return TRUE when window "wp" has a column to draw signs in.
+  */
+      int
+ signcolumn_on(win_T *wp)
+ {
+     if (*wp->w_p_scl == 'n')
+       return FALSE;
+     if (*wp->w_p_scl == 'y')
+       return TRUE;
+     return (wp->w_buffer->b_signlist != NULL
+ # ifdef FEAT_NETBEANS_INTG
+                       || wp->w_buffer->b_has_sign_column
+ # endif
+                   );
+ }
+ #endif
*** ../vim-7.4.2200/src/option.h        2016-07-27 23:26:00.778222299 +0200
--- src/option.h        2016-08-12 17:55:59.128728720 +0200
***************
*** 633,638 ****
--- 633,641 ----
  EXTERN char_u *p_mef;         /* 'makeef' */
  EXTERN char_u *p_mp;          /* 'makeprg' */
  #endif
+ #ifdef FEAT_SIGNS
+ EXTERN char_u  *p_scl;                /* signcolumn */
+ #endif
  #ifdef FEAT_SYN_HL
  EXTERN char_u   *p_cc;                /* 'colorcolumn' */
  EXTERN int      p_cc_cols[256]; /* array for 'colorcolumn' columns */
***************
*** 1173,1178 ****
--- 1176,1184 ----
      , WV_WFW
  #endif
      , WV_WRAP
+ #ifdef FEAT_SIGNS
+     , WV_SCL
+ #endif
      , WV_COUNT            /* must be the last one */
  };
  
*** ../vim-7.4.2200/src/proto/option.pro        2016-01-19 13:21:55.845334290 
+0100
--- src/proto/option.pro        2016-08-12 17:31:25.093777907 +0200
***************
*** 63,66 ****
--- 63,67 ----
  long get_sts_value(void);
  void find_mps_values(int *initc, int *findc, int *backwards, int switchit);
  unsigned int get_bkc_value(buf_T *buf);
+ int signcolumn_on(win_T *wp);
  /* vim: set ft=c : */
*** ../vim-7.4.2200/src/screen.c        2016-08-12 14:08:20.678029453 +0200
--- src/screen.c        2016-08-12 17:30:49.282093893 +0200
***************
*** 2255,2277 ****
  #endif
  }
  
- #ifdef FEAT_SIGNS
- static int draw_signcolumn(win_T *wp);
- 
- /*
-  * Return TRUE when window "wp" has a column to draw signs in.
-  */
-     static int
- draw_signcolumn(win_T *wp)
- {
-     return (wp->w_buffer->b_signlist != NULL
- # ifdef FEAT_NETBEANS_INTG
-                               || wp->w_buffer->b_has_sign_column
- # endif
-                   );
- }
- #endif
- 
  /*
   * Clear the rest of the window and mark the unused lines with "c1".  use "c2"
   * as the filler character.
--- 2255,2260 ----
***************
*** 2313,2319 ****
        }
  # endif
  # ifdef FEAT_SIGNS
!       if (draw_signcolumn(wp))
        {
            int nn = n + 2;
  
--- 2296,2302 ----
        }
  # endif
  # ifdef FEAT_SIGNS
!       if (signcolumn_on(wp))
        {
            int nn = n + 2;
  
***************
*** 2363,2369 ****
        }
  #endif
  #ifdef FEAT_SIGNS
!       if (draw_signcolumn(wp))
        {
            int     nn = n + 2;
  
--- 2346,2352 ----
        }
  #endif
  #ifdef FEAT_SIGNS
!       if (signcolumn_on(wp))
        {
            int     nn = n + 2;
  
***************
*** 2507,2513 ****
  
  #ifdef FEAT_SIGNS
      /* If signs are being displayed, add two spaces. */
!     if (draw_signcolumn(wp))
      {
        len = W_WIDTH(wp) - col;
        if (len > 0)
--- 2490,2496 ----
  
  #ifdef FEAT_SIGNS
      /* If signs are being displayed, add two spaces. */
!     if (signcolumn_on(wp))
      {
        len = W_WIDTH(wp) - col;
        if (len > 0)
***************
*** 3677,3683 ****
                draw_state = WL_SIGN;
                /* Show the sign column when there are any signs in this
                 * buffer or when using Netbeans. */
!               if (draw_signcolumn(wp))
                {
                    int text_sign;
  # ifdef FEAT_SIGN_ICONS
--- 3660,3666 ----
                draw_state = WL_SIGN;
                /* Show the sign column when there are any signs in this
                 * buffer or when using Netbeans. */
!               if (signcolumn_on(wp))
                {
                    int text_sign;
  # ifdef FEAT_SIGN_ICONS
*** ../vim-7.4.2200/src/structs.h       2016-08-07 18:22:30.426091047 +0200
--- src/structs.h       2016-08-12 17:49:30.300172347 +0200
***************
*** 263,268 ****
--- 263,272 ----
      int               wo_crb_save;    /* 'cursorbind' state saved for diff 
mode*/
  # define w_p_crb_save w_onebuf_opt.wo_crb_save
  #endif
+ #ifdef FEAT_SIGNS
+     char_u    *wo_scl;
+ # define w_p_scl w_onebuf_opt.wo_scl  /* 'signcolumn' */
+ #endif
  
  #ifdef FEAT_EVAL
      int               wo_scriptID[WV_COUNT];  /* SIDs for window-local 
options */
*** ../vim-7.4.2200/src/testdir/test_options.vim        2016-08-07 
13:48:05.001106411 +0200
--- src/testdir/test_options.vim        2016-08-12 17:42:58.239644278 +0200
***************
*** 16,22 ****
    set whichwrap&
  endfunction
  
! function! Test_options()
    let caught = 'ok'
    try
      options
--- 16,22 ----
    set whichwrap&
  endfunction
  
! function Test_options()
    let caught = 'ok'
    try
      options
***************
*** 29,35 ****
    close
  endfunction
  
! function! Test_path_keep_commas()
    " Test that changing 'path' keeps two commas.
    set path=foo,,bar
    set path-=bar
--- 29,35 ----
    close
  endfunction
  
! function Test_path_keep_commas()
    " Test that changing 'path' keeps two commas.
    set path=foo,,bar
    set path-=bar
***************
*** 38,40 ****
--- 38,48 ----
  
    set path&
  endfunction
+ 
+ func Test_signcolumn()
+   call assert_equal("auto", &signcolumn)
+   set signcolumn=yes
+   set signcolumn=no
+   call assert_fails('set signcolumn=nope')
+ endfunc
+ 
*** ../vim-7.4.2200/src/version.c       2016-08-12 16:29:03.351068377 +0200
--- src/version.c       2016-08-12 17:27:04.252079167 +0200
***************
*** 765,766 ****
--- 765,768 ----
  {   /* Add new patch number below this line */
+ /**/
+     2201,
  /**/

-- 
The Feynman problem solving Algorithm:
        1) Write down the problem
        2) Think real hard
        3) Write down the answer

 /// Bram Moolenaar -- [email protected] -- 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui