diff --git a/Filelist b/Filelist index b2b88ab0b3..d7fbecb0e4 100644 --- a/Filelist +++ b/Filelist @@ -379,8 +379,10 @@ SRC_DOS_BIN = \ src/xpm/include/*.h \ src/xpm/x64/lib/libXpm.a \ src/xpm/x64/lib/libXpm.lib \ + src/xpm/x64/lib-vc14/libXpm.lib \ src/xpm/x86/lib/libXpm.a \ src/xpm/x86/lib/libXpm.lib \ + src/xpm/x86/lib-vc14/libXpm.lib \ nsis/icons/*.bmp \ nsis/icons/*.ico \ diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt index 62c8df3919..acd6814e4b 100644 --- a/runtime/doc/quickref.txt +++ b/runtime/doc/quickref.txt @@ -1,4 +1,4 @@ -*quickref.txt* For Vim version 7.4. Last change: 2016 Apr 29 +*quickref.txt* For Vim version 7.4. Last change: 2016 Jun 14 VIM REFERENCE MANUAL by Bram Moolenaar @@ -836,6 +836,7 @@ Short explanation of each option: *option-list* 'printmbcharset' 'pmbcs' CJK character set to be used for :hardcopy 'printmbfont' 'pmbfn' font names to be used for CJK output of :hardcopy 'printoptions' 'popt' controls the format of :hardcopy output +'prompt' 'prompt' enable prompt in Ex mode 'pumheight' 'ph' maximum height of the popup menu 'pythondll' name of the Python 2 dynamic library 'pythonthreedll' name of the Python 3 dynamic library diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt index d28a36777e..dbb3235081 100644 --- a/runtime/doc/starting.txt +++ b/runtime/doc/starting.txt @@ -1,4 +1,4 @@ -*starting.txt* For Vim version 7.4. Last change: 2016 Jun 12 +*starting.txt* For Vim version 7.4. Last change: 2016 Jun 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1436,6 +1436,10 @@ always kept. This is used for: - Contents of non-empty registers. - The jump list - File marks +The timestamp feature was added before Vim 8.0. Older versions of Vim, +starting with 7.4.1131, will keep the items with timestamp, but not use them. +Thus when using both an older and a newer version of Vim the most recent data +will be kept. Notes for Unix: - The file protection for the viminfo file will be set to prevent other users diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index 912083c9b3..dfa0417c72 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.4. Last change: 2016 Jun 12 +*todo.txt* For Vim version 7.4. Last change: 2016 Jun 16 VIM REFERENCE MANUAL by Bram Moolenaar @@ -35,10 +35,7 @@ not be repeated below, unless there is extra information. -------------------- Known bugs and current work ----------------------- Further implement 'barline' in viminfo: -- jumplist: merge with vi_jumplist. - Use timestamp for more items: locations, marks. -- Docs: lines are copied by Vim since 7.4.1131 -- Check if debug history works. Problem with setqflist([]): grep 4 times, ":colder 3", setqflist([]) will clear the next list, not the current one. Ramel Eshed, Jun 8. @@ -64,7 +61,8 @@ Later - job_start(): run job in a newly opened terminal. With xterm could use -S{pty}. -Quickfix improvements for backgroupd building and grepping: +Quickfix improvements for background building and grepping: + (Yegappan might do some of this) - Move 'efm' parsing to a separate function. If 'efm' is the same as last time re-use the fmt_first list. - Do not clear "dir_stack", "directory" and "file_stack", "currfile" when @@ -77,6 +75,8 @@ Quickfix improvements for backgroupd building and grepping: buffers. (Ramel Eshed) Regexp problems: +- When using automatic engine selection there is a false match. Forcing + either engine works OK. (fritzophrenic, 2016 Jun 15, #867) - Since 7.4.704 the old regex engine fails to match [[:print:]] in 0xf6. (Manuel Ortega, 2016 Apr 24) Test fails on Mac. Avoid using isalpha(), isalnum(), etc? Depends on @@ -125,9 +125,14 @@ Regexp problems: - Search for /\%d0\+ causes error E363 in a file with consecutive NUL characters. (Christian Brabandt, 2016 Jun 7) -jsonencode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23) +Patch to fix problem with GUI termcode. (Kazunobu Kuriyama, 2016 Jun 15) + +json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23) What if there is an invalid character? +Should json_encode()/json_decode() restrict recursiveness? +Or avoid recursiveness. + Once .exe with updated installer is available: Add remark to download page about /S and /D options (Ken Takata, 2016 Apr 13) @@ -149,6 +154,7 @@ Yasuhiro Matsumoto, 2013 May 31. Or should we add a more general mechanism, like a lambda() function? Patch by Yasuhiro Matsumoto, 2014 Sep 16, update 2016 Apr 17. Correction for test, Ken Takata, 2016 May 27. +Merged patch: Ken Takata, 2016 Jun 15. Problem with whitespace in errorformat. (Gerd Wachsmuth, 2016 May 15, #807) @@ -222,6 +228,7 @@ Update 2016 Mar 28. Can include all parts into one dist patch. Patch to support 64 bit ints for Number. (Ken Takata, 2016 Jan 21) Update 2016 Apr 24. +Update 2016 Jun 14, includes some tests. Patch to improve cscope. (Adrian Kocis, #843) @@ -274,9 +281,6 @@ Patch to make tests pass with EBCDIC. (Owen Leibman, 2016 Apr 10) When repeating the 'confirm' dialog one needs to press Enter. (ds26gte, 2016 Apr 17) #762 -Should jsonencode()/jsondecode() restrict recursiveness? -Or avoid recursiveness. - Use vim.vim syntax highlighting for help file examples, but without ":" in 'iskeyword' for syntax. @@ -285,6 +289,9 @@ Patch to make "%:h:h" return "." instead of the full path. Remove SPACE_IN_FILENAME ? What could possibly go wrong? +When command names are very long :command output is difficult to read. Use a +maximum for the column width? (#871) + Patch to change GUI behavior: instead of changing the window size change the lines/columns when menu/toolbar/etc. is added/removed. (Ychin, 2016 Mar 20, #703) @@ -496,9 +503,6 @@ Breaks test_eval. Inefficient, can we only compute y_width when needed? Patch to use different terminal mode settings for system(). (Hayaki Saito) Does this work for everybody? -Patch to fix that wide characters do not work properly after exiting. -(Yasuhiro Matsumoto, 2015 May 24) Better patch to come. - Patch to add wordcount(). Same info as g CTRL-G. (Christian Brabandt, 2015 Nov 17) diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index 66aa771365..d720344b8f 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -1,4 +1,4 @@ -*usr_41.txt* For Vim version 7.4. Last change: 2016 Jun 11 +*usr_41.txt* For Vim version 7.4. Last change: 2016 Jun 13 VIM USER MANUAL - by Bram Moolenaar @@ -938,8 +938,8 @@ Inter-process communication: *channel-functions* ch_log() write a message in the channel log file ch_logfile() set the channel log file ch_setoptions() set the options for a channel - jsonencode() encode an expression to a JSON string - jsondecode() decode a JSON string to Vim types + json_encode() encode an expression to a JSON string + json_decode() decode a JSON string to Vim types js_encode() encode an expression to a JSON string js_decode() decode a JSON string to Vim types diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim index 43f343a6be..69394930e8 100644 --- a/runtime/ftplugin/man.vim +++ b/runtime/ftplugin/man.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: man " Maintainer: SungHyun Nam -" Last Change: 2016 Feb 04 +" Last Change: 2016 Jun 20 " To make the ":Man" command available before editing a manual page, source " this script from your startup vimrc file. @@ -150,7 +150,17 @@ func GetPage(...) endwhile endif if &filetype != "man" - new + if exists("g:ft_man_open_mode") + if g:ft_man_open_mode == "vert" + vnew + elseif g:ft_man_open_mode == "tab" + tabnew + else + new + endif + else + new + endif setl nonu fdc=0 endif endif @@ -160,10 +170,15 @@ func GetPage(...) setl ma nonu nornu nofen silent exec "norm 1GdG" + let unsetwidth = 0 if empty($MANWIDTH) let $MANWIDTH = winwidth(0) + let unsetwidth = 1 endif silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b" + if unsetwidth + let $MANWIDTH = '' + endif " Remove blank lines from top and bottom. while getline(1) =~ '^\s*$' silent keepj norm ggdd @@ -175,6 +190,7 @@ func GetPage(...) setl ft=man nomod setl bufhidden=hide setl nobuflisted + setl noma endfunc func PopPage() @@ -195,4 +211,4 @@ endfunc endif -" vim: set sw=2: +" vim: set sw=2 ts=8 noet: diff --git a/runtime/keymap/vietnamese-telex_utf-8.vim b/runtime/keymap/vietnamese-telex_utf-8.vim new file mode 100644 index 0000000000..f9fd055d14 --- /dev/null +++ b/runtime/keymap/vietnamese-telex_utf-8.vim @@ -0,0 +1,196 @@ +" Vim Keymap file for Vietnamese through Telex method +" Maintainer: Raphael McSinyx +" Last Change: 2016-06-13 + +scriptencoding utf-8 + +let b:keymap_name = "vi" + +loadkeymap + +A\\ A +AF À +AS Á +AR Ả +AX Ã +AJ Ạ + +AW Ă +AW\\ Ă +AWF Ằ +AWS Ắ +AWR Ẳ +AWX Ẵ +AWJ Ặ + +AA Â +AA\\ Â +AAF Ầ +AAS Ấ +AAR Ẩ +AAX Ẫ +AAJ Ậ + +D\\ D +DD Đ + +E E +E\\ E +EF È +ES É +ER Ẻ +EX Ẽ +EJ Ẹ + +EE Ê +EE\\ Ê +EEF Ề +EES Ế +EER Ể +EEX Ễ +EEJ Ệ + +I\\ I +IF Ì +IS Í +IR Ỉ +IX Ĩ +IJ Ị + +O\\ O +OF Ò +OS Ó +OR Ỏ +OX Õ +OJ Ọ + +OO Ô +OO\\ Ô +OOF Ồ +OOS Ố +OOR Ổ +OOX Ỗ +OOJ Ộ + +OW Ơ +OW\\ Ơ +OWF Ờ +OWS Ớ +OWR Ở +OWX Ỡ +OWJ Ợ + +U\\ U +UF Ù +US Ú +UR Ủ +UX Ũ +UJ Ụ + +UW Ư +UW\\ Ư +UWF Ừ +UWS Ứ +UWR Ử +UWX Ữ +UWJ Ự + +Y\\ Y +YF Ỳ +YS Ý +YR Ỷ +YX Ỹ +YJ Ỵ + +a\\ a +af à +as á +ar ả +ax ã +aj ạ + +aw ă +aw\\ ă +awf ằ +aws ắ +awr ẳ +awx ẵ +awj ặ + +aa â +aa\\ â +aaf ầ +aas ấ +aar ẩ +aax ẫ +aaj ậ + +d\\ d +dd đ + +e\\ e +ef è +es é +er ẻ +ex ẽ +ej ẹ + +ee ê +ee\\ ê +eef ề +ees ế +eer ể +eex ễ +eej ệ + +i\\ i +if ì +is í +ir ỉ +ix ĩ +ij ị + +o\\ o +of ò +os ó +or ỏ +ox õ +oj ọ + +oo ô +oo\\ ô +oof ồ +oos ố +oor ổ +oox ỗ +ooj ộ + +ow ơ +ow\\ ơ +owf ờ +ows ớ +owr ở +owx ỡ +owj ợ + +u\\ u +uf ù +us ú +ur ủ +ux ũ +uj ụ + +uw ư +uw\\ ư +uwf ừ +uws ứ +uwr ử +uwx ữ +uwj ự + +y\\ y +yf ỳ +ys ý +yr ỷ +yx ỹ +yj ỵ diff --git a/runtime/keymap/vietnamese-vni_utf-8.vim b/runtime/keymap/vietnamese-vni_utf-8.vim new file mode 100644 index 0000000000..c9312c6854 --- /dev/null +++ b/runtime/keymap/vietnamese-vni_utf-8.vim @@ -0,0 +1,196 @@ +" Vim Keymap file for Vietnamese through VNI method +" Maintainer: Raphael McSinyx +" Last Change: 2016-06-13 + +scriptencoding utf-8 + +let b:keymap_name = "vi" + +loadkeymap + +A\\ A +A1 Á +A2 À +A3 Ả +A4 Ã +A5 Ạ + +A8 Ă +A8\\ Ă +A81 Ắ +A82 Ằ +A83 Ẳ +A84 Ẵ +A85 Ặ + +A6 Â +A6\\ Â +A61 Ấ +A62 Ầ +A63 Ẩ +A64 Ẫ +A65 Ậ + +D D +D\\ D +D9 Đ + +E\\ E +E1 É +E2 È +E3 Ẻ +E4 Ẽ +E5 Ẹ + +E6 Ê +E6\\ Ê +E61 Ế +E62 Ề +E63 Ể +E64 Ễ +E65 Ệ + +I\\ I +I1 Í +I2 Ì +I3 Ỉ +I4 Ĩ +I5 Ị + +O\\ O +O1 Ó +O2 Ò +O3 Ỏ +O4 Õ +O5 Ọ + +O6 Ô +O6\\ Ô +O61 Ố +O62 Ồ +O63 Ổ +O64 Ỗ +O65 Ộ + +O7 Ơ +O7\\ Ơ +O71 Ớ +O72 Ờ +O73 Ở +O74 Ỡ +O75 Ợ + +U\\ U +U1 Ú +U2 Ù +U3 Ủ +U4 Ũ +U5 Ụ + +U7 Ư +U7\\ Ư +U71 Ứ +U72 Ừ +U73 Ử +U74 Ữ +U75 Ự + +Y\\ Y +Y1 Ý +Y2 Ỳ +Y3 Ỷ +Y4 Ỹ +Y5 Ỵ + +a\\ a +a1 á +a2 à +a3 ả +a4 ã +a5 ạ + +a8 ă +a8\\ ă +a81 ắ +a82 ằ +a83 ẳ +a84 ẵ +a85 ặ + +a6 â +a6\\ â +a61 ấ +a62 ầ +a63 ẩ +a64 ẫ +a65 ậ + +d\\ d +d9 đ + +e\\ e +e1 é +e2 è +e3 ẻ +e4 ẽ +e5 ẹ + +e6 ê +e6\\ ê +e61 ế +e62 ề +e63 ể +e64 ễ +e65 ệ + +i\\ i +i1 í +i2 ì +i3 ỉ +i4 ĩ +i5 ị + +o\\ o +o1 ó +o2 ò +o3 ỏ +o4 õ +o5 ọ + +o6 ô +o6\\ ô +o61 ố +o62 ồ +o63 ổ +o64 ỗ +o65 ộ + +o7 ơ +o7\\ ơ +o71 ớ +o72 ờ +o73 ở +o74 ỡ +o75 ợ + +u\\ u +u1 ú +u2 ù +u3 ủ +u4 ũ +u5 ụ + +u7 ư +u7\\ ư +u71 ứ +u72 ừ +u73 ử +u74 ữ +u75 ự + +y\\ y +y1 ý +y2 ỳ +y3 ỷ +y4 ỹ +y5 ỵ diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim index b3c89f8352..ef07b22676 100644 --- a/runtime/syntax/rst.vim +++ b/runtime/syntax/rst.vim @@ -2,7 +2,7 @@ " Language: reStructuredText documentation format " Maintainer: Marshall Ward " Previous Maintainer: Nikolai Weibull -" Latest Revision: 2016-01-05 +" Latest Revision: 2016-06-17 if exists("b:current_syntax") finish @@ -137,7 +137,7 @@ syn match rstStandaloneHyperlink contains=@NoSpell \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]" syn region rstCodeBlock contained matchgroup=rstDirective - \ start=+\%(sourcecode\|code\%(-block\)\=\)::\_s*\n\ze\z(\s\+\)+ + \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s\+\w*\_s*\n\ze\z(\s\+\)+ \ skip=+^$+ \ end=+^\z1\@!+ \ contains=@NoSpell @@ -153,10 +153,11 @@ for code in g:rst_syntax_code_list " guard against setting 'isk' option which might cause problems (issue #108) let prior_isk = &l:iskeyword exe 'syn include @rst'.code.' syntax/'.code.'.vim' - exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold ' - \.'start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\_s*\n\ze\z(\s\+\)# ' - \.'skip=#^$# ' - \.'end=#^\z1\@!# contains=@NoSpell,@rst'.code + exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold' + \.' start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\_s*\n\ze\z(\s\+\)#' + \.' skip=#^$#' + \.' end=#^\z1\@!#' + \.' contains=@NoSpell,@rst'.code exe 'syn cluster rstDirectives add=rstDirective'.code " reset 'isk' setting, if it has been changed if &l:iskeyword !=# prior_isk @@ -185,10 +186,11 @@ hi def link rstHyperlinkTarget String hi def link rstExDirective String hi def link rstSubstitutionDefinition rstDirective hi def link rstDelimiter Delimiter -" TODO: I dunno... -hi def rstEmphasis term=italic cterm=italic gui=italic +hi def link rstEmphasis Underlined hi def link rstStrongEmphasis Special -"term=bold cterm=bold gui=bold +" TODO Append these atttributes somehow +"hi def rstEmphasis term=italic cterm=italic gui=italic +"hi def rstStrongEmphasis term=bold cterm=bold gui=bold hi def link rstInterpretedTextOrHyperlinkReference Identifier hi def link rstInlineLiteral String hi def link rstSubstitutionReference PreProc diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index c4529b72bd..f1e3f01386 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -255,6 +255,45 @@ MAKEFLAGS_GVIMEXT = DEBUG=yes !endif +# Check VC version. +!if [echo MSVCVER=_MSC_VER> msvcver.c && $(CC) /EP msvcver.c > msvcver.~ 2> nul] +!message *** ERROR +!message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH. +!message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed. +!error Make aborted. +!else +!include msvcver.~ +!if [del msvcver.c msvcver.~] +!endif +!endif + +!if $(MSVCVER) < 1900 +MSVC_MAJOR = ($(MSVCVER) / 100 - 6) +MSVCRT_VER = ($(MSVCVER) / 10 - 60) +!else +MSVC_MAJOR = ($(MSVCVER) / 100 - 5) +MSVCRT_VER = ($(MSVCVER) / 10 - 50) +!endif + +# Calculate MSVCRT_VER +!if [(set /a MSVCRT_VER="$(MSVCRT_VER)" > nul) && set MSVCRT_VER > msvcrtver.~] == 0 +!include msvcrtver.~ +!if [del msvcrtver.~] +!endif +!endif + +# Base name of the msvcrXX.dll +!if $(MSVCRT_VER) <= 60 +MSVCRT_NAME = msvcrt +!else +MSVCRT_NAME = msvcr$(MSVCRT_VER) +!endif + +!if $(MSVC_MAJOR) == 6 +CPU = ix86 +!endif + + # Flag to turn on Win64 compatibility warnings for VC7.x and VC8. WP64CHECK = /Wp64 @@ -294,8 +333,9 @@ CHANNEL = $(GUI) !endif !endif -# Only allow NETBEANS and XPM for a GUI build and CHANNEL. +# GUI sepcific features. !if "$(GUI)" == "yes" +# Only allow NETBEANS for a GUI build and CHANNEL. !if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes" # NETBEANS - Include support for Netbeans integration NETBEANS_PRO = proto/netbeans.pro @@ -317,8 +357,11 @@ DIRECTX_INCL = gui_dwrite.h DIRECTX_OBJ = $(OUTDIR)\gui_dwrite.obj !endif +# Only allow XPM for a GUI build. !ifndef XPM -# XPM is not set, use the included xpm files, depending on the architecture. +!ifndef USE_MSVCRT +# Both XPM and USE_MSVCRT are not set, use the included xpm files, depending +# on the architecture. !if "$(CPU)" == "AMD64" XPM = xpm\x64 !elseif "$(CPU)" == "i386" @@ -326,13 +369,22 @@ XPM = xpm\x86 !else XPM = no !endif -!endif +!else # USE_MSVCRT +XPM = no +!endif # USE_MSVCRT +!endif # XPM !if "$(XPM)" != "no" # XPM - Include support for XPM signs # See the xpm directory for more information. XPM_OBJ = $(OBJDIR)/xpm_w32.obj XPM_DEFS = -DFEAT_XPM_W32 +!if $(MSVC_MAJOR) >= 14 +# VC14 cannot use a library built by VC12 or eariler, because VC14 uses +# Universal CRT. +XPM_LIB = $(XPM)\lib-vc14\libXpm.lib +!else XPM_LIB = $(XPM)\lib\libXpm.lib +!endif XPM_INC = -I $(XPM)\include -I $(XPM)\..\include !endif !endif @@ -395,43 +447,6 @@ DEL_TREE = deltree /y INTDIR=$(OBJDIR) OUTDIR=$(OBJDIR) -!if [echo MSVCVER=_MSC_VER> msvcver.c && $(CC) /EP msvcver.c > msvcver.~ 2> nul] -!message *** ERROR -!message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH. -!message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed. -!error Make aborted. -!else -!include msvcver.~ -!if [del msvcver.c msvcver.~] -!endif -!endif - -!if $(MSVCVER) < 1900 -MSVC_MAJOR = ($(MSVCVER) / 100 - 6) -MSVCRT_VER = ($(MSVCVER) / 10 - 60) -!else -MSVC_MAJOR = ($(MSVCVER) / 100 - 5) -MSVCRT_VER = ($(MSVCVER) / 10 - 50) -!endif - -# Calculate MSVCRT_VER -!if [(set /a MSVCRT_VER="$(MSVCRT_VER)" > nul) && set MSVCRT_VER > msvcrtver.~] == 0 -!include msvcrtver.~ -!if [del msvcrtver.~] -!endif -!endif - -# Base name of the msvcrXX.dll -!if $(MSVCRT_VER) <= 60 -MSVCRT_NAME = msvcrt -!else -MSVCRT_NAME = msvcr$(MSVCRT_VER) -!endif - -!if $(MSVC_MAJOR) == 6 -CPU = ix86 -!endif - # Convert processor ID to MVC-compatible number !if $(MSVC_MAJOR) < 8 !if "$(CPUNR)" == "i386" diff --git a/src/ex_cmds.c b/src/ex_cmds.c index ec405cb432..aff2bddcae 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -2559,8 +2559,9 @@ barline_writestring(FILE *fd, char_u *s, int remaining_start) /* * Parse a viminfo line starting with '|'. * Add each decoded value to "values". + * Returns TRUE if the next line is to be read after using the parsed values. */ - static void + static int barline_parse(vir_T *virp, char_u *text, garray_T *values) { char_u *p = text; @@ -2569,6 +2570,7 @@ barline_parse(vir_T *virp, char_u *text, garray_T *values) bval_T *value; int i; int allocated = FALSE; + int eof; #ifdef FEAT_MBYTE char_u *sconv; int converted; @@ -2611,21 +2613,24 @@ barline_parse(vir_T *virp, char_u *text, garray_T *values) * |{bartype},>{length of "{text}{text2}"} * |<"{text1} * |<{text2}",{value} + * Length includes the quotes. */ ++p; len = getdigits(&p); buf = alloc((int)(len + 1)); if (buf == NULL) - return; + return TRUE; p = buf; for (todo = len; todo > 0; todo -= n) { - if (viminfo_readline(virp) || virp->vir_line[0] != '|' + eof = viminfo_readline(virp); + if (eof || virp->vir_line[0] != '|' || virp->vir_line[1] != '<') { - /* file was truncated or garbled */ + /* File was truncated or garbled. Read another line if + * this one starts with '|'. */ vim_free(buf); - return; + return eof || virp->vir_line[0] == '|'; } /* Get length of text, excluding |< and NL chars. */ n = STRLEN(virp->vir_line); @@ -2651,10 +2656,12 @@ barline_parse(vir_T *virp, char_u *text, garray_T *values) * |{bartype},{lots of values},> * |<{value},{value} */ - if (viminfo_readline(virp) || virp->vir_line[0] != '|' + eof = viminfo_readline(virp); + if (eof || virp->vir_line[0] != '|' || virp->vir_line[1] != '<') - /* file was truncated or garbled */ - return; + /* File was truncated or garbled. Read another line if + * this one starts with '|'. */ + return eof || virp->vir_line[0] == '|'; p = virp->vir_line + 2; } } @@ -2675,7 +2682,7 @@ barline_parse(vir_T *virp, char_u *text, garray_T *values) while (*p != '"') { if (*p == NL || *p == NUL) - return; /* syntax error, drop the value */ + return TRUE; /* syntax error, drop the value */ if (*p == '\\') { ++p; @@ -2734,6 +2741,7 @@ barline_parse(vir_T *virp, char_u *text, garray_T *values) else break; } + return TRUE; } static int @@ -2744,6 +2752,7 @@ read_viminfo_barline(vir_T *virp, int got_encoding, int force, int writing) garray_T values; bval_T *vp; int i; + int read_next = TRUE; /* The format is: |{bartype},{value},... * For a very long string: @@ -2772,7 +2781,7 @@ read_viminfo_barline(vir_T *virp, int got_encoding, int force, int writing) * doesn't understand the version. */ if (!got_encoding) { - barline_parse(virp, p, &values); + read_next = barline_parse(virp, p, &values); vp = (bval_T *)values.ga_data; if (values.ga_len > 0 && vp->bv_type == BVAL_NR) virp->vir_version = vp->bv_nr; @@ -2780,17 +2789,17 @@ read_viminfo_barline(vir_T *virp, int got_encoding, int force, int writing) break; case BARTYPE_HISTORY: - barline_parse(virp, p, &values); + read_next = barline_parse(virp, p, &values); handle_viminfo_history(&values, writing); break; case BARTYPE_REGISTER: - barline_parse(virp, p, &values); + read_next = barline_parse(virp, p, &values); handle_viminfo_register(&values, force); break; case BARTYPE_MARK: - barline_parse(virp, p, &values); + read_next = barline_parse(virp, p, &values); handle_viminfo_mark(&values, force); break; @@ -2808,7 +2817,9 @@ read_viminfo_barline(vir_T *virp, int got_encoding, int force, int writing) ga_clear(&values); } - return viminfo_readline(virp); + if (read_next) + return viminfo_readline(virp); + return FALSE; } static void diff --git a/src/mark.c b/src/mark.c index 72a9a923c3..264124f59e 100644 --- a/src/mark.c +++ b/src/mark.c @@ -1522,12 +1522,10 @@ handle_viminfo_mark(garray_T *values, int force) ++idx; break; } + /* idx cannot be zero now */ if (idx < 0 && curwin->w_jumplistlen < JUMPLISTSIZE) /* insert as the oldest entry */ idx = 0; - else if (idx == 0 && curwin->w_jumplistlen == JUMPLISTSIZE) - /* no space to insert as the oldest entry */ - idx = -1; } else if (curwin->w_jumplistlen < JUMPLISTSIZE) /* insert as oldest entry */ diff --git a/src/ops.c b/src/ops.c index d97107e229..8d62ed0b9d 100644 --- a/src/ops.c +++ b/src/ops.c @@ -5488,11 +5488,23 @@ do_addsub( { if (dobin) while (col > 0 && vim_isbdigit(ptr[col])) + { --col; +#ifdef FEAT_MBYTE + if (has_mbyte) + col -= (*mb_head_off)(ptr, ptr + col); +#endif + } if (dohex) while (col > 0 && vim_isxdigit(ptr[col])) + { --col; +#ifdef FEAT_MBYTE + if (has_mbyte) + col -= (*mb_head_off)(ptr, ptr + col); +#endif + } if ( dobin && dohex @@ -5500,6 +5512,10 @@ do_addsub( && (ptr[col] == 'X' || ptr[col] == 'x') && ptr[col - 1] == '0' +#ifdef FEAT_MBYTE + && (!has_mbyte || + !(*mb_head_off)(ptr, ptr + col - 1)) +#endif && vim_isxdigit(ptr[col + 1])))) { @@ -5508,7 +5524,13 @@ do_addsub( col = pos->col; while (col > 0 && vim_isdigit(ptr[col])) + { col--; +#ifdef FEAT_MBYTE + if (has_mbyte) + col -= (*mb_head_off)(ptr, ptr + col); +#endif + } } if (( dohex @@ -5516,16 +5538,28 @@ do_addsub( && (ptr[col] == 'X' || ptr[col] == 'x') && ptr[col - 1] == '0' +#ifdef FEAT_MBYTE + && (!has_mbyte || + !(*mb_head_off)(ptr, ptr + col - 1)) +#endif && vim_isxdigit(ptr[col + 1])) || ( dobin && col > 0 && (ptr[col] == 'B' || ptr[col] == 'b') && ptr[col - 1] == '0' +#ifdef FEAT_MBYTE + && (!has_mbyte || + !(*mb_head_off)(ptr, ptr + col - 1)) +#endif && vim_isbdigit(ptr[col + 1]))) { /* Found hexadecimal or binary number, move to its start. */ --col; +#ifdef FEAT_MBYTE + if (has_mbyte) + col -= (*mb_head_off)(ptr, ptr + col); +#endif } else { @@ -5537,12 +5571,18 @@ do_addsub( while (ptr[col] != NUL && !vim_isdigit(ptr[col]) && !(doalp && ASCII_ISALPHA(ptr[col]))) - ++col; + col += MB_PTR2LEN(ptr + col); while (col > 0 && vim_isdigit(ptr[col - 1]) && !(doalp && ASCII_ISALPHA(ptr[col]))) + { --col; +#ifdef FEAT_MBYTE + if (has_mbyte) + col -= (*mb_head_off)(ptr, ptr + col); +#endif + } } } @@ -5552,14 +5592,21 @@ do_addsub( && !vim_isdigit(ptr[col]) && !(doalp && ASCII_ISALPHA(ptr[col]))) { - ++col; - --length; + int mb_len = MB_PTR2LEN(ptr + col); + + col += mb_len; + length -= mb_len; } if (length == 0) goto theend; - if (col > pos->col && ptr[col - 1] == '-') + if (col > pos->col && ptr[col - 1] == '-' +#ifdef FEAT_MBYTE + && (!has_mbyte || + !(*mb_head_off)(ptr, ptr + col - 1)) +#endif + ) { negative = TRUE; was_positive = FALSE; @@ -5622,7 +5669,12 @@ do_addsub( } else { - if (col > 0 && ptr[col - 1] == '-' && !visual) + if (col > 0 && ptr[col - 1] == '-' +#ifdef FEAT_MBYTE + && (!has_mbyte || + !(*mb_head_off)(ptr, ptr + col - 1)) +#endif + && !visual) { /* negative number */ --col; @@ -6036,8 +6088,9 @@ handle_viminfo_register(garray_T *values, int force) && (timestamp == 0 || y_ptr->y_time_set > timestamp)) return; - for (i = 0; i < y_ptr->y_size; i++) - vim_free(y_ptr->y_array[i]); + if (y_ptr->y_array != NULL) + for (i = 0; i < y_ptr->y_size; i++) + vim_free(y_ptr->y_array[i]); vim_free(y_ptr->y_array); if (y_read_regs == NULL) diff --git a/src/po/it.po b/src/po/it.po index 5789fee70b..223185f535 100644 --- a/src/po/it.po +++ b/src/po/it.po @@ -2126,7 +2126,7 @@ msgid "E490: No fold found" msgstr "E490: Non trovo alcuna piegatura" msgid "E350: Cannot create fold with current 'foldmethod'" -msgstr "E350: Non posso create piegatura con il 'foldmethod' in uso" +msgstr "E350: Non posso creare piegatura con il 'foldmethod' in uso" msgid "E351: Cannot delete fold with current 'foldmethod'" msgstr "E351: Non posso cancellare piegatura con il 'foldmethod' in uso" diff --git a/src/quickfix.c b/src/quickfix.c index b72f7d1f68..e424593965 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -623,8 +623,8 @@ qf_init_ext( if (buflnum > lnumlast) break; p_buf = ml_get_buf(buf, buflnum++, FALSE); - linelen = (int)STRLEN(p_buf); - if (linelen > IOSIZE - 2) + len = (int)STRLEN(p_buf); + if (len > IOSIZE - 2) { linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen); @@ -632,7 +632,10 @@ qf_init_ext( goto qf_init_end; } else + { linebuf = IObuff; + linelen = len; + } vim_strncpy(linebuf, p_buf, linelen); } } @@ -1435,8 +1438,8 @@ qf_get_fnum(char_u *directory, char_u *fname) } /* - * push dirbuf onto the directory stack and return pointer to actual dir or - * NULL on error + * Push dirbuf onto the directory stack and return pointer to actual dir or + * NULL on error. */ static char_u * qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr) diff --git a/src/screen.c b/src/screen.c index c139be0a6a..2db90afc19 100644 --- a/src/screen.c +++ b/src/screen.c @@ -8995,9 +8995,12 @@ can_clear(char_u *p) || gui.in_use #endif #ifdef FEAT_TERMGUICOLORS - || (p_tgc && cterm_normal_bg_gui_color != (long_u)INVALCOLOR) + || (p_tgc && cterm_normal_bg_gui_color == (long_u)INVALCOLOR) + || (!p_tgc && cterm_normal_bg_color == 0) +#else + || cterm_normal_bg_color == 0 #endif - || cterm_normal_bg_color == 0 || *T_UT != NUL)); + || *T_UT != NUL)); } /* diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 57f8283f09..2dbdc32735 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -175,6 +175,7 @@ NEW_TESTS = test_arglist.res \ test_increment.res \ test_json.res \ test_langmap.res \ + test_man.res \ test_matchadd_conceal.res \ test_packadd.res \ test_perl.res \ diff --git a/src/testdir/test_man.vim b/src/testdir/test_man.vim new file mode 100644 index 0000000000..f2c48a4059 --- /dev/null +++ b/src/testdir/test_man.vim @@ -0,0 +1,59 @@ +runtime ftplugin/man.vim + +function Test_g_ft_man_open_mode() + let l:w = winwidth(1) + vnew + let l:h = winheight(1) + q + + " split horizontally + let wincnt = winnr('$') + Man 'vim' + if wincnt == winnr('$') + " Vim manual page cannot be found. + return + endif + call assert_equal(l:w, winwidth(1)) + call assert_true(l:h > winheight(1)) + call assert_equal(1, tabpagenr('$')) + call assert_equal(1, tabpagenr()) + q + + " split horizontally + let g:ft_man_open_mode = "horz" + Man 'vim' + call assert_equal(l:w, winwidth(1)) + call assert_true(l:h > winheight(1)) + call assert_equal(1, tabpagenr('$')) + call assert_equal(1, tabpagenr()) + q + + " split vertically + let g:ft_man_open_mode = "vert" + Man 'vim' + call assert_true(l:w > winwidth(1)) + call assert_equal(l:h, winheight(1)) + call assert_equal(1, tabpagenr('$')) + call assert_equal(1, tabpagenr()) + q + + " separate tab + let g:ft_man_open_mode = "tab" + Man 'vim' + call assert_equal(l:w, winwidth(1)) + call assert_equal(l:h, winheight(1)) + call assert_equal(2, tabpagenr('$')) + call assert_equal(2, tabpagenr()) + q +endfunction + +function Test_nomodifiable() + let wincnt = winnr('$') + Man 'vim' + if wincnt == winnr('$') + " Vim manual page cannot be found. + return + endif + call assert_false(&l:modifiable) + q +endfunction diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 380d64bd94..56bf9cb28f 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -653,6 +653,8 @@ endfunction " Test for quickfix directory stack support function! s:dir_stack_tests(cchar) + call s:setup_commands(a:cchar) + let save_efm=&efm set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' diff --git a/src/version.c b/src/version.c index 71eb7604ac..25b848b69b 100644 --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,22 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1949, +/**/ + 1948, +/**/ + 1947, +/**/ + 1946, +/**/ + 1945, +/**/ + 1944, +/**/ + 1943, +/**/ + 1942, /**/ 1941, /**/ diff --git a/src/xpm/x64/lib-vc14/libXpm.lib b/src/xpm/x64/lib-vc14/libXpm.lib new file mode 100644 index 0000000000..db79b4a89f Binary files /dev/null and b/src/xpm/x64/lib-vc14/libXpm.lib differ diff --git a/src/xpm/x86/lib-vc14/libXpm.lib b/src/xpm/x86/lib-vc14/libXpm.lib new file mode 100644 index 0000000000..7010d30eea Binary files /dev/null and b/src/xpm/x86/lib-vc14/libXpm.lib differ