Compare commits

...

21 Commits

Author SHA1 Message Date
Bram Moolenaar
868272f58e updated for version 7.3.302
Problem:    Test 19 fails without 'smartindent' and +eval.
Solution:   Don't use ":exe". Source small.vim.
2011-09-08 23:22:40 +02:00
Bram Moolenaar
c42e7ed777 updated for version 7.3.301
Problem:    When 'smartindent' and 'copyindent' are set a Tab is used even
            though 'expandtab' is set.
Solution:   Do not insert Tabs. Add a test. (Christian Brabandt)
2011-09-07 19:58:09 +02:00
Bram Moolenaar
275648066d updated for version 7.3.300
Problem:    Python doesn't parse multi-byte argument correctly.
Solution:   Use "t" instead of "s". (lilydjwg)
2011-09-07 19:30:21 +02:00
Bram Moolenaar
0d55ff1594 updated for version 7.3.299
Problem:    Source code not in Vim style.
Solution:   Adjust the style. (Elias Diem)
2011-09-07 19:09:01 +02:00
Bram Moolenaar
092e3c874f updated for version 7.3.298
Problem:    Built-in colors are different from rgb.txt.
Solution:   Adjust the color values. (Benjamin Haskell)
2011-09-07 18:58:29 +02:00
Bram Moolenaar
6dfff547a7 updated for version 7.3.297
Problem:    Can't load Perl 5.14 dynamically.
Solution:   Add code in #ifdefs. (Charles Cooper)
2011-09-07 18:47:23 +02:00
Bram Moolenaar
205b886a41 updated for version 7.3.296
Problem:    When writing to an external command a zombie process may be left
            behind.
Solution:   Wait on the process. (James Vega)
2011-09-07 15:04:31 +02:00
Bram Moolenaar
493c7a8541 updated for version 7.3.295
Problem:    When filtering text with an external command Vim may not read all
            the output.
Solution:   When select() is interrupted loop and try again. (James Vega)
2011-09-07 14:06:47 +02:00
Bram Moolenaar
01a78342e0 updated for version 7.3.294
Problem:    Patch 289 causes more problems than it solves.
Solution:   Rever the patch untill a better solution is found.
2011-09-05 20:13:42 +02:00
Bram Moolenaar
d3184b57d2 updated for version 7.3.293
Problem:    MSVC compiler has a problem with non-ASCII characters.
Solution:   Avoid non-ASCII characters. (Hong Xu)
2011-09-02 14:18:20 +02:00
Bram Moolenaar
6c167c6451 updated for version 7.3.292
Problem:    Crash when using fold markers and selecting a visual block that
            includes a folded line and goes to end of line. (Sam Lidder)
Solution:   Check for the column to be MAXCOL. (James Vega)
2011-09-02 14:07:36 +02:00
Bram Moolenaar
6fabcbe260 updated for version 7.3.291
Problem:    Configure doesn't work properly with Python3.
Solution:   Put -ldl before $LDFLAGS. Add PY3_NO_RTLD_GLOBAL. (Roland
            Puntaier)
2011-09-02 12:27:25 +02:00
Bram Moolenaar
39fc42ef9d updated for version 7.3.290
Problem:    When a BufWriteCmd autocommand resets 'modified' this doesn't
            change older buffer states to be marked as 'modified' like
            ":write" does.  (Yukihiro Nakadaira)
Solution:   When the BufWriteCmd resets 'modified' then adjust the undo
            information like ":write" does.
2011-09-02 11:56:20 +02:00
Bram Moolenaar
03aa60826e updated for version 7.3.289
Problem:    Complete function isn't called when the leader changed.
Solution:   Call ins_compl_restart() when the leader changed.  (Taro Muraoka)
2011-08-28 16:02:28 +02:00
Bram Moolenaar
9dc93ae43e updated for version 7.3.288
Problem:    has('python') may give an error message for not being able to load
            the library after using python3.
Solution:   Only give the error when the verbose argument is true.
2011-08-28 16:00:19 +02:00
Bram Moolenaar
2eba18255e updated for version 7.3.287
Problem:    Can't compile with MSVC and tiny options.
Solution:   Move variables and #ifdefs. (Sergey Khorev)
2011-08-27 15:10:04 +02:00
Bram Moolenaar
c9927c136f updated for version 7.3.286
Problem:    Crash when using "zd" on a large number of folds. (Sam King)
Solution:   Recompute pointer after reallocating array.  Move fewer entries
            when making room.
2011-08-26 16:13:00 +02:00
Bram Moolenaar
792826c0c7 updated for version 7.3.285
Problem:    Mapping <Char-123> no longer works.
Solution:   Properly check for "char-".  Add a test for it.
2011-08-19 22:29:02 +02:00
Bram Moolenaar
b8bf541f89 updated for version 7.3.284
Problem:    The str2special() function doesn't handle multi-byte characters
            properly.
Solution:   Recognize multi-byte characters. (partly by Vladimir Vichniakov)
2011-08-17 20:33:22 +02:00
Bram Moolenaar
f6f4a01ab1 updated for version 7.3.283
Problem:    An expression mapping with a multi-byte character containing a
            0x80 byte gets messed up. (ZyX)
Solution:   Unescape the expression before evaluating it (Yukihiro Nakadaira)
2011-08-17 17:18:20 +02:00
Bram Moolenaar
1db1f77d4a updated for version 7.3.282
Problem:    When using input() and :echo in a loop the displayed text is
            incorrect. (Benjamin Fritz)
Solution:   Only restore the cursor position when there is a command line.
            (Ben Schmidt)
2011-08-17 16:25:48 +02:00
26 changed files with 363 additions and 167 deletions

View File

@@ -123,7 +123,7 @@
#define DCS 0x90 /* Device Control String */
#define STERM 0x9c /* String Terminator */
#define POUND '£'
#define POUND '\xA3'
#define CTRL_F_STR "\056"
#define CTRL_H_STR "\026"

4
src/auto/configure vendored
View File

@@ -5733,7 +5733,7 @@ $as_echo_n "checking whether we can do without RTLD_GLOBAL for Python... " >&6;
cflags_save=$CFLAGS
CFLAGS="$CFLAGS $PYTHON_CFLAGS"
ldflags_save=$LDFLAGS
LDFLAGS="$LDFLAGS -ldl"
LDFLAGS="-ldl $LDFLAGS"
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -5798,7 +5798,7 @@ $as_echo_n "checking whether we can do without RTLD_GLOBAL for Python3... " >&6;
cflags_save=$CFLAGS
CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
ldflags_save=$LDFLAGS
LDFLAGS="$LDFLAGS -ldl"
LDFLAGS="-ldl $LDFLAGS"
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}

View File

@@ -346,6 +346,9 @@
/* Define if dynamic python does not require RTLD_GLOBAL */
#undef PY_NO_RTLD_GLOBAL
/* Define if dynamic python3 does not require RTLD_GLOBAL */
#undef PY3_NO_RTLD_GLOBAL
/* Define if you want to include the Ruby interpreter. */
#undef FEAT_RUBY

View File

@@ -1161,7 +1161,8 @@ if test "$python_ok" = yes && test "$python3_ok" = yes; then
cflags_save=$CFLAGS
CFLAGS="$CFLAGS $PYTHON_CFLAGS"
ldflags_save=$LDFLAGS
LDFLAGS="$LDFLAGS -ldl"
dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
LDFLAGS="-ldl $LDFLAGS"
AC_RUN_IFELSE([
#include <dlfcn.h>
/* If this program fails, then RTLD_GLOBAL is needed.
@@ -1205,7 +1206,8 @@ if test "$python_ok" = yes && test "$python3_ok" = yes; then
cflags_save=$CFLAGS
CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
ldflags_save=$LDFLAGS
LDFLAGS="$LDFLAGS -ldl"
dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
LDFLAGS="-ldl $LDFLAGS"
AC_RUN_IFELSE([
#include <dlfcn.h>
#include <wchar.h>

View File

@@ -1969,8 +1969,12 @@ getcmdline_prompt(firstc, prompt, attr, xp_context, xp_arg)
# endif
s = getcmdline(firstc, 1L, 0);
restore_cmdline(&save_ccline);
/* Restore msg_col, the prompt from input() may have changed it. */
msg_col = msg_col_save;
/* Restore msg_col, the prompt from input() may have changed it.
* But only if called recursively and the commandline is therefore being
* restored to an old one; if not, the input() prompt stays on the screen,
* so we need its modified msg_col left intact. */
if (ccline.cmdbuff != NULL)
msg_col = msg_col_save;
return s;
}

View File

@@ -3342,8 +3342,22 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
}
else if (reset_changed && whole)
{
if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
sfname, sfname, FALSE, curbuf, eap)))
int was_changed = curbufIsChanged();
did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
sfname, sfname, FALSE, curbuf, eap);
if (did_cmd)
{
if (was_changed && !curbufIsChanged())
{
/* Written everything correctly and BufWriteCmd has reset
* 'modified': Correct the undo information so that an
* undo now sets 'modified'. */
u_unchanged(curbuf);
u_update_save_nr(curbuf);
}
}
else
{
#ifdef FEAT_QUICKFIX
if (overwriting && bt_nofile(curbuf))

View File

@@ -1469,11 +1469,14 @@ deleteFoldEntry(gap, idx, recursive)
}
else
{
/* move nested folds one level up, to overwrite the fold that is
/* Move nested folds one level up, to overwrite the fold that is
* deleted. */
moved = fp->fd_nested.ga_len;
if (ga_grow(gap, (int)(moved - 1)) == OK)
{
/* Get "fp" again, the array may have been reallocated. */
fp = (fold_T *)gap->ga_data + idx;
/* adjust fd_top and fd_flags for the moved folds */
nfp = (fold_T *)fp->fd_nested.ga_data;
for (i = 0; i < moved; ++i)
@@ -1486,9 +1489,9 @@ deleteFoldEntry(gap, idx, recursive)
}
/* move the existing folds down to make room */
if (idx < gap->ga_len)
if (idx + 1 < gap->ga_len)
mch_memmove(fp + moved, fp + 1,
sizeof(fold_T) * (gap->ga_len - idx));
sizeof(fold_T) * (gap->ga_len - (idx + 1)));
/* move the contained folds one level up */
mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
vim_free(nfp);

View File

@@ -3262,9 +3262,9 @@ do_map(maptype, arg, mode, abbrev)
validate_maphash();
/*
* find end of keys and skip CTRL-Vs (and backslashes) in it
* Find end of keys and skip CTRL-Vs (and backslashes) in it.
* Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
* with :unmap white space is included in the keys, no argument possible
* with :unmap white space is included in the keys, no argument possible.
*/
p = keys;
do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
@@ -3964,7 +3964,17 @@ showmap(mp, local)
if (*mp->m_str == NUL)
msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
else
msg_outtrans_special(mp->m_str, FALSE);
{
/* Remove escaping of CSI, because "m_str" is in a format to be used
* as typeahead. */
char_u *s = vim_strsave(mp->m_str);
if (s != NULL)
{
vim_unescape_csi(s);
msg_outtrans_special(s, FALSE);
vim_free(s);
}
}
#ifdef FEAT_EVAL
if (p_verbose > 0)
last_set_msg(mp->m_script_ID);
@@ -4506,12 +4516,23 @@ eval_map_expr(str, c)
{
char_u *res;
char_u *p;
char_u *expr;
char_u *save_cmd;
pos_T save_cursor;
/* Remove escaping of CSI, because "str" is in a format to be used as
* typeahead. */
expr = vim_strsave(str);
if (expr == NULL)
return NULL;
vim_unescape_csi(expr);
save_cmd = save_cmdline_alloc();
if (save_cmd == NULL)
{
vim_free(expr);
return NULL;
}
/* Forbid changing text or using ":normal" to avoid most of the bad side
* effects. Also restore the cursor position. */
@@ -4521,7 +4542,7 @@ eval_map_expr(str, c)
#endif
set_vim_var_char(c); /* set v:char to the typed character */
save_cursor = curwin->w_cursor;
p = eval_to_string(str, NULL, FALSE);
p = eval_to_string(expr, NULL, FALSE);
--textlock;
#ifdef FEAT_EX_EXTRA
--ex_normal_lock;
@@ -4529,8 +4550,11 @@ eval_map_expr(str, c)
curwin->w_cursor = save_cursor;
restore_cmdline_alloc(save_cmd);
vim_free(expr);
if (p == NULL)
return NULL;
/* Escape CSI in the result to be able to use the string as typeahead. */
res = vim_strsave_escape_csi(p);
vim_free(p);

View File

@@ -535,13 +535,13 @@ gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
&src_taken,
buf,
6,
&dst_made );
&dst_made);
add_to_input_buf( buf, dst_made );
add_to_input_buf(buf, dst_made);
}
else
{
add_to_input_buf( string, len );
add_to_input_buf(string, len);
}
return Pt_CONSUME;
@@ -549,31 +549,31 @@ gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
len = 0;
#endif
ch = key->key_cap;
if( ch < 0xff )
if (ch < 0xff)
{
/* FIXME: is this the right thing to do? */
if( modifiers & MOD_MASK_CTRL )
if (modifiers & MOD_MASK_CTRL)
{
modifiers &= ~MOD_MASK_CTRL;
if( ( ch >= 'a' && ch <= 'z' ) ||
if ((ch >= 'a' && ch <= 'z') ||
ch == '[' ||
ch == ']' ||
ch == '\\' )
ch = Ctrl_chr( ch );
else if( ch == '2' )
ch == '\\')
ch = Ctrl_chr(ch);
else if (ch == '2')
ch = NUL;
else if( ch == '6' )
else if (ch == '6')
ch = 0x1e;
else if( ch == '-' )
else if (ch == '-')
ch = 0x1f;
else
modifiers |= MOD_MASK_CTRL;
}
if( modifiers & MOD_MASK_ALT )
if (modifiers & MOD_MASK_ALT)
{
ch = Meta( ch );
ch = Meta(ch);
modifiers &= ~MOD_MASK_ALT;
}
}
@@ -586,19 +586,19 @@ gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
modifiers &= ~MOD_MASK_SHIFT;
}
ch = simplify_key( ch, &modifiers );
if( modifiers )
ch = simplify_key(ch, &modifiers);
if (modifiers)
{
string[ len++ ] = CSI;
string[ len++ ] = KS_MODIFIER;
string[ len++ ] = modifiers;
}
if( IS_SPECIAL( ch ) )
if (IS_SPECIAL(ch))
{
string[ len++ ] = CSI;
string[ len++ ] = K_SECOND( ch );
string[ len++ ] = K_THIRD( ch );
string[ len++ ] = K_SECOND(ch);
string[ len++ ] = K_THIRD(ch);
}
else
{
@@ -619,9 +619,9 @@ gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
string[ len++ ] = KE_CSI;
}
if( len > 0 )
if (len > 0)
{
add_to_input_buf( string, len );
add_to_input_buf(string, len);
return Pt_CONSUME;
}
}
@@ -630,17 +630,17 @@ gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
}
static int
gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
{
PhPointerEvent_t *pointer;
PhRect_t *pos;
int button = 0, repeated_click, modifiers = 0x0;
short mouse_x, mouse_y;
pointer = PhGetData( info->event );
pos = PhGetRects( info->event );
pointer = PhGetData(info->event);
pos = PhGetRects(info->event);
gui_mch_mousehide( MOUSE_SHOW );
gui_mch_mousehide(MOUSE_SHOW);
/*
* Coordinates need to be relative to the base window,
@@ -649,27 +649,27 @@ gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
mouse_x = pos->ul.x + gui.border_width;
mouse_y = pos->ul.y + gui.border_width;
if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
{
gui_mouse_moved( mouse_x, mouse_y );
gui_mouse_moved(mouse_x, mouse_y);
return Pt_CONTINUE;
}
if( pointer->key_mods & Pk_KM_Shift )
if (pointer->key_mods & Pk_KM_Shift)
modifiers |= MOUSE_SHIFT;
if( pointer->key_mods & Pk_KM_Ctrl )
if (pointer->key_mods & Pk_KM_Ctrl)
modifiers |= MOUSE_CTRL;
if( pointer->key_mods & Pk_KM_Alt )
if (pointer->key_mods & Pk_KM_Alt)
modifiers |= MOUSE_ALT;
/*
* FIXME More than one button may be involved, but for
* now just deal with one
*/
if( pointer->buttons & Ph_BUTTON_SELECT )
if (pointer->buttons & Ph_BUTTON_SELECT)
button = MOUSE_LEFT;
if( pointer->buttons & Ph_BUTTON_MENU )
if (pointer->buttons & Ph_BUTTON_MENU)
{
button = MOUSE_RIGHT;
/* Need the absolute coordinates for the popup menu */
@@ -677,29 +677,29 @@ gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
abs_mouse.y = pointer->pos.y;
}
if( pointer->buttons & Ph_BUTTON_ADJUST )
if (pointer->buttons & Ph_BUTTON_ADJUST)
button = MOUSE_MIDDLE;
/* Catch a real release (not phantom or other releases */
if( info->event->type == Ph_EV_BUT_RELEASE )
if (info->event->type == Ph_EV_BUT_RELEASE)
button = MOUSE_RELEASE;
if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
button = MOUSE_DRAG;
#if 0
/* Vim doesn't use button repeats */
if( info->event->type & Ph_EV_BUT_REPEAT )
if (info->event->type & Ph_EV_BUT_REPEAT)
button = MOUSE_DRAG;
#endif
/* Don't do anything if it is one of the phantom mouse release events */
if( ( button != MOUSE_RELEASE ) ||
( info->event->subtype == Ph_EV_RELEASE_REAL ) )
if ((button != MOUSE_RELEASE) ||
(info->event->subtype == Ph_EV_RELEASE_REAL))
{
repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
}
return Pt_CONTINUE;
@@ -707,35 +707,35 @@ gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
/* Handle a focus change of the PtRaw widget */
static int
gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
{
if( info->reason == Pt_CB_LOST_FOCUS )
if (info->reason == Pt_CB_LOST_FOCUS)
{
PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
gui_ph_handle_mouse, NULL );
PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
gui_ph_handle_mouse, NULL);
gui_mch_mousehide( MOUSE_SHOW );
gui_mch_mousehide(MOUSE_SHOW);
}
else
{
PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
gui_ph_handle_mouse, NULL );
PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
gui_ph_handle_mouse, NULL);
}
return Pt_CONTINUE;
}
static void
gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
{
PhRect_t *r;
PhPoint_t offset;
PhPoint_t translation;
if( is_ignore_draw == TRUE )
if (is_ignore_draw == TRUE)
return;
PtSuperClassDraw( PtBasic, widget, damage );
PgGetTranslation( &translation );
PtSuperClassDraw(PtBasic, widget, damage);
PgGetTranslation(&translation);
PgClearTranslation();
#if 0
@@ -750,21 +750,21 @@ gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
out_flush();
#endif
PtWidgetOffset( widget, &offset );
PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
PtWidgetOffset(widget, &offset);
PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
#if 1
/* Redraw individual damage regions */
if( damage->next != NULL )
if (damage->next != NULL)
damage = damage->next;
while( damage != NULL )
while(damage != NULL)
{
r = &damage->rect;
gui_redraw(
r->ul.x - offset.x, r->ul.y - offset.y,
r->lr.x - r->ul.x + 1,
r->lr.y - r->ul.y + 1 );
r->lr.y - r->ul.y + 1);
damage = damage->next;
}
#else
@@ -773,24 +773,24 @@ gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
gui_redraw(
r->ul.x - offset.x, r->ul.y - offset.y,
r->lr.x - r->ul.x + 1,
r->lr.y - r->ul.y + 1 );
r->lr.y - r->ul.y + 1);
#endif
PgSetTranslation( &translation, 0 );
PgSetTranslation(&translation, 0);
}
static int
gui_ph_handle_pulldown_menu(
PtWidget_t *widget,
void *data,
PtCallbackInfo_t *info )
PtCallbackInfo_t *info)
{
if( data != NULL )
if (data != NULL)
{
vimmenu_T *menu = (vimmenu_T *) data;
PtPositionMenu( menu->submenu_id, NULL );
PtRealizeWidget( menu->submenu_id );
PtPositionMenu(menu->submenu_id, NULL);
PtRealizeWidget(menu->submenu_id);
}
return Pt_CONTINUE;
@@ -2007,8 +2007,8 @@ gui_mch_get_color(char_u *name)
static GuiColourTable table[] =
{
{"Black", RGB(0x00, 0x00, 0x00)},
{"DarkGray", RGB(0x80, 0x80, 0x80)},
{"DarkGrey", RGB(0x80, 0x80, 0x80)},
{"DarkGray", RGB(0xA9, 0xA9, 0xA9)},
{"DarkGrey", RGB(0xA9, 0xA9, 0xA9)},
{"Gray", RGB(0xC0, 0xC0, 0xC0)},
{"Grey", RGB(0xC0, 0xC0, 0xC0)},
{"LightGray", RGB(0xD3, 0xD3, 0xD3)},
@@ -2037,19 +2037,19 @@ gui_mch_get_color(char_u *name)
{"LightRed", RGB(0xFF, 0xA0, 0xA0)},
{"DarkBlue", RGB(0x00, 0x00, 0x80)},
{"Blue", RGB(0x00, 0x00, 0xFF)},
{"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
{"LightBlue", RGB(0xAD, 0xD8, 0xE6)},
{"DarkGreen", RGB(0x00, 0x80, 0x00)},
{"Green", RGB(0x00, 0xFF, 0x00)},
{"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
{"LightGreen", RGB(0x90, 0xEE, 0x90)},
{"DarkCyan", RGB(0x00, 0x80, 0x80)},
{"Cyan", RGB(0x00, 0xFF, 0xFF)},
{"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
{"LightCyan", RGB(0xE0, 0xFF, 0xFF)},
{"DarkMagenta", RGB(0x80, 0x00, 0x80)},
{"Magenta", RGB(0xFF, 0x00, 0xFF)},
{"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
{"Brown", RGB(0x80, 0x40, 0x40)},
{"Yellow", RGB(0xFF, 0xFF, 0x00)},
{"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
{"LightYellow", RGB(0xFF, 0xFF, 0xE0)},
{"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
{"Orange", RGB(0xFF, 0xA5, 0x00)},
{"Purple", RGB(0xA0, 0x20, 0xF0)},

View File

@@ -1411,12 +1411,12 @@ gui_mch_get_color(char_u *name)
static guicolor_tTable table[] =
{
{"Black", RGB(0x00, 0x00, 0x00)},
{"DarkGray", RGB(0x80, 0x80, 0x80)},
{"DarkGrey", RGB(0x80, 0x80, 0x80)},
{"DarkGray", RGB(0xA9, 0xA9, 0xA9)},
{"DarkGrey", RGB(0xA9, 0xA9, 0xA9)},
{"Gray", RGB(0xC0, 0xC0, 0xC0)},
{"Grey", RGB(0xC0, 0xC0, 0xC0)},
{"LightGray", RGB(0xE0, 0xE0, 0xE0)},
{"LightGrey", RGB(0xE0, 0xE0, 0xE0)},
{"LightGray", RGB(0xD3, 0xD3, 0xD3)},
{"LightGrey", RGB(0xD3, 0xD3, 0xD3)},
{"Gray10", RGB(0x1A, 0x1A, 0x1A)},
{"Grey10", RGB(0x1A, 0x1A, 0x1A)},
{"Gray20", RGB(0x33, 0x33, 0x33)},
@@ -1441,19 +1441,19 @@ gui_mch_get_color(char_u *name)
{"LightRed", RGB(0xFF, 0xA0, 0xA0)},
{"DarkBlue", RGB(0x00, 0x00, 0x80)},
{"Blue", RGB(0x00, 0x00, 0xFF)},
{"LightBlue", RGB(0xA0, 0xA0, 0xFF)},
{"LightBlue", RGB(0xAD, 0xD8, 0xE6)},
{"DarkGreen", RGB(0x00, 0x80, 0x00)},
{"Green", RGB(0x00, 0xFF, 0x00)},
{"LightGreen", RGB(0xA0, 0xFF, 0xA0)},
{"LightGreen", RGB(0x90, 0xEE, 0x90)},
{"DarkCyan", RGB(0x00, 0x80, 0x80)},
{"Cyan", RGB(0x00, 0xFF, 0xFF)},
{"LightCyan", RGB(0xA0, 0xFF, 0xFF)},
{"LightCyan", RGB(0xE0, 0xFF, 0xFF)},
{"DarkMagenta", RGB(0x80, 0x00, 0x80)},
{"Magenta", RGB(0xFF, 0x00, 0xFF)},
{"LightMagenta", RGB(0xFF, 0xA0, 0xFF)},
{"Brown", RGB(0x80, 0x40, 0x40)},
{"Yellow", RGB(0xFF, 0xFF, 0x00)},
{"LightYellow", RGB(0xFF, 0xFF, 0xA0)},
{"LightYellow", RGB(0xFF, 0xFF, 0xE0)},
{"DarkYellow", RGB(0xBB, 0xBB, 0x00)},
{"SeaGreen", RGB(0x2E, 0x8B, 0x57)},
{"Orange", RGB(0xFF, 0xA5, 0x00)},

View File

@@ -147,7 +147,12 @@ typedef int perl_key;
# define Perl_save_int dll_Perl_save_int
# define Perl_stack_grow dll_Perl_stack_grow
# define Perl_set_context dll_Perl_set_context
# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
# define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
# else
# define Perl_sv_2bool dll_Perl_sv_2bool
# endif
# define Perl_sv_2iv dll_Perl_sv_2iv
# define Perl_sv_2mortal dll_Perl_sv_2mortal
# if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -252,7 +257,12 @@ static void (*Perl_push_scope)(pTHX);
static void (*Perl_save_int)(pTHX_ int*);
static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
static SV** (*Perl_set_context)(void*);
#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
#else
static bool (*Perl_sv_2bool)(pTHX_ SV*);
#endif
static IV (*Perl_sv_2iv)(pTHX_ SV*);
static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
#if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -360,7 +370,12 @@ static struct {
{"Perl_save_int", (PERL_PROC*)&Perl_save_int},
{"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
{"Perl_set_context", (PERL_PROC*)&Perl_set_context},
#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
{"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
{"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
#else
{"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
#endif
{"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
{"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
#if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -407,6 +422,9 @@ static struct {
{"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
{"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
{"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
{"Perl_call_list", (PERL_PROC*)&Perl_call_list},
# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
# else
{"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
{"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
{"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
@@ -418,15 +436,18 @@ static struct {
{"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
{"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
{"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
{"Perl_call_list", (PERL_PROC*)&Perl_call_list},
{"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
{"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
# endif
#endif
#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
#else
{"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
{"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
{"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
{"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
{"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
#endif
{"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
{"", NULL},
};

View File

@@ -74,7 +74,7 @@ OutputWrite(PyObject *self, PyObject *args)
char *str = NULL;
int error = ((OutputObject *)(self))->error;
if (!PyArg_ParseTuple(args, "es#", ENC_OPT, &str, &len))
if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
return NULL;
Py_BEGIN_ALLOW_THREADS
@@ -114,7 +114,7 @@ OutputWritelines(PyObject *self, PyObject *args)
char *str = NULL;
PyInt len;
if (!PyArg_Parse(line, "es#", ENC_OPT, &str, &len)) {
if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len)) {
PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
Py_DECREF(list);
return NULL;

View File

@@ -368,7 +368,8 @@ python_runtime_link_init(char *libname, int verbose)
* standard C extension libraries of one or both python versions. */
if (python3_loaded())
{
EMSG(_("E836: This Vim cannot execute :python after using :py3"));
if (verbose)
EMSG(_("E836: This Vim cannot execute :python after using :py3"));
return FAIL;
}
#endif

View File

@@ -367,7 +367,8 @@ py3_runtime_link_init(char *libname, int verbose)
* standard C extension libraries of one or both python versions. */
if (python_loaded())
{
EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
if (verbose)
EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
return FAIL;
}
# endif

View File

@@ -1547,16 +1547,27 @@ str2special(sp, from)
if (IS_SPECIAL(c) || modifiers) /* special key */
special = TRUE;
}
*sp = str + 1;
#ifdef FEAT_MBYTE
/* For multi-byte characters check for an illegal byte. */
if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
if (has_mbyte && !IS_SPECIAL(c))
{
transchar_nonprint(buf, c);
return buf;
int len = (*mb_ptr2len)(str);
/* For multi-byte characters check for an illegal byte. */
if (has_mbyte && MB_BYTE2LEN(*str) > len)
{
transchar_nonprint(buf, c);
*sp = str + 1;
return buf;
}
/* Since 'special' is TRUE the multi-byte character 'c' will be
* processed by get_special_key_name() */
c = (*mb_ptr2char)(str);
*sp = str + len;
}
else
#endif
*sp = str + 1;
/* Make unprintable characters in <> form, also <M-Space> and <Tab>.
* Use <Space> only for lhs of a mapping. */

View File

@@ -363,7 +363,7 @@ copy_indent(size, src)
/* Fill to next tabstop with a tab, if possible */
tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
if (todo >= tab_pad)
if (todo >= tab_pad && !curbuf->b_p_et)
{
todo -= tab_pad;
++ind_len;
@@ -372,7 +372,7 @@ copy_indent(size, src)
}
/* Add tabs required for indent */
while (todo >= (int)curbuf->b_p_ts)
while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
{
todo -= (int)curbuf->b_p_ts;
++ind_len;

View File

@@ -2754,6 +2754,7 @@ find_special_key(srcp, modp, keycode, keep_x_key)
int bit;
int key;
unsigned long n;
int l;
src = *srcp;
if (src[0] != '<')
@@ -2766,26 +2767,32 @@ find_special_key(srcp, modp, keycode, keep_x_key)
if (*bp == '-')
{
last_dash = bp;
if (bp[1] != NUL && bp[2] == '>')
++bp; /* anything accepted, like <C-?> */
if (bp[1] != NUL)
{
#ifdef FEAT_MBYTE
if (has_mbyte)
l = mb_ptr2len(bp + 1);
else
#endif
l = 1;
if (bp[l + 1] == '>')
bp += l; /* anything accepted, like <C-?> */
}
}
if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
bp += 3; /* skip t_xx, xx may be '-' or '>' */
else if (STRNICMP(bp, "char-", 5) == 0)
{
vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
bp += l + 5;
break;
}
}
if (*bp == '>') /* found matching '>' */
{
end_of_name = bp + 1;
if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
{
/* <Char-123> or <Char-033> or <Char-0x33> */
vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
*modp = 0;
*srcp = end_of_name;
return (int)n;
}
/* Which modifiers are given? */
modifiers = 0x0;
for (bp = src + 1; bp < last_dash; bp++)
@@ -2804,16 +2811,32 @@ find_special_key(srcp, modp, keycode, keep_x_key)
*/
if (bp >= last_dash)
{
/*
* Modifier with single letter, or special key name.
*/
if (modifiers != 0 && last_dash[2] == '>')
key = last_dash[1];
if (STRNICMP(last_dash + 1, "char-", 5) == 0
&& VIM_ISDIGIT(last_dash[6]))
{
/* <Char-123> or <Char-033> or <Char-0x33> */
vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
key = (int)n;
}
else
{
key = get_special_key_code(last_dash + 1);
if (!keep_x_key)
key = handle_x_keys(key);
/*
* Modifier with single letter, or special key name.
*/
#ifdef FEAT_MBYTE
if (has_mbyte)
l = mb_ptr2len(last_dash + 1);
else
#endif
l = 1;
if (modifiers != 0 && last_dash[l + 1] == '>')
key = PTR2CHAR(last_dash + 1);
else
{
key = get_special_key_code(last_dash + 1);
if (!keep_x_key)
key = handle_x_keys(key);
}
}
/*

View File

@@ -154,6 +154,13 @@ static int did_set_icon = FALSE;
static void may_core_dump __ARGS((void));
#ifdef HAVE_UNION_WAIT
typedef union wait waitstatus;
#else
typedef int waitstatus;
#endif
static int wait4pid __ARGS((pid_t, waitstatus *));
static int WaitForChar __ARGS((long));
#if defined(__BEOS__)
int RealWaitForChar __ARGS((int, long, int *));
@@ -3660,6 +3667,47 @@ mch_new_shellsize()
/* Nothing to do. */
}
/*
* Wait for process "child" to end.
* Return "child" if it exited properly, <= 0 on error.
*/
static pid_t
wait4pid(child, status)
pid_t child;
waitstatus *status;
{
pid_t wait_pid = 0;
while (wait_pid != child)
{
# ifdef _THREAD_SAFE
/* Ugly hack: when compiled with Python threads are probably
* used, in which case wait() sometimes hangs for no obvious
* reason. Use waitpid() instead and loop (like the GUI). */
# ifdef __NeXT__
wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
# else
wait_pid = waitpid(child, status, WNOHANG);
# endif
if (wait_pid == 0)
{
/* Wait for 1/100 sec before trying again. */
mch_delay(10L, TRUE);
continue;
}
# else
wait_pid = wait(status);
# endif
if (wait_pid <= 0
# ifdef ECHILD
&& errno == ECHILD
# endif
)
break;
}
return wait_pid;
}
int
mch_call_shell(cmd, options)
char_u *cmd;
@@ -4234,7 +4282,7 @@ mch_call_shell(cmd, options)
{
MSG_PUTS(_("\nCannot fork\n"));
}
else if (wpid == 0)
else if (wpid == 0) /* child */
{
linenr_T lnum = curbuf->b_op_start.lnum;
int written = 0;
@@ -4242,7 +4290,6 @@ mch_call_shell(cmd, options)
char_u *s;
size_t l;
/* child */
close(fromshell_fd);
for (;;)
{
@@ -4287,7 +4334,7 @@ mch_call_shell(cmd, options)
}
_exit(0);
}
else
else /* parent */
{
close(toshell_fd);
toshell_fd = -1;
@@ -4584,7 +4631,7 @@ mch_call_shell(cmd, options)
* typed characters (otherwise we would lose typeahead).
*/
# ifdef __NeXT__
wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
# else
wait_pid = waitpid(pid, &status, WNOHANG);
# endif
@@ -4633,33 +4680,8 @@ finished:
* Don't wait if wait_pid was already set above, indicating the
* child already exited.
*/
while (wait_pid != pid)
{
# ifdef _THREAD_SAFE
/* Ugly hack: when compiled with Python threads are probably
* used, in which case wait() sometimes hangs for no obvious
* reason. Use waitpid() instead and loop (like the GUI). */
# ifdef __NeXT__
wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
# else
wait_pid = waitpid(pid, &status, WNOHANG);
# endif
if (wait_pid == 0)
{
/* Wait for 1/100 sec before trying again. */
mch_delay(10L, TRUE);
continue;
}
# else
wait_pid = wait(&status);
# endif
if (wait_pid <= 0
# ifdef ECHILD
&& errno == ECHILD
# endif
)
break;
}
if (wait_pid != pid)
wait_pid = wait4pid(pid, &status);
# ifdef FEAT_GUI
/* Close slave side of pty. Only do this after the child has
@@ -4672,7 +4694,10 @@ finished:
/* Make sure the child that writes to the external program is
* dead. */
if (wpid > 0)
{
kill(wpid, SIGKILL);
wait4pid(wpid, NULL);
}
/*
* Set to raw mode right now, otherwise a CTRL-C after
@@ -4819,7 +4844,8 @@ WaitForChar(msec)
/*
* Wait "msec" msec until a character is available from file descriptor "fd".
* Time == -1 will block forever.
* "msec" == 0 will check for characters once.
* "msec" == -1 will block until a character is available.
* When a GUI is being used, this will not be used for input -- webb
* Returns also, when a request from Sniff is waiting -- toni.
* Or when a Linux GPM mouse event is waiting.
@@ -5057,7 +5083,8 @@ RealWaitForChar(fd, msec, check_for_gpm)
/*
* Select on ready for reading and exceptional condition (end of file).
*/
FD_ZERO(&rfds); /* calls bzero() on a sun */
select_eintr:
FD_ZERO(&rfds);
FD_ZERO(&efds);
FD_SET(fd, &rfds);
# if !defined(__QNX__) && !defined(__CYGWIN32__)
@@ -5117,6 +5144,14 @@ RealWaitForChar(fd, msec, check_for_gpm)
# else
ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
# endif
# ifdef EINTR
if (ret == -1 && errno == EINTR)
/* Interrupted by a signal, need to try again. We ignore msec
* here, because we do want to check even after a timeout if
* characters are available. Needed for reading output of an
* external command after the process has finished. */
goto select_eintr;
# endif
# ifdef __TANDEM
if (ret == -1 && errno == ENOTSUP)
{
@@ -5124,7 +5159,7 @@ RealWaitForChar(fd, msec, check_for_gpm)
FD_ZERO(&efds);
ret = 0;
}
#endif
# endif
# ifdef FEAT_MZSCHEME
if (ret == 0 && mzquantum_used)
/* loop if MzThreads must be scheduled and timeout occurred */

View File

@@ -3419,8 +3419,6 @@ dump_pipe(int options,
{
DWORD availableBytes = 0;
DWORD i;
int c;
char_u *p;
int ret;
DWORD len;
DWORD toRead;
@@ -3479,6 +3477,8 @@ dump_pipe(int options,
else if (has_mbyte)
{
int l;
int c;
char_u *p;
len += *buffer_off;
buffer[len] = NUL;
@@ -3558,9 +3558,7 @@ mch_system_piped(char *cmd, int options)
int noread_cnt = 0;
garray_T ga;
int delay = 1;
# ifdef FEAT_MBYTE
DWORD buffer_off = 0; /* valid bytes in buffer[] */
# endif
SECURITY_ATTRIBUTES saAttr;
@@ -3777,14 +3775,12 @@ mch_system_piped(char *cmd, int options)
if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
{
dump_pipe(options, g_hChildStd_OUT_Rd,
&ga, buffer, &buffer_off);
dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
break;
}
++noread_cnt;
dump_pipe(options, g_hChildStd_OUT_Rd,
&ga, buffer, &buffer_off);
dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
/* We start waiting for a very short time and then increase it, so
* that we respond quickly when the process is quick, and don't

View File

@@ -2531,7 +2531,9 @@ fold_line(wp, fold_count, foldinfo, lnum, row)
/* Visual block mode: highlight the chars part of the block */
if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
{
if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
if (wp->w_old_cursor_lcol != MAXCOL
&& wp->w_old_cursor_lcol + txtcol
< (colnr_T)W_WIDTH(wp))
len = wp->w_old_cursor_lcol;
else
len = W_WIDTH(wp) - txtcol;

View File

@@ -11197,7 +11197,7 @@ allcap_copy(word, wcopy)
c = *s++;
#ifdef FEAT_MBYTE
/* We only change ß to SS when we are certain latin1 is used. It
/* We only change 0xdf to SS when we are certain latin1 is used. It
* would cause weird errors in other 8-bit encodings. */
if (enc_latin1like && c == 0xdf)
{

View File

@@ -1,6 +1,7 @@
Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
STARTTEST
:so small.vim
:set smarttab expandtab ts=8 sw=4
:" make sure that backspace works, no matter what termcap is used
:set t_kD=x7f t_kb=x08
@@ -12,7 +13,10 @@ r
0wR 
:" Test replacing with Tabs
0wR 
:?^start?,$w! test.out
:" Test that copyindent works with expandtab set
:set expandtab smartindent copyindent ts=8 sw=8 sts=8
o{
x:?^start?,$w! test.out
:qa!
ENDTEST

View File

@@ -5,3 +5,5 @@ test text
a cde
hi
test text
{
x

View File

@@ -2,6 +2,7 @@
STARTTEST
:so small.vim
:set cpo-=<
:" Test maparg() with a string result
:map foo<C-V> is<F4>foo
:vnoremap <script> <buffer> <expr> <silent> bar isbar
@@ -9,6 +10,11 @@ STARTTEST
:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
:call append('$', string(maparg('bar', '', 0, 1)))
:"
:map abc x<char-114>x
:call append('$', maparg('abc'))
:map abc y<S-char-114>y
:call append('$', maparg('abc'))
:"
:/^eof/+1,$w! test.out
:qa!
ENDTEST

View File

@@ -1,3 +1,5 @@
is<F4>foo
{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
xrx
yRy

View File

@@ -709,6 +709,48 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
302,
/**/
301,
/**/
300,
/**/
299,
/**/
298,
/**/
297,
/**/
296,
/**/
295,
/**/
294,
/**/
293,
/**/
292,
/**/
291,
/**/
290,
/**/
289,
/**/
288,
/**/
287,
/**/
286,
/**/
285,
/**/
284,
/**/
283,
/**/
282,
/**/
281,
/**/