]> granicus.if.org Git - vim/commitdiff
Add the 'L' item to 'cinoptions'. (Manuel Konig)
authorBram Moolenaar <Bram@vim.org>
Sat, 17 Jul 2010 15:12:06 +0000 (17:12 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 17 Jul 2010 15:12:06 +0000 (17:12 +0200)
runtime/doc/indent.txt
runtime/doc/todo.txt
src/misc1.c

index 410fe38eaaf73b6dae47b7bff589cbb3037eb232..a1d4cb21b35bc935295872540fbc8824c088bc93 100644 (file)
@@ -215,6 +215,19 @@ assume a 'shiftwidth' of 4.
                          a = b;            a = b;            a = b;
                      }                 }                 }
                  }                   }                   }
+<
+       LN    Controls placement of jump labels. If N is negative, the label
+             will be placed at column 1. If N is non-negative, the indent of
+             the label will be the prevailing indent minus N.  (default -1).
+
+               cino=               cino=L2             cino=Ls >
+                 func()              func()              func()
+                 {                   {                   {
+                     {                   {                   {
+                         stmt;               stmt;               stmt;
+                 LABEL:                    LABEL:            LABEL:
+                     }                   }                   }
+                 }                   }                   }
 <
        :N    Place case labels N characters from the indent of the switch().
              (default 'shiftwidth').
@@ -464,13 +477,14 @@ assume a 'shiftwidth' of 4.
 
 
 The defaults, spelled out in full, are:
-       cinoptions=>s,e0,n0,f0,{0,}0,^0,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,c3,C0,
-                  /0,(2s,us,U0,w0,W0,m0,j0,)20,*70,#0
+       cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
+                       c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
 
 Vim puts a line in column 1 if:
 - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
 - It starts with a label (a keyword followed by ':', other than "case" and
-  "default").
+  "default") and 'cinoptions' does not contain an 'L' entry with a positive
+  value.
 - Any combination of indentations causes the line to have less than 0
   indentation.
 
index ba8ac913671a1b5d913304d23ad8cf0b0c5a870c..4082b0a570663c922fe3b65202484339735f1f82 100644 (file)
@@ -1095,9 +1095,6 @@ Before release 7.3:
 
 Vim 7.3:
 Patches to possibly include:
--   Patch for adding "J" flag to 'cinoptions': placement of jump label.  (Manuel
-    Konig, 2010 Feb 19)  Update by Lech Lorens, Feb 22.
-    Need another name, "J" is now used for Javascript.
 -   Patch for Python 3 support. (Roland Puntaier, 2009 Sep 22)
     Includes changes for omnicompletion.
     Needs some more testing.
index 4b0ff6df34d0ff04acaa3af3c3a0cdddb65ab90f..e34f033bd263013321e600a329401fa2dcff3972 100644 (file)
@@ -6061,6 +6061,12 @@ get_c_indent()
      */
     int ind_open_left_imag = 0;
 
+    /*
+     * Spaces jump labels should be shifted to the left if N is non-negative,
+     * otherwise the jump label will be put to column 1.
+     */
+    int ind_jump_label = -1;
+
     /*
      * spaces from the switch() indent a "case xx" label should be located
      */
@@ -6232,6 +6238,7 @@ get_c_indent()
     int                iscase;
     int                lookfor_break;
     int                cont_amount = 0;    /* amount for continuation line */
+    int                original_line_islabel;
 
     for (options = curbuf->b_p_cino; *options; )
     {
@@ -6277,6 +6284,7 @@ get_c_indent()
            case '{': ind_open_extra = n; break;
            case '}': ind_close_extra = n; break;
            case '^': ind_open_left_imag = n; break;
+           case 'L': ind_jump_label = n; break;
            case ':': ind_case = n; break;
            case '=': ind_case_code = n; break;
            case 'b': ind_case_break = n; break;
@@ -6339,6 +6347,8 @@ get_c_indent()
 
     curwin->w_cursor.col = 0;
 
+    original_line_islabel = cin_islabel(ind_maxcomment);  /* XXX */
+
     /*
      * #defines and so on always go at the left when included in 'cinkeys'.
      */
@@ -6348,9 +6358,11 @@ get_c_indent()
     }
 
     /*
-     * Is it a non-case label? Then that goes at the left margin too unless JS flag is set.
+     * Is it a non-case label? Then that goes at the left margin too unless:
+     *  - JS flag is set.
+     *  - 'L' item has a positive value.
      */
-    else if (!ind_js && cin_islabel(ind_maxcomment))       /* XXX */
+    else if (original_line_islabel && !ind_js && ind_jump_label < 0)
     {
        amount = 0;
     }
@@ -7743,6 +7755,10 @@ term_again:
       /* add extra indent for a comment */
       if (cin_iscomment(theline))
          amount += ind_comment;
+
+      /* subtract extra left-shift for jump labels */
+      if (ind_jump_label > 0 && original_line_islabel)
+         amount -= ind_jump_label;
     }
 
     /*