Ticket #1843: vim-7.0-fixes-8.patch

File vim-7.0-fixes-8.patch, 43.1 KB (added by Ag. Hatzimanikas, 18 years ago)
  • runtime/autoload/ccomplete.vim

    Submitted By: Hatzimanikas Agathoklis  (a dot hatzim at gmail dot com)
    Date: 2006-06-31
    Initial Package Version: 7.0
    Origin: Upstream
    Upstream Status: Applied
    Description:A consolidated patch that includes the 001-004, 006-026, 029-031, and 033-042 patches 
    	    from Upstream(005, 027,028 and 032 is for the extras and Windows 32 only)  and one patch
    	    from Alexander E. Patrakov.
    Submitted By: Alexander E. Patrakov
    Date: 2006-07-25
    Initial Package Version: 7.0
    Origin: Alexander E. Patrakov
    Upstream Status: Sent
    Description: Allows downloading spellfiles via HTTP,
    thus reverting the negative effect of ftp://ftp.vim.org/pub/vim/patches/7.0/7.0.010
    		For more details,please see ticket 1843  http://wiki.linuxfromscratch.org/lfs/ticket/1843
    
    diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim
    old new  
    11" Vim completion script
    22" Language:     C
    33" Maintainer:   Bram Moolenaar <Bram@vim.org>
    4 " Last Change:  2006 May 03
     4" Last Change:  2006 May 08
    55
    66
    77" This function is used for the 'omnifunc' option.
     
    458458" member.
    459459function! s:StructMembers(typename, items, all)
    460460  " Todo: What about local structures?
    461   let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
     461  let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
    462462  if fnames == ''
    463463    return []
    464464  endif
  • runtime/autoload/paste.vim

    diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim
    old new  
    11" Vim support file to help with paste mappings and menus
    22" Maintainer:   Bram Moolenaar <Bram@vim.org>
    3 " Last Change:  2006 Apr 21
     3" Last Change:  2006 Jun 23
    44
    55" Define the string to use for items that are present both in Edit, Popup and
    66" Toolbar menu.  Also used in mswin.vim and macmap.vim.
     
    1212if has("virtualedit")
    1313  let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
    1414  let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
    15   let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi'
     15  let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi'
    1616
    1717  func! paste#Paste()
    1818    let ove = &ve
  • runtime/autoload/spellfile.vim

    diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim
    old new  
    11" Vim script to download a missing spell file
    22" Maintainer:   Bram Moolenaar <Bram@vim.org>
    3 " Last Change:  2006 Feb 01
     3" Last Change:  2006 May 10
    44
    55if !exists('g:spellfile_URL')
    6   let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
     6  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
    77endif
    88let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
    99
     
    6161    new
    6262    setlocal bin
    6363    echo 'Downloading ' . fname . '...'
    64     exe 'Nread ' g:spellfile_URL . '/' . fname
     64    call spellfile#Nread(fname)
    6565    if getline(2) !~ 'VIMspell'
    6666      " Didn't work, perhaps there is an ASCII one.
    6767      g/^/d
    6868      let fname = a:lang . '.ascii.spl'
    6969      echo 'Could not find it, trying ' . fname . '...'
    70       exe 'Nread ' g:spellfile_URL . '/' . fname
     70      call spellfile#Nread(fname)
    7171      if getline(2) !~ 'VIMspell'
    7272        echo 'Sorry, downloading failed'
    7373        bwipe!
     
    9595        g/^/d
    9696        let fname = substitute(fname, '\.spl$', '.sug', '')
    9797        echo 'Downloading ' . fname . '...'
    98         exe 'Nread ' g:spellfile_URL . '/' . fname
     98        call spellfile#Nread(fname)
    9999        if getline(2) !~ 'VIMsug'
    100100          echo 'Sorry, downloading failed'
    101101        else
     
    109109    bwipe
    110110  endif
    111111endfunc
     112
     113" Read "fname" from the server.
     114function! spellfile#Nread(fname)
     115  if strpart(g:spellfile_URL, 0, 6) == 'ftp://'
     116    " Avoid the password prompt by providing the default username and password
     117    let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '')
     118    let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '')
     119    exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"'
     120  else
     121     exe 'Nread "' . g:spellfile_URL . '/' . a:fname . '"'
     122  endif
     123endfunc
  • runtime/plugin/matchparen.vim

    diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim
    old new  
    11" Vim plugin for showing matching parens
    22" Maintainer:  Bram Moolenaar <Bram@vim.org>
    3 " Last Change: 2006 Apr 27
     3" Last Change: 2006 May 11
    44
    55" Exit quickly when:
    66" - this plugin was already loaded (or disabled)
     
    9090  " Find the match.  When it was just before the cursor move it there for a
    9191  " moment.
    9292  if before > 0
    93     let save_cursor = getpos('.')
     93    let save_cursor = winsaveview()
    9494    call cursor(c_lnum, c_col - before)
    9595  endif
    9696
     
    102102  let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
    103103
    104104  if before > 0
    105     call setpos('.', save_cursor)
     105    call winrestview(save_cursor)
    106106  endif
    107107
    108108  " If a match is found setup match highlighting.
  • src/edit.c

    diff -Naur vim70.orig/src/edit.c vim70/src/edit.c
    old new  
    719719#ifdef FEAT_INS_EXPAND
    720720        /*
    721721         * Special handling of keys while the popup menu is visible or wanted
    722          * and the cursor is still in the completed word.
     722         * and the cursor is still in the completed word.  Only when there is
     723         * a match, skip this when no matches were found.
    723724         */
    724         if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
     725        if (compl_started
     726                && pum_wanted()
     727                && curwin->w_cursor.col >= compl_col
     728                && (compl_shown_match == NULL
     729                    || compl_shown_match != compl_shown_match->cp_next))
    725730        {
    726731            /* BS: Delete one character from "compl_leader". */
    727732            if ((c == K_BS || c == Ctrl_H)
     
    751756                    continue;
    752757                }
    753758
    754                 /* Pressing CTRL-Y selects the current match.  Shen
     759                /* Pressing CTRL-Y selects the current match.  When
    755760                 * compl_enter_selects is set the Enter key does the same. */
    756761                if (c == Ctrl_Y || (compl_enter_selects
    757762                                   && (c == CAR || c == K_KENTER || c == NL)))
     
    30153020    if ((int)(p - line) - (int)compl_col <= 0)
    30163021        return K_BS;
    30173022
    3018     /* For redo we need to repeat this backspace. */
    3019     AppendCharToRedobuff(K_BS);
    3020 
    30213023    /* Deleted more than what was used to find matches or didn't finish
    30223024     * finding all matches: need to look for matches all over again. */
    30233025    if (curwin->w_cursor.col <= compl_col + compl_length
     
    30463048    ins_compl_delete();
    30473049    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
    30483050    compl_used_match = FALSE;
    3049     compl_enter_selects = FALSE;
    30503051
    30513052    if (compl_started)
    30523053        ins_compl_set_original_text(compl_leader);
     
    30763077        compl_restarting = FALSE;
    30773078    }
    30783079
     3080#if 0   /* disabled, made CTRL-L, BS and typing char jump to original text. */
    30793081    if (!compl_used_match)
    30803082    {
    30813083        /* Go to the original text, since none of the matches is inserted. */
     
    30873089        compl_curr_match = compl_shown_match;
    30883090        compl_shows_dir = compl_direction;
    30893091    }
     3092#endif
     3093    compl_enter_selects = !compl_used_match;
    30903094
    30913095    /* Show the popup menu with a different set of matches. */
    30923096    ins_compl_show_pum();
     
    31153119#endif
    31163120        ins_char(c);
    31173121
    3118     /* For redo we need to count this character so that the number of
    3119      * backspaces is correct. */
    3120     AppendCharToRedobuff(c);
    3121 
    31223122    /* If we didn't complete finding matches we must search again. */
    31233123    if (compl_was_interrupted)
    31243124        ins_compl_restart();
     
    31753175    char_u      *p;
    31763176    int         len = curwin->w_cursor.col - compl_col;
    31773177    int         c;
     3178    compl_T     *cp;
    31783179
    31793180    p = compl_shown_match->cp_str;
    31803181    if ((int)STRLEN(p) <= len)   /* the match is too short */
    3181         return;
     3182    {
     3183        /* When still at the original match use the first entry that matches
     3184         * the leader. */
     3185        if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
     3186        {
     3187            p = NULL;
     3188            for (cp = compl_shown_match->cp_next; cp != NULL
     3189                                 && cp != compl_first_match; cp = cp->cp_next)
     3190            {
     3191                if (ins_compl_equal(cp, compl_leader,
     3192                                                   (int)STRLEN(compl_leader)))
     3193                {
     3194                    p = cp->cp_str;
     3195                    break;
     3196                }
     3197            }
     3198            if (p == NULL || (int)STRLEN(p) <= len)
     3199                return;
     3200        }
     3201        else
     3202            return;
     3203    }
    31823204    p += len;
    31833205#ifdef FEAT_MBYTE
    31843206    c = mb_ptr2char(p);
     
    33693391                    ptr = compl_leader;
    33703392                else
    33713393                    ptr = compl_orig_text;
    3372                 p = compl_orig_text;
    3373                 for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
    3374                     ;
     3394                if (compl_orig_text != NULL)
     3395                {
     3396                    p = compl_orig_text;
     3397                    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
     3398                                                                       ++temp)
     3399                        ;
    33753400#ifdef FEAT_MBYTE
    3376                 if (temp > 0)
    3377                     temp -= (*mb_head_off)(compl_orig_text, p + temp);
     3401                    if (temp > 0)
     3402                        temp -= (*mb_head_off)(compl_orig_text, p + temp);
    33783403#endif
    3379                 for (p += temp; *p != NUL; mb_ptr_adv(p))
    3380                     AppendCharToRedobuff(K_BS);
    3381                 AppendToRedobuffLit(ptr + temp, -1);
     3404                    for (p += temp; *p != NUL; mb_ptr_adv(p))
     3405                        AppendCharToRedobuff(K_BS);
     3406                }
     3407                if (ptr != NULL)
     3408                    AppendToRedobuffLit(ptr + temp, -1);
    33823409            }
    33833410
    33843411#ifdef FEAT_CINDENT
     
    41004127                && compl_shown_match->cp_next != NULL
    41014128                && compl_shown_match->cp_next != compl_first_match)
    41024129            compl_shown_match = compl_shown_match->cp_next;
     4130
     4131        /* If we didn't find it searching forward, and compl_shows_dir is
     4132         * backward, find the last match. */
     4133        if (compl_shows_dir == BACKWARD
     4134                && !ins_compl_equal(compl_shown_match,
     4135                                      compl_leader, (int)STRLEN(compl_leader))
     4136                && (compl_shown_match->cp_next == NULL
     4137                    || compl_shown_match->cp_next == compl_first_match))
     4138        {
     4139            while (!ins_compl_equal(compl_shown_match,
     4140                                      compl_leader, (int)STRLEN(compl_leader))
     4141                    && compl_shown_match->cp_prev != NULL
     4142                    && compl_shown_match->cp_prev != compl_first_match)
     4143                compl_shown_match = compl_shown_match->cp_prev;
     4144        }
    41034145    }
    41044146
    41054147    if (allow_get_expansion && insert_match
     
    41244166    {
    41254167        if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
    41264168        {
    4127             if (compl_pending != 0)
    4128                 --compl_pending;
    41294169            compl_shown_match = compl_shown_match->cp_next;
    41304170            found_end = (compl_first_match != NULL
    41314171                           && (compl_shown_match->cp_next == compl_first_match
     
    41344174        else if (compl_shows_dir == BACKWARD
    41354175                                        && compl_shown_match->cp_prev != NULL)
    41364176        {
    4137             if (compl_pending != 0)
    4138                 ++compl_pending;
    41394177            found_end = (compl_shown_match == compl_first_match);
    41404178            compl_shown_match = compl_shown_match->cp_prev;
    41414179            found_end |= (compl_shown_match == compl_first_match);
    41424180        }
    41434181        else
    41444182        {
     4183            if (!allow_get_expansion)
     4184            {
     4185                if (advance)
     4186                {
     4187                    if (compl_shows_dir == BACKWARD)
     4188                        compl_pending -= todo + 1;
     4189                    else
     4190                        compl_pending += todo + 1;
     4191                }
     4192                return -1;
     4193            }
     4194
    41454195            if (advance)
    41464196            {
    41474197                if (compl_shows_dir == BACKWARD)
     
    41494199                else
    41504200                    ++compl_pending;
    41514201            }
    4152             if (!allow_get_expansion)
    4153                 return -1;
    41544202
    41554203            /* Find matches. */
    41564204            num_matches = ins_compl_get_exp(&compl_startpos);
    4157             if (compl_pending != 0 && compl_direction == compl_shows_dir
     4205
     4206            /* handle any pending completions */
     4207            while (compl_pending != 0 && compl_direction == compl_shows_dir
    41584208                                                                   && advance)
    4159                 compl_shown_match = compl_curr_match;
     4209            {
     4210                if (compl_pending > 0 && compl_shown_match->cp_next != NULL)
     4211                {
     4212                    compl_shown_match = compl_shown_match->cp_next;
     4213                    --compl_pending;
     4214                }
     4215                if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
     4216                {
     4217                    compl_shown_match = compl_shown_match->cp_prev;
     4218                    ++compl_pending;
     4219                }
     4220                else
     4221                    break;
     4222            }
    41604223            found_end = FALSE;
    41614224        }
    41624225        if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
     
    42654328        return;
    42664329    count = 0;
    42674330
    4268     ++no_mapping;
     4331    /* Check for a typed key.  Do use mappings, otherwise vim_is_ctrl_x_key()
     4332     * can't do its work correctly. */
    42694333    c = vpeekc_any();
    4270     --no_mapping;
    42714334    if (c != NUL)
    42724335    {
    42734336        if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R)
     
    42774340            (void)ins_compl_next(FALSE, ins_compl_key2count(c),
    42784341                                                    c != K_UP && c != K_DOWN);
    42794342        }
    4280         else if (c != Ctrl_R)
    4281             compl_interrupted = TRUE;
     4343        else
     4344        {
     4345            /* Need to get the character to have KeyTyped set.  We'll put it
     4346             * back with vungetc() below. */
     4347            c = safe_vgetc();
     4348
     4349            /* Don't interrupt completion when the character wasn't typed,
     4350             * e.g., when doing @q to replay keys. */
     4351            if (c != Ctrl_R && KeyTyped)
     4352                compl_interrupted = TRUE;
     4353
     4354            vungetc(c);
     4355        }
    42824356    }
    42834357    if (compl_pending != 0 && !got_int)
    4284         (void)ins_compl_next(FALSE, compl_pending > 0
    4285                                       ? compl_pending : -compl_pending, TRUE);
     4358    {
     4359        int todo = compl_pending > 0 ? compl_pending : -compl_pending;
     4360
     4361        compl_pending = 0;
     4362        (void)ins_compl_next(FALSE, todo, TRUE);
     4363    }
    42864364}
    42874365
    42884366/*
     
    46114689                                     (int)STRLEN(compl_pattern), curs_col);
    46124690            if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
    46134691                    || compl_xp.xp_context == EXPAND_NOTHING)
    4614                 return FAIL;
    4615             startcol = (int)(compl_xp.xp_pattern - compl_pattern);
    4616             compl_col = startcol;
    4617             compl_length = curs_col - startcol;
     4692            {
     4693                compl_col = curs_col;
     4694                compl_length = 0;
     4695                vim_free(compl_pattern);
     4696                compl_pattern = NULL;
     4697            }
     4698            else
     4699            {
     4700                startcol = (int)(compl_xp.xp_pattern - compl_pattern);
     4701                compl_col = startcol;
     4702                compl_length = curs_col - startcol;
     4703            }
    46184704        }
    46194705        else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
    46204706        {
     
    46684754            else
    46694755                compl_col = spell_word_start(startcol);
    46704756            if (compl_col >= (colnr_T)startcol)
    4671                 return FAIL;
    4672             spell_expand_check_cap(compl_col);
     4757            {
     4758                compl_length = 0;
     4759                compl_col = curs_col;
     4760            }
     4761            else
     4762            {
     4763                spell_expand_check_cap(compl_col);
     4764                compl_length = (int)curs_col - compl_col;
     4765            }
    46734766            /* Need to obtain "line" again, it may have become invalid. */
    46744767            line = ml_get(curwin->w_cursor.lnum);
    4675             compl_length = (int)curs_col - compl_col;
    46764768            compl_pattern = vim_strnsave(line + compl_col, compl_length);
    46774769            if (compl_pattern == NULL)
    46784770#endif
  • src/eval.c

    diff -Naur vim70.orig/src/eval.c vim70/src/eval.c
    old new  
    82528252        EMSG(_("E785: complete() can only be used in Insert mode"));
    82538253        return;
    82548254    }
     8255
     8256    /* Check for undo allowed here, because if something was already inserted
     8257     * the line was already saved for undo and this check isn't done. */
     8258    if (!undo_allowed())
     8259        return;
     8260
    82558261    if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL)
    82568262    {
    82578263        EMSG(_(e_invarg));
     
    97929798    varnumber_T         n;
    97939799    int                 error = FALSE;
    97949800
     9801    /* Position the cursor.  Needed after a message that ends in a space. */
     9802    windgoto(msg_row, msg_col);
     9803
    97959804    ++no_mapping;
    97969805    ++allow_keys;
    97979806    if (argvars[0].v_type == VAR_UNKNOWN)
     
    1131211321
    1131311322static int inputsecret_flag = 0;
    1131411323
     11324static void get_user_input __ARGS((typval_T *argvars, typval_T *rettv, int inputdialog));
     11325
    1131511326/*
    11316  * "input()" function
    11317  *     Also handles inputsecret() when inputsecret is set.
     11327 * This function is used by f_input() and f_inputdialog() functions. The third
     11328 * argument to f_input() specifies the type of completion to use at the
     11329 * prompt. The third argument to f_inputdialog() specifies the value to return
     11330 * when the user cancels the prompt.
    1131811331 */
    1131911332    static void
    11320 f_input(argvars, rettv)
     11333get_user_input(argvars, rettv, inputdialog)
    1132111334    typval_T    *argvars;
    1132211335    typval_T    *rettv;
     11336    int         inputdialog;
    1132311337{
    1132411338    char_u      *prompt = get_tv_string_chk(&argvars[0]);
    1132511339    char_u      *p = NULL;
     
    1136911383            if (defstr != NULL)
    1137011384                stuffReadbuffSpec(defstr);
    1137111385
    11372             if (argvars[2].v_type != VAR_UNKNOWN)
     11386            if (!inputdialog && argvars[2].v_type != VAR_UNKNOWN)
    1137311387            {
    1137411388                char_u  *xp_name;
    11375                 int             xp_namelen;
     11389                int     xp_namelen;
    1137611390                long    argt;
    1137711391
    1137811392                rettv->vval.v_string = NULL;
     
    1140411418}
    1140511419
    1140611420/*
     11421 * "input()" function
     11422 *     Also handles inputsecret() when inputsecret is set.
     11423 */
     11424    static void
     11425f_input(argvars, rettv)
     11426    typval_T    *argvars;
     11427    typval_T    *rettv;
     11428{
     11429    get_user_input(argvars, rettv, FALSE);
     11430}
     11431
     11432/*
    1140711433 * "inputdialog()" function
    1140811434 */
    1140911435    static void
     
    1144311469    }
    1144411470    else
    1144511471#endif
    11446         f_input(argvars, rettv);
     11472        get_user_input(argvars, rettv, TRUE);
    1144711473}
    1144811474
    1144911475/*
     
    1147111497    }
    1147211498
    1147311499    msg_start();
     11500    msg_row = Rows - 1; /* for when 'cmdheight' > 1 */
    1147411501    lines_left = Rows;  /* avoid more prompt */
    1147511502    msg_scroll = TRUE;
    1147611503    msg_clr_eos();
     
    1325013277        if (argvars[2].v_type != VAR_UNKNOWN)
    1325113278            EMSG2(_(e_toomanyarg), "remove()");
    1325213279        else if ((d = argvars[0].vval.v_dict) != NULL
    13253                 && !tv_check_lock(d->dv_lock, (char_u *)"remove()"))
     13280                && !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
    1325413281        {
    1325513282            key = get_tv_string_chk(&argvars[1]);
    1325613283            if (key != NULL)
     
    1327013297    else if (argvars[0].v_type != VAR_LIST)
    1327113298        EMSG2(_(e_listdictarg), "remove()");
    1327213299    else if ((l = argvars[0].vval.v_list) != NULL
    13273             && !tv_check_lock(l->lv_lock, (char_u *)"remove()"))
     13300            && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
    1327413301    {
    1327513302        int         error = FALSE;
    1327613303
     
    1643816465    long        i = 0;
    1643916466    long        n;
    1644016467
    16441     /* List must be: [fnum, lnum, col, coladd] */
    16442     if (arg->v_type != VAR_LIST || l == NULL
    16443                                       || l->lv_len != (fnump == NULL ? 3 : 4))
     16468    /* List must be: [fnum, lnum, col, coladd], where "fnum" is only there
     16469     * when "fnump" isn't NULL and "coladd" is optional. */
     16470    if (arg->v_type != VAR_LIST
     16471            || l == NULL
     16472            || l->lv_len < (fnump == NULL ? 2 : 3)
     16473            || l->lv_len > (fnump == NULL ? 3 : 4))
    1644416474        return FAIL;
    1644516475
    1644616476    if (fnump != NULL)
     
    1646616496#ifdef FEAT_VIRTUALEDIT
    1646716497    n = list_find_nr(l, i, NULL);
    1646816498    if (n < 0)
    16469         return FAIL;
    16470     posp->coladd = n;
     16499        posp->coladd = 0;
     16500    else
     16501        posp->coladd = n;
    1647116502#endif
    1647216503
    1647316504    return OK;
     
    1775917790    }
    1776017791    else                    /* add a new variable */
    1776117792    {
     17793        /* Can't add "v:" variable. */
     17794        if (ht == &vimvarht)
     17795        {
     17796            EMSG2(_(e_illvar), name);
     17797            return;
     17798        }
     17799
    1776217800        /* Make sure the variable name is valid. */
    1776317801        for (p = varname; *p != NUL; ++p)
    1776417802            if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
     
    1896319001    else if (lead > 0)
    1896419002    {
    1896519003        lead = 3;
    18966         if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
     19004        if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name))
     19005                                                       || eval_fname_sid(*pp))
    1896719006        {
    1896819007            /* It's "s:" or "<SID>" */
    1896919008            if (current_SID <= 0)
     
    1968519724    v->di_tv.vval.v_list = &fc.l_varlist;
    1968619725    vim_memset(&fc.l_varlist, 0, sizeof(list_T));
    1968719726    fc.l_varlist.lv_refcount = 99999;
     19727    fc.l_varlist.lv_lock = VAR_FIXED;
    1968819728
    1968919729    /*
    1969019730     * Set a:firstline to "firstline" and a:lastline to "lastline".
  • src/ex_cmds.h

    diff -Naur vim70.orig/src/ex_cmds.h vim70/src/ex_cmds.h
    old new  
    262262EX(CMD_comclear,        "comclear",     ex_comclear,
    263263                        TRLBAR|CMDWIN),
    264264EX(CMD_compiler,        "compiler",     ex_compiler,
    265                         BANG|TRLBAR|WORD1),
     265                        BANG|TRLBAR|WORD1|CMDWIN),
    266266EX(CMD_continue,        "continue",     ex_continue,
    267267                        TRLBAR|SBOXOK|CMDWIN),
    268268EX(CMD_confirm,         "confirm",      ex_wrongmodifier,
  • src/ex_docmd.c

    diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c
    old new  
    833833     * If requested, store and reset the global values controlling the
    834834     * exception handling (used when debugging).
    835835     */
    836     else if (flags & DOCMD_EXCRESET)
     836    if (flags & DOCMD_EXCRESET)
    837837        save_dbg_stuff(&debug_saved);
    838838
    839839    initial_trylevel = trylevel;
  • src/gui_at_fs.c

    diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c
    old new  
    18611861    XtPointer   pnew;
    18621862{
    18631863    SFDir       *dir;
    1864     int         nw;
     1864    int         nw = (int)(long)pnew;
    18651865
    18661866    dir = &(SFdirs[SFdirPtr + (int)(long)n]);
    18671867
    18681868#ifdef FEAT_GUI_NEXTAW
    1869     if ((int)(long)pnew < 0)
     1869    if (nw < 0)
    18701870    {
    1871         if ((int)(long)pnew > -SFvScrollHeight)
    1872             (int)(long)pnew = -1;
     1871        if (nw > -SFvScrollHeight)
     1872            nw = -1;
    18731873        else
    1874             (int)(long)pnew = -SFlistSize;
     1874            nw = -SFlistSize;
    18751875    }
    1876     else if ((int)(long)pnew > 0)
     1876    else if (nw > 0)
    18771877    {
    1878         if ((int)(long)pnew < SFvScrollHeight)
    1879             (int)(long)pnew = 1;
     1878        if (nw < SFvScrollHeight)
     1879            nw = 1;
    18801880        else
    1881             (int)(long)pnew = SFlistSize;
     1881            nw = SFlistSize;
    18821882    }
    18831883#endif
    1884     nw = dir->vOrigin + (int)(long)pnew;
     1884    nw += dir->vOrigin;
    18851885
    18861886    if (nw > dir->nEntries - SFlistSize)
    18871887        nw = dir->nEntries - SFlistSize;
     
    19411941    XtPointer   pnew;
    19421942{
    19431943    SFDir       *dir;
    1944     int         nw;
     1944    int         nw = (int)(long)pnew;
    19451945
    19461946    dir = &(SFdirs[SFdirPtr + (int)(long)n]);
    19471947
    19481948#ifdef FEAT_GUI_NEXTAW
    1949     if ((int)(long)pnew < 0)
     1949    if (nw < 0)
    19501950    {
    1951         if ((int)(long)pnew > -SFhScrollWidth)
    1952             (int)(long)pnew = -1;
     1951        if (nw > -SFhScrollWidth)
     1952            nw = -1;
    19531953        else
    1954             (int)(long)pnew = -SFcharsPerEntry;
     1954            nw = -SFcharsPerEntry;
    19551955    }
    1956     else if ((int)(long)pnew > 0)
     1956    else if (nw > 0)
    19571957    {
    1958         if ((int)(long)pnew < SFhScrollWidth)
    1959             (int)(long)pnew = 1;
     1958        if (nw < SFhScrollWidth)
     1959            nw = 1;
    19601960        else
    1961             (int)(long)pnew = SFcharsPerEntry;
     1961            nw = SFcharsPerEntry;
    19621962    }
    19631963#endif
    1964     nw = dir->hOrigin + (int)(long)pnew;
     1964    nw += dir->hOrigin;
    19651965
    19661966    if (nw > dir->nChars - SFcharsPerEntry)
    19671967        nw = dir->nChars - SFcharsPerEntry;
     
    20382038    XtPointer   client_data;
    20392039    XtPointer   pnew;
    20402040{
    2041     int         nw;
     2041    int         nw = (int)(long)pnew;
    20422042    float       f;
    20432043
    20442044#ifdef FEAT_GUI_NEXTAW
    2045     if ((int)(long)pnew < 0)
     2045    if (nw < 0)
    20462046    {
    2047         if ((int)(long)pnew > -SFpathScrollWidth)
    2048             (int)(long)pnew = -1;
     2047        if (nw > -SFpathScrollWidth)
     2048            nw = -1;
    20492049        else
    2050             (int)(long)pnew = -3;
     2050            nw = -3;
    20512051    }
    2052     else if ((int)(long)pnew > 0)
     2052    else if (nw > 0)
    20532053    {
    2054         if ((int)(long)pnew < SFpathScrollWidth)
    2055             (int)(long)pnew = 1;
     2054        if (nw < SFpathScrollWidth)
     2055            nw = 1;
    20562056        else
    2057             (int)(long)pnew = 3;
     2057            nw = 3;
    20582058    }
    20592059#endif
    2060     nw = SFdirPtr + (int)(long)pnew;
     2060    nw += SFdirPtr;
    20612061
    20622062    if (nw > SFdirEnd - 3)
    20632063        nw = SFdirEnd - 3;
  • src/gui.c

    diff -Naur vim70.orig/src/gui.c vim70/src/gui.c
    old new  
    45154515    int         y;
    45164516{
    45174517    win_T       *wp;
    4518     char_u      st[6];
     4518    char_u      st[8];
    45194519
    45204520    /* Ignore this while still starting up. */
    45214521    if (!gui.in_use || gui.starting)
     
    46034603    /* Don't move the mouse when it's left or right of the Vim window */
    46044604    if (x < 0 || x > Columns * gui.char_width)
    46054605        return;
     4606    if (y >= 0
    46064607# ifdef FEAT_WINDOWS
    4607     if (Y_2_ROW(y) >= tabline_height())
    4608 # else
    4609     if (y >= 0)
     4608            && Y_2_ROW(y) >= tabline_height()
    46104609# endif
     4610       )
    46114611        wp = xy2win(x, y);
    46124612    if (wp != curwin && wp != NULL)     /* If in other than current window */
    46134613    {
  • src/gui_xmebw.c

    diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c
    old new  
    4747#include "gui_xmebwp.h"
    4848
    4949/* Provide some missing wrappers, which are missed from the LessTif
    50  * implementation.
     50 * implementation.  Also missing in Motif 1.2 and earlier.
    5151 *
    5252 * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
    5353 * pixmap will not appear in it's caches properly. We cache the interresting
    5454 * values in XmEnhancedButtonPart instead ourself.
    5555 */
    56 #ifdef LESSTIF_VERSION
     56#if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
    5757# ifndef Lab_IsMenupane
    5858#  define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \
    5959                    Lab_MenuType(w) == (int)XmMENU_PULLDOWN)
     
    480480            || (eb->core.height <= 2 * eb->primitive.highlight_thickness))
    481481        return;
    482482
    483 #ifndef LESSTIF_VERSION
     483#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    484484    {
    485485        XmDisplay       dpy;
    486486
     
    641641    GC          tmp_gc = NULL;
    642642    Boolean     replaceGC = False;
    643643    Boolean     deadjusted = False;
    644 #ifndef LESSTIF_VERSION
     644#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    645645    XmDisplay   dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
    646646    Boolean     etched_in = dpy->display.enable_etched_in_menu;
    647647#else
     
    726726        if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up)
    727727                && _XmGetInDragMode((Widget) eb))
    728728        {
    729 #ifndef LESSTIF_VERSION
     729#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    730730            XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
    731731            Boolean etched_in = dpy->display.enable_etched_in_menu;
    732732#else
     
    810810
    811811    if (Lab_IsMenupane(eb))
    812812    {
    813 #ifndef LESSTIF_VERSION
     813#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    814814        XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
    815815        Boolean etched_in = dpy->display.enable_etched_in_menu;
    816816#else
     
    11501150Redisplay(Widget w, XEvent *event, Region region)
    11511151{
    11521152    XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) w;
    1153 #ifndef LESSTIF_VERSION
     1153#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    11541154    XmDisplay               dpy;
    11551155    XtEnum                  default_button_emphasis;
    11561156#endif
     
    11621162    if (!XtIsRealized((Widget)eb))
    11631163        return;
    11641164
    1165 #ifndef LESSTIF_VERSION
     1165#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    11661166    dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
    11671167    default_button_emphasis = dpy->display.default_button_emphasis;
    11681168#endif
     
    12411241    {
    12421242        int adjust = 0;
    12431243
    1244 #ifndef LESSTIF_VERSION
     1244#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    12451245        /*
    12461246         *  NOTE: PushButton has two types of shadows: primitive-shadow and
    12471247         *  default-button-shadow.  If pushbutton is in a menu only primitive
     
    12891289                          adjust, adjust, rectwidth, rectheight, borderwidth);
    12901290            }
    12911291
    1292 #ifndef LESSTIF_VERSION
     1292#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    12931293            switch (default_button_emphasis)
    12941294            {
    12951295                case XmINTERNAL_HIGHLIGHT:
     
    13651365                    default_button_shadow_thickness =
    13661366                               eb->pushbutton.default_button_shadow_thickness;
    13671367
    1368 #ifndef LESSTIF_VERSION
     1368#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    13691369                /*
    13701370                 * Compute location of bounding box to contain the
    13711371                 * defaultButtonShadow.
  • src/if_ruby.c

    diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c
    old new  
    643643
    644644static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
    645645{
    646     buf_T *savebuf = curbuf;
    647     char *line = STR2CSTR(str);
     646    char        *line = STR2CSTR(str);
     647#ifdef FEAT_AUTOCMD
     648    aco_save_T  aco;
     649#else
     650    buf_T       *save_curbuf = curbuf;
     651#endif
    648652
    649     if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
     653    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
     654    {
     655#ifdef FEAT_AUTOCMD
     656        /* set curwin/curbuf for "buf" and save some things */
     657        aucmd_prepbuf(&aco, buf);
     658#else
    650659        curbuf = buf;
     660        curwin->w_buffer = buf;
     661#endif
     662
    651663        if (u_savesub(n) == OK) {
    652664            ml_replace(n, (char_u *)line, TRUE);
    653665            changed();
     
    655667            syn_changed(n); /* recompute syntax hl. for this line */
    656668#endif
    657669        }
    658         curbuf = savebuf;
     670
     671#ifdef FEAT_AUTOCMD
     672        /* restore curwin/curbuf and a few other things */
     673        aucmd_restbuf(&aco);
     674        /* Careful: autocommands may have made "buf" invalid! */
     675#else
     676        curwin->w_buffer = save_curbuf;
     677        curbuf = save_curbuf;
     678#endif
    659679        update_curbuf(NOT_VALID);
    660680    }
    661     else {
     681    else
     682    {
    662683        rb_raise(rb_eIndexError, "index %d out of buffer", n);
    663684        return Qnil; /* For stop warning */
    664685    }
     
    676697
    677698static VALUE buffer_delete(VALUE self, VALUE num)
    678699{
    679     buf_T *buf = get_buf(self);
    680     buf_T *savebuf = curbuf;
    681     long n = NUM2LONG(num);
     700    buf_T       *buf = get_buf(self);
     701    long        n = NUM2LONG(num);
     702#ifdef FEAT_AUTOCMD
     703    aco_save_T  aco;
     704#else
     705    buf_T       *save_curbuf = curbuf;
     706#endif
    682707
    683     if (n > 0 && n <= buf->b_ml.ml_line_count) {
     708    if (n > 0 && n <= buf->b_ml.ml_line_count)
     709    {
     710#ifdef FEAT_AUTOCMD
     711        /* set curwin/curbuf for "buf" and save some things */
     712        aucmd_prepbuf(&aco, buf);
     713#else
    684714        curbuf = buf;
     715        curwin->w_buffer = buf;
     716#endif
     717
    685718        if (u_savedel(n, 1) == OK) {
    686719            ml_delete(n, 0);
    687720
     
    691724
    692725            changed();
    693726        }
    694         curbuf = savebuf;
     727
     728#ifdef FEAT_AUTOCMD
     729        /* restore curwin/curbuf and a few other things */
     730        aucmd_restbuf(&aco);
     731        /* Careful: autocommands may have made "buf" invalid! */
     732#else
     733        curwin->w_buffer = save_curbuf;
     734        curbuf = save_curbuf;
     735#endif
    695736        update_curbuf(NOT_VALID);
    696737    }
    697     else {
     738    else
     739    {
    698740        rb_raise(rb_eIndexError, "index %d out of buffer", n);
    699741    }
    700742    return Qnil;
     
    702744
    703745static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
    704746{
    705     buf_T *buf = get_buf(self);
    706     buf_T *savebuf = curbuf;
    707     char *line = STR2CSTR(str);
    708     long n = NUM2LONG(num);
     747    buf_T       *buf = get_buf(self);
     748    char        *line = STR2CSTR(str);
     749    long        n = NUM2LONG(num);
     750#ifdef FEAT_AUTOCMD
     751    aco_save_T  aco;
     752#else
     753    buf_T       *save_curbuf = curbuf;
     754#endif
    709755
    710     if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
     756    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
     757    {
     758#ifdef FEAT_AUTOCMD
     759        /* set curwin/curbuf for "buf" and save some things */
     760        aucmd_prepbuf(&aco, buf);
     761#else
    711762        curbuf = buf;
     763        curwin->w_buffer = buf;
     764#endif
     765
    712766        if (u_inssub(n + 1) == OK) {
    713767            ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
    714768
     
    718772
    719773            changed();
    720774        }
    721         curbuf = savebuf;
     775
     776#ifdef FEAT_AUTOCMD
     777        /* restore curwin/curbuf and a few other things */
     778        aucmd_restbuf(&aco);
     779        /* Careful: autocommands may have made "buf" invalid! */
     780#else
     781        curwin->w_buffer = save_curbuf;
     782        curbuf = save_curbuf;
     783#endif
    722784        update_curbuf(NOT_VALID);
    723785    }
    724786    else {
  • src/main.c

    diff -Naur vim70.orig/src/main.c vim70/src/main.c
    old new  
    564564     */
    565565    if (p_lpl)
    566566    {
     567# ifdef VMS     /* Somehow VMS doesn't handle the "**". */
     568        source_runtime((char_u *)"plugin/*.vim", TRUE);
     569# else
    567570        source_runtime((char_u *)"plugin/**/*.vim", TRUE);
     571# endif
    568572        TIME_MSG("loading plugins");
    569573    }
    570574#endif
  • src/Makefile

    diff -Naur vim70.orig/src/Makefile vim70/src/Makefile
    old new  
    21772177        cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
    21782178        if test -d $(RSRC_DIR); then \
    21792179                cd $(SHADOWDIR); \
     2180                ln -s ../infplist.xml .; \
    21802181                ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
    21812182        fi
    21822183        mkdir $(SHADOWDIR)/testdir
  • src/mbyte.c

    diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c
    old new  
    311311
    312312#define IDX_MACROMAN    57
    313313    {"macroman",        ENC_8BIT + ENC_MACROMAN, 0},    /* Mac OS */
    314 #define IDX_COUNT       58
     314#define IDX_DECMCS      58
     315    {"dec-mcs",         ENC_8BIT,               0},     /* DEC MCS */
     316#define IDX_HPROMAN8    59
     317    {"hp-roman8",       ENC_8BIT,               0},     /* HP Roman8 */
     318#define IDX_COUNT       60
    315319};
    316320
    317321/*
     
    386390    {"950",             IDX_BIG5},
    387391#endif
    388392    {"mac",             IDX_MACROMAN},
     393    {"mac-roman",       IDX_MACROMAN},
    389394    {NULL,              0}
    390395};
    391396
  • src/message.c

    diff -Naur vim70.orig/src/message.c vim70/src/message.c
    old new  
    41754175                        str_arg_l = 0;
    41764176                    else
    41774177                    {
    4178                         /* memchr on HP does not like n > 2^31  !!! */
    4179                         char *q = memchr(str_arg, '\0',
     4178                        /* Don't put the #if inside memchr(), it can be a
     4179                         * macro. */
    41804180#if SIZEOF_INT <= 2
    4181                                 precision
     4181                        char *q = memchr(str_arg, '\0', precision);
    41824182#else
    4183                                 precision <= (size_t)0x7fffffffL ? precision
    4184                                                        : (size_t)0x7fffffffL
     4183                        /* memchr on HP does not like n > 2^31  !!! */
     4184                        char *q = memchr(str_arg, '\0',
     4185                                  precision <= (size_t)0x7fffffffL ? precision
     4186                                                       : (size_t)0x7fffffffL);
    41854187#endif
    4186                                                        );
    41874188                        str_arg_l = (q == NULL) ? precision : q - str_arg;
    41884189                    }
    41894190                    break;
  • src/ops.c

    diff -Naur vim70.orig/src/ops.c vim70/src/ops.c
    old new  
    24132413        else
    24142414        {
    24152415            curwin->w_cursor = oap->end;
     2416            check_cursor_col();
    24162417
    24172418            /* Works just like an 'i'nsert on the next character. */
    24182419            if (!lineempty(curwin->w_cursor.lnum)
     
    34923493# endif
    34933494        if (flags & PUT_CURSEND)
    34943495        {
     3496            colnr_T len;
     3497
    34953498            curwin->w_cursor = curbuf->b_op_end;
    34963499            curwin->w_cursor.col++;
     3500
     3501            /* in Insert mode we might be after the NUL, correct for that */
     3502            len = (colnr_T)STRLEN(ml_get_curline());
     3503            if (curwin->w_cursor.col > len)
     3504                curwin->w_cursor.col = len;
    34973505        }
    34983506        else
    34993507            curwin->w_cursor.lnum = lnum;
  • src/option.c

    diff -Naur vim70.orig/src/option.c vim70/src/option.c
    old new  
    22942294                            {(char_u *)0L, (char_u *)0L}
    22952295#endif
    22962296                            },
    2297     {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
     2297    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
    22982298#ifdef FEAT_SPELL
    22992299                            (char_u *)&p_sps, PV_NONE,
    23002300                            {(char_u *)"best", (char_u *)0L}
     
    52275227            case PV_STL:        return &curwin->w_p_stl_flags;
    52285228#endif
    52295229#ifdef FEAT_EVAL
     5230# ifdef FEAT_FOLDING
    52305231            case PV_FDE:        return &curwin->w_p_fde_flags;
    52315232            case PV_FDT:        return &curwin->w_p_fdt_flags;
     5233# endif
    52325234# ifdef FEAT_BEVAL
    52335235            case PV_BEXPR:      return &curbuf->b_p_bexpr_flags;
    52345236# endif
    5235 #endif
    5236 #if defined(FEAT_EVAL)
    52375237# if defined(FEAT_CINDENT)
    52385238            case PV_INDE:       return &curbuf->b_p_inde_flags;
    52395239# endif
  • src/os_unix.c

    diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c
    old new  
    57575757    int         retval_int = 0;
    57585758    int         success = FALSE;
    57595759
    5760     /* Get a handle to the DLL module. */
     5760    /*
     5761     * Get a handle to the DLL module.
     5762     */
    57615763# if defined(USE_DLOPEN)
     5764    /* First clear any error, it's not cleared by the dlopen() call. */
     5765    (void)dlerror();
     5766
    57625767    hinstLib = dlopen((char *)libname, RTLD_LAZY
    57635768#  ifdef RTLD_LOCAL
    57645769            | RTLD_LOCAL
  • src/proto/undo.pro

    diff -Naur vim70.orig/src/proto/undo.pro vim70/src/proto/undo.pro
    old new  
    44extern int u_savesub __ARGS((linenr_T lnum));
    55extern int u_inssub __ARGS((linenr_T lnum));
    66extern int u_savedel __ARGS((linenr_T lnum, long nlines));
     7extern int undo_allowed __ARGS((void));
    78extern void u_undo __ARGS((int count));
    89extern void u_redo __ARGS((int count));
    910extern void undo_time __ARGS((long step, int sec, int absolute));
  • src/quickfix.c

    diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c
    old new  
    602602                else
    603603                    type = 0;
    604604                /*
    605                  * Extract error message data from matched line
     605                 * Extract error message data from matched line.
     606                 * We check for an actual submatch, because "\[" and "\]" in
     607                 * the 'errorformat' may cause the wrong submatch to be used.
    606608                 */
    607609                if ((i = (int)fmt_ptr->addr[0]) > 0)            /* %f */
    608610                {
    609                     int c = *regmatch.endp[i];
     611                    int c;
     612
     613                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     614                        continue;
    610615
    611616                    /* Expand ~/file and $HOME/file to full path. */
     617                    c = *regmatch.endp[i];
    612618                    *regmatch.endp[i] = NUL;
    613619                    expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
    614620                    *regmatch.endp[i] = c;
     
    618624                        continue;
    619625                }
    620626                if ((i = (int)fmt_ptr->addr[1]) > 0)            /* %n */
     627                {
     628                    if (regmatch.startp[i] == NULL)
     629                        continue;
    621630                    enr = (int)atol((char *)regmatch.startp[i]);
     631                }
    622632                if ((i = (int)fmt_ptr->addr[2]) > 0)            /* %l */
     633                {
     634                    if (regmatch.startp[i] == NULL)
     635                        continue;
    623636                    lnum = atol((char *)regmatch.startp[i]);
     637                }
    624638                if ((i = (int)fmt_ptr->addr[3]) > 0)            /* %c */
     639                {
     640                    if (regmatch.startp[i] == NULL)
     641                        continue;
    625642                    col = (int)atol((char *)regmatch.startp[i]);
     643                }
    626644                if ((i = (int)fmt_ptr->addr[4]) > 0)            /* %t */
     645                {
     646                    if (regmatch.startp[i] == NULL)
     647                        continue;
    627648                    type = *regmatch.startp[i];
     649                }
    628650                if (fmt_ptr->flags == '+' && !multiscan)        /* %+ */
    629651                    STRCPY(errmsg, IObuff);
    630652                else if ((i = (int)fmt_ptr->addr[5]) > 0)       /* %m */
    631653                {
     654                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     655                        continue;
    632656                    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
    633657                    vim_strncpy(errmsg, regmatch.startp[i], len);
    634658                }
    635659                if ((i = (int)fmt_ptr->addr[6]) > 0)            /* %r */
     660                {
     661                    if (regmatch.startp[i] == NULL)
     662                        continue;
    636663                    tail = regmatch.startp[i];
     664                }
    637665                if ((i = (int)fmt_ptr->addr[7]) > 0)            /* %p */
    638666                {
     667                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     668                        continue;
    639669                    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
    640670                    if (*((char_u *)regmatch.startp[i]) != TAB)
    641671                        use_viscol = TRUE;
    642672                }
    643673                if ((i = (int)fmt_ptr->addr[8]) > 0)            /* %v */
    644674                {
     675                    if (regmatch.startp[i] == NULL)
     676                        continue;
    645677                    col = (int)atol((char *)regmatch.startp[i]);
    646678                    use_viscol = TRUE;
    647679                }
    648680                if ((i = (int)fmt_ptr->addr[9]) > 0)            /* %s */
    649681                {
     682                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     683                        continue;
    650684                    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
    651685                    if (len > CMDBUFFSIZE - 5)
    652686                        len = CMDBUFFSIZE - 5;
  • src/screen.c

    diff -Naur vim70.orig/src/screen.c vim70/src/screen.c
    old new  
    26122612#ifdef FEAT_LINEBREAK
    26132613    int         need_showbreak = FALSE;
    26142614#endif
    2615 #if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS))
     2615#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
     2616        || defined(FEAT_SYN_HL) || defined(FEAT_DIFF)
    26162617# define LINE_ATTR
    26172618    int         line_attr = 0;          /* atrribute for the whole line */
    26182619#endif
     
    26262627    int         prev_c = 0;             /* previous Arabic character */
    26272628    int         prev_c1 = 0;            /* first composing char for prev_c */
    26282629#endif
    2629 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
     2630#if defined(LINE_ATTR)
    26302631    int         did_line_attr = 0;
    26312632#endif
    26322633
     
    41164117                    --ptr;          /* put it back at the NUL */
    41174118                }
    41184119#endif
    4119 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
     4120#if defined(LINE_ATTR)
    41204121                else if ((
    41214122# ifdef FEAT_DIFF
    4122                             diff_hlf != (hlf_T)0
    4123 #  ifdef LINE_ATTR
    4124                             ||
    4125 #  endif
     4123                            diff_hlf != (hlf_T)0 ||
    41264124# endif
    4127 # ifdef LINE_ATTR
    41284125                            line_attr != 0
    4129 # endif
    41304126                        ) && (
    41314127# ifdef FEAT_RIGHTLEFT
    41324128                            wp->w_p_rl ? (col >= 0) :
     
    42374233         * At end of the text line or just after the last character.
    42384234         */
    42394235        if (c == NUL
    4240 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
     4236#if defined(LINE_ATTR)
    42414237                || did_line_attr == 1
    42424238#endif
    42434239                )
     
    42584254                                || prevcol == (long)match_hl[0].startcol
    42594255                                || prevcol == (long)match_hl[1].startcol
    42604256                                || prevcol == (long)match_hl[2].startcol)
    4261 # if defined(FEAT_DIFF) || defined(LINE_ATTR)
     4257# if defined(LINE_ATTR)
    42624258                            && did_line_attr <= 1
    42634259# endif
    42644260                           )
     
    71337129        return;
    71347130    entered = TRUE;
    71357131
     7132    /*
     7133     * Note that the window sizes are updated before reallocating the arrays,
     7134     * thus we must not redraw here!
     7135     */
     7136    ++RedrawingDisabled;
     7137
    71367138    win_new_shellsize();    /* fit the windows in the new sized shell */
    71377139
    71387140    comp_col();         /* recompute columns for shown command and ruler */
     
    73677369#endif
    73687370
    73697371    entered = FALSE;
     7372    --RedrawingDisabled;
    73707373
    73717374#ifdef FEAT_AUTOCMD
    73727375    if (starting == 0)
  • src/spell.c

    diff -Naur vim70.orig/src/spell.c vim70/src/spell.c
    old new  
    21082108         * possible. */
    21092109        STRCPY(buf, line);
    21102110        if (lnum < wp->w_buffer->b_ml.ml_line_count)
    2111             spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN);
     2111            spell_cat_line(buf + STRLEN(buf),
     2112                          ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
    21122113
    21132114        p = buf + skip;
    21142115        endp = buf + len;
     
    1007010071
    1007110072        /* List the suggestions. */
    1007210073        msg_start();
     10074        msg_row = Rows - 1;     /* for when 'cmdheight' > 1 */
    1007310075        lines_left = Rows;      /* avoid more prompt */
    1007410076        vim_snprintf((char *)IObuff, IOSIZE, _("Change \"%.*s\" to:"),
    1007510077                                                sug.su_badlen, sug.su_badptr);
  • src/undo.c

    diff -Naur vim70.orig/src/undo.c vim70/src/undo.c
    old new  
    8484static void u_unch_branch __ARGS((u_header_T *uhp));
    8585static u_entry_T *u_get_headentry __ARGS((void));
    8686static void u_getbot __ARGS((void));
    87 static int undo_allowed __ARGS((void));
    8887static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T));
    8988static void u_doit __ARGS((int count));
    9089static void u_undoredo __ARGS((int undo));
     
    196195 * Return TRUE when undo is allowed.  Otherwise give an error message and
    197196 * return FALSE.
    198197 */
    199     static int
     198    int
    200199undo_allowed()
    201200{
    202201    /* Don't allow changes when 'modifiable' is off.  */
  • src/version.c

    diff -Naur vim70.orig/src/version.c vim70/src/version.c
    old new  
    667667static int included_patches[] =
    668668{   /* Add new patch number below this line */
    669669/**/
     670    42,
     671/**/
     672    41,
     673/**/
     674    40,
     675/**/
     676    39,
     677/**/
     678    38,
     679/**/
     680    37,
     681/**/
     682    36,
     683/**/
     684    35,
     685/**/
     686    34,
     687/**/
     688    33,
     689/**/
     690    31,
     691/**/
     692    30,
     693/**/
     694    29,
     695/**/
     696    26,
     697/**/
     698    25,
     699/**/
     700    24,
     701/**/
     702    23,
     703/**/
     704    22,
     705/**/
     706    21,
     707/**/
     708    20,
     709/**/
     710    19,
     711/**/
     712    18,
     713/**/
     714    17,
     715/**/
     716    16,
     717/**/
     718    15,
     719/**/
     720    14,
     721/**/
     722    13,
     723/**/
     724    12,
     725/**/
     726    11,
     727/**/
     728    10,
     729/**/
     730    9,
     731/**/
     732    8,
     733/**/
     734    7,
     735/**/
     736    6,
     737/**/
     738    4,
     739/**/
     740    3,
     741/**/
     742    2,
     743/**/
     744    1,
     745/**/
    670746    0
    671747};
    672748
  • src/vim.h

    diff -Naur vim70.orig/src/vim.h vim70/src/vim.h
    old new  
    585585#define INSERT          0x10    /* Insert mode */
    586586#define LANGMAP         0x20    /* Language mapping, can be combined with
    587587                                   INSERT and CMDLINE */
    588 #define MAP_ALL_MODES   0x3f    /* all mode bits used for mapping */
    589588
    590589#define REPLACE_FLAG    0x40    /* Replace mode flag */
    591590#define REPLACE         (REPLACE_FLAG + INSERT)
     
    605604#define CONFIRM         0x800   /* ":confirm" prompt */
    606605#define SELECTMODE      0x1000  /* Select mode, only for mappings */
    607606
     607#define MAP_ALL_MODES   (0x3f | SELECTMODE)     /* all mode bits used for
     608                                                 * mapping */
     609
    608610/* directions */
    609611#define FORWARD                 1
    610612#define BACKWARD                (-1)