| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.609 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.609 |
| Problem: File names in :checkpath! output are garbled. |
| Solution: Check for \zs in the pattern. (Lech Lorens) |
| Files: src/search.c, src/testdir/test17.in, src/testdir/test17.ok |
| |
| |
| |
| |
| |
| *** 4740,4756 **** |
| * Isolate the file name. |
| * Include the surrounding "" or <> if present. |
| */ |
| ! for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++) |
| ! ; |
| ! for (i = 0; vim_isfilec(p[i]); i++) |
| ! ; |
| if (i == 0) |
| { |
| /* Nothing found, use the rest of the line. */ |
| p = incl_regmatch.endp[0]; |
| i = (int)STRLEN(p); |
| } |
| ! else |
| { |
| if (p[-1] == '"' || p[-1] == '<') |
| { |
| --- 4740,4772 ---- |
| * Isolate the file name. |
| * Include the surrounding "" or <> if present. |
| */ |
| ! if (inc_opt != NULL |
| ! && strstr((char *)inc_opt, "\\zs") != NULL) |
| ! { |
| ! /* pattern contains \zs, use the match */ |
| ! p = incl_regmatch.startp[0]; |
| ! i = (int)(incl_regmatch.endp[0] |
| ! - incl_regmatch.startp[0]); |
| ! } |
| ! else |
| ! { |
| ! /* find the file name after the end of the match */ |
| ! for (p = incl_regmatch.endp[0]; |
| ! *p && !vim_isfilec(*p); p++) |
| ! ; |
| ! for (i = 0; vim_isfilec(p[i]); i++) |
| ! ; |
| ! } |
| ! |
| if (i == 0) |
| { |
| /* Nothing found, use the rest of the line. */ |
| p = incl_regmatch.endp[0]; |
| i = (int)STRLEN(p); |
| } |
| ! /* Avoid checking before the start of the line, can |
| ! * happen if \zs appears in the regexp. */ |
| ! else if (p > line) |
| { |
| if (p[-1] == '"' || p[-1] == '<') |
| { |
| |
| |
| |
| *** 1,4 **** |
| ! Tests for "gf" on ${VAR} |
| |
| STARTTEST |
| :so small.vim |
| --- 1,6 ---- |
| ! Tests for: |
| ! - "gf" on ${VAR}, |
| ! - ":checkpath!" with various 'include' settings. |
| |
| STARTTEST |
| :so small.vim |
| |
| *** 20,27 **** |
| :endif |
| gf |
| :w! test.out |
| ! :qa! |
| ENDTEST |
| |
| ${CDIR}/test17a.in |
| $TDIR/test17a.in |
| --- 22,120 ---- |
| :endif |
| gf |
| :w! test.out |
| ! :brewind |
| ENDTEST |
| |
| ${CDIR}/test17a.in |
| $TDIR/test17a.in |
| + |
| + STARTTEST |
| + :" check for 'include' without \zs or \ze |
| + :lang C |
| + :!rm -f ./Xbase.a |
| + :!rm -rf ./Xdir1 |
| + :!mkdir -p Xdir1/dir2 |
| + :e Xdir1/dir2/foo.a |
| + i#include "bar.a" |
| + :w |
| + :e Xdir1/dir2/bar.a |
| + i#include "baz.a" |
| + :w |
| + :e Xdir1/dir2/baz.a |
| + i#include "foo.a" |
| + :w |
| + :e Xbase.a |
| + :set path=Xdir1/dir2 |
| + i#include <foo.a> |
| + :w |
| + :redir! >>test.out |
| + :checkpath! |
| + :redir END |
| + :brewind |
| + ENDTEST |
| + |
| + STARTTEST |
| + :" check for 'include' with \zs and \ze |
| + :!rm -f ./Xbase.b |
| + :!rm -rf ./Xdir1 |
| + :!mkdir -p Xdir1/dir2 |
| + :let &include='^\s*%inc\s*/\zs[^/]\+\ze' |
| + :function! DotsToSlashes() |
| + : return substitute(v:fname, '\.', '/', 'g') . '.b' |
| + :endfunction |
| + :let &includeexpr='DotsToSlashes()' |
| + :e Xdir1/dir2/foo.b |
| + i%inc /bar/ |
| + :w |
| + :e Xdir1/dir2/bar.b |
| + i%inc /baz/ |
| + :w |
| + :e Xdir1/dir2/baz.b |
| + i%inc /foo/ |
| + :w |
| + :e Xbase.b |
| + :set path=Xdir1/dir2 |
| + i%inc /foo/ |
| + :w |
| + :redir! >>test.out |
| + :checkpath! |
| + :redir END |
| + :brewind |
| + ENDTEST |
| + |
| + STARTTEST |
| + :" check for 'include' with \zs and no \ze |
| + :!rm -f ./Xbase.c |
| + :!rm -rf ./Xdir1 |
| + :!mkdir -p Xdir1/dir2 |
| + :let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze' |
| + :function! StripNewlineChar() |
| + : if v:fname =~ '\n$' |
| + : return v:fname[:-2] |
| + : endif |
| + : return v:fname |
| + :endfunction |
| + :let &includeexpr='StripNewlineChar()' |
| + :e Xdir1/dir2/foo.c |
| + i%inc bar.c |
| + :w |
| + :e Xdir1/dir2/bar.c |
| + i%inc baz.c |
| + :w |
| + :e Xdir1/dir2/baz.c |
| + i%inc foo.c |
| + :w |
| + :e Xdir1/dir2/FALSE.c |
| + i%inc foo.c |
| + :w |
| + :e Xbase.c |
| + :set path=Xdir1/dir2 |
| + i%inc FALSE.c foo.c |
| + :w |
| + :redir! >>test.out |
| + :checkpath! |
| + :redir END |
| + :brewind |
| + :q |
| + ENDTEST |
| + |
| |
| |
| |
| *** 1,3 **** |
| --- 1,33 ---- |
| This file is just to test "gf" in test 17. |
| The contents is not important. |
| Just testing! |
| + |
| + |
| + --- Included files in path --- |
| + Xdir1/dir2/foo.a |
| + Xdir1/dir2/foo.a --> |
| + Xdir1/dir2/bar.a |
| + Xdir1/dir2/bar.a --> |
| + Xdir1/dir2/baz.a |
| + Xdir1/dir2/baz.a --> |
| + "foo.a" (Already listed) |
| + |
| + |
| + --- Included files in path --- |
| + Xdir1/dir2/foo.b |
| + Xdir1/dir2/foo.b --> |
| + Xdir1/dir2/bar.b |
| + Xdir1/dir2/bar.b --> |
| + Xdir1/dir2/baz.b |
| + Xdir1/dir2/baz.b --> |
| + foo (Already listed) |
| + |
| + |
| + --- Included files in path --- |
| + Xdir1/dir2/foo.c |
| + Xdir1/dir2/foo.c --> |
| + Xdir1/dir2/bar.c |
| + Xdir1/dir2/bar.c --> |
| + Xdir1/dir2/baz.c |
| + Xdir1/dir2/baz.c --> |
| + foo.c^@ (Already listed) |
| |
| |
| |
| *** 716,717 **** |
| --- 716,719 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 609, |
| /**/ |
| |
| -- |
| "The question of whether computers can think is just like the question |
| of whether submarines can swim." -- Edsger W. Dijkstra |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |