diff options
| author | raichoo <raichoo@googlemail.com> | 2017-03-09 17:33:51 +0100 | 
|---|---|---|
| committer | raichoo <raichoo@googlemail.com> | 2017-03-19 21:14:11 +0100 | 
| commit | 0f5c3f111ab130f5cbb5943082ea5e877c1c2f4c (patch) | |
| tree | 6ef5b9a051b32a9e8577150f2ab05f993a0fe07d /src | |
| parent | 2ad25c04663da7d08da94db84dc6ded7df11ea87 (diff) | |
| download | rneovim-0f5c3f111ab130f5cbb5943082ea5e877c1c2f4c.tar.gz rneovim-0f5c3f111ab130f5cbb5943082ea5e877c1c2f4c.tar.bz2 rneovim-0f5c3f111ab130f5cbb5943082ea5e877c1c2f4c.zip | |
vim-patch:8.0.0179
Problem:    'formatprg' is a global option but the value may depend on the
            type of buffer. (Sung Pae)
Solution:   Make 'formatprg' global-local. (closes vim/vim#1380)
https://github.com/vim/vim/commit/9be7c04e6cd5b0facedcb56b09a5bcfc339efe03
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/buffer_defs.h | 1 | ||||
| -rw-r--r-- | src/nvim/normal.c | 22 | ||||
| -rw-r--r-- | src/nvim/option.c | 8 | ||||
| -rw-r--r-- | src/nvim/option_defs.h | 1 | ||||
| -rw-r--r-- | src/nvim/options.lua | 2 | ||||
| -rw-r--r-- | src/nvim/testdir/test_normal.vim | 32 | 
6 files changed, 46 insertions, 20 deletions
| diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index 3e9767adde..fdd7d945c9 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -640,6 +640,7 @@ struct file_buffer {    char_u *b_p_inde;             ///< 'indentexpr'    uint32_t b_p_inde_flags;      ///< flags for 'indentexpr'    char_u *b_p_indk;             ///< 'indentkeys' +  char_u *b_p_fp;               ///< 'formatprg'    char_u *b_p_fex;              ///< 'formatexpr'    uint32_t b_p_fex_flags;       ///< flags for 'formatexpr'    char_u *b_p_kp;               ///< 'keywordprg' diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 5a89fed207..82fa9f5f97 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -1901,12 +1901,13 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank)        break;      case OP_FORMAT: -      if (*curbuf->b_p_fex != NUL) -        op_formatexpr(oap);             /* use expression */ -      else if (*p_fp != NUL) -        op_colon(oap);                  /* use external command */ -      else -        op_format(oap, false);          /* use internal function */ +      if (*curbuf->b_p_fex != NUL) { +        op_formatexpr(oap);             // use expression +      } else if (*p_fp != NUL || *curbuf->b_p_fp != NUL) { +        op_colon(oap);                  // use external command +      } else { +        op_format(oap, false);          // use internal function +      }        break;      case OP_FORMAT2: @@ -2064,10 +2065,13 @@ static void op_colon(oparg_T *oap)      stuffReadbuff(get_equalprg());      stuffReadbuff((char_u *)"\n");    } else if (oap->op_type == OP_FORMAT) { -    if (*p_fp == NUL) -      stuffReadbuff((char_u *)"fmt"); -    else +    if (*curbuf->b_p_fp != NUL) { +      stuffReadbuff(curbuf->b_p_fp); +    } else if (*p_fp != NUL) {        stuffReadbuff(p_fp); +    } else { +      stuffReadbuff((char_u *)"fmt"); +    }      stuffReadbuff((char_u *)"\n']");    } diff --git a/src/nvim/option.c b/src/nvim/option.c index 2fae4aa848..2a17ca69d1 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -2150,6 +2150,7 @@ void check_buf_options(buf_T *buf)    check_string_option(&buf->b_p_inex);    check_string_option(&buf->b_p_inde);    check_string_option(&buf->b_p_indk); +  check_string_option(&buf->b_p_fp);    check_string_option(&buf->b_p_fex);    check_string_option(&buf->b_p_kp);    check_string_option(&buf->b_p_mps); @@ -5255,6 +5256,9 @@ void unset_global_local_option(char *name, void *from)      case PV_TSR:        clear_string_option(&buf->b_p_tsr);        break; +    case PV_FP: +      clear_string_option(&buf->b_p_fp); +      break;      case PV_EFM:        clear_string_option(&buf->b_p_efm);        break; @@ -5288,6 +5292,7 @@ static char_u *get_varp_scope(vimoption_T *p, int opt_flags)    }    if ((opt_flags & OPT_LOCAL) && ((int)p->indir & PV_BOTH)) {      switch ((int)p->indir) { +    case PV_FP:   return (char_u *)&(curbuf->b_p_fp);      case PV_EFM:  return (char_u *)&(curbuf->b_p_efm);      case PV_GP:   return (char_u *)&(curbuf->b_p_gp);      case PV_MP:   return (char_u *)&(curbuf->b_p_mp); @@ -5346,6 +5351,8 @@ static char_u *get_varp(vimoption_T *p)             ? (char_u *)&(curbuf->b_p_dict) : p->var;    case PV_TSR:    return *curbuf->b_p_tsr != NUL             ? (char_u *)&(curbuf->b_p_tsr) : p->var; +  case PV_FP: return *curbuf->b_p_fp != NUL +           ? (char_u *)&(curbuf->b_p_fp) : p->var;    case PV_EFM:    return *curbuf->b_p_efm != NUL             ? (char_u *)&(curbuf->b_p_efm) : p->var;    case PV_GP:     return *curbuf->b_p_gp != NUL @@ -5694,6 +5701,7 @@ void buf_copy_options(buf_T *buf, int flags)        buf->b_s.b_p_spl = vim_strsave(p_spl);        buf->b_p_inde = vim_strsave(p_inde);        buf->b_p_indk = vim_strsave(p_indk); +      buf->b_p_fp = empty_option;        buf->b_p_fex = vim_strsave(p_fex);        buf->b_p_sua = vim_strsave(p_sua);        buf->b_p_keymap = vim_strsave(p_keymap); diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index 1fd6dc9c91..b171b23edb 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -713,6 +713,7 @@ enum {    , BV_EP    , BV_ET    , BV_FENC +  , BV_FP    , BV_BEXPR    , BV_FEX    , BV_FF diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 1476fdda2c..853c2b52d7 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -948,7 +948,7 @@ return {      },      {        full_name='formatprg', abbreviation='fp', -      type='string', scope={'global'}, +      type='string', scope={'global', 'buffer'},        secure=true,        vi_def=true,        expand=true, diff --git a/src/nvim/testdir/test_normal.vim b/src/nvim/testdir/test_normal.vim index 29bd783ebc..98177851ab 100644 --- a/src/nvim/testdir/test_normal.vim +++ b/src/nvim/testdir/test_normal.vim @@ -224,21 +224,33 @@ func! Test_normal06_formatprg()    " only test on non windows platform    if has('win32')      return -  else -    " uses sed to number non-empty lines -    call writefile(['#!/bin/sh', 'sed ''/./=''|sed ''/./{', 'N', 's/\n/    /', '}'''], 'Xsed_format.sh') -    call system('chmod +x ./Xsed_format.sh')    endif -  call Setup_NewWindow() -  %d -  call setline(1, ['a', '', 'c', '', ' ', 'd', 'e']) + +  " uses sed to number non-empty lines +  call writefile(['#!/bin/sh', 'sed ''/./=''|sed ''/./{', 'N', 's/\n/    /', '}'''], 'Xsed_format.sh') +  call system('chmod +x ./Xsed_format.sh') +  let text = ['a', '', 'c', '', ' ', 'd', 'e'] +  let expected = ['1    a', '', '3    c', '', '5     ', '6    d', '7    e'] + +  10new +  call setline(1, text)    set formatprg=./Xsed_format.sh    norm! gggqG -  call assert_equal(['1    a', '', '3    c', '', '5     ', '6    d', '7    e'], getline(1, '$')) +  call assert_equal(expected, getline(1, '$')) +  bw! + +  10new +  call setline(1, text) +  set formatprg=donothing +  setlocal formatprg=./Xsed_format.sh +  norm! gggqG +  call assert_equal(expected, getline(1, '$')) +  bw! +    " clean up    set formatprg= +  setlocal formatprg=    call delete('Xsed_format.sh') -  bw!  endfunc  func! Test_normal07_internalfmt() @@ -251,7 +263,7 @@ func! Test_normal07_internalfmt()    norm! gggqG    call assert_equal(['1    2    3', '4    5    6', '7    8    9', '10    11    '], getline(1, '$'))    " clean up -  set formatprg= tw=0 +  set tw=0    bw!  endfunc | 
