diff --git a/7.4.276 b/7.4.276 new file mode 100644 index 0000000..ab4f310 --- /dev/null +++ b/7.4.276 @@ -0,0 +1,302 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.276 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.276 +Problem: The fish shell is not supported. +Solution: Use begin/end instead of () for fish. (Andy Russell) +Files: src/ex_cmds.c, src/misc1.c, src/option.c, src/proto/misc1.pro + + +*** ../vim-7.4.275/src/ex_cmds.c 2014-05-07 14:38:41.129091709 +0200 +--- src/ex_cmds.c 2014-05-07 15:09:57.797108136 +0200 +*************** +*** 1551,1558 **** + { + char_u *buf; + long_u len; + +! len = (long_u)STRLEN(cmd) + 3; /* "()" + NUL */ + if (itmp != NULL) + len += (long_u)STRLEN(itmp) + 9; /* " { < " + " } " */ + if (otmp != NULL) +--- 1551,1566 ---- + { + char_u *buf; + long_u len; ++ int is_fish_shell; + +! #if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2) +! /* Account for fish's different syntax for subshells */ +! is_fish_shell = (fnamecmp(get_isolated_shell_name(), "fish") == 0); +! if (is_fish_shell) +! len = (long_u)STRLEN(cmd) + 13; /* "begin; " + "; end" + NUL */ +! else +! #endif +! len = (long_u)STRLEN(cmd) + 3; /* "()" + NUL */ + if (itmp != NULL) + len += (long_u)STRLEN(itmp) + 9; /* " { < " + " } " */ + if (otmp != NULL) +*************** +*** 1567,1573 **** + * redirecting input and/or output. + */ + if (itmp != NULL || otmp != NULL) +! vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); + else + STRCPY(buf, cmd); + if (itmp != NULL) +--- 1575,1586 ---- + * redirecting input and/or output. + */ + if (itmp != NULL || otmp != NULL) +! { +! if (is_fish_shell) +! vim_snprintf((char *)buf, len, "begin; %s; end", (char *)cmd); +! else +! vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); +! } + else + STRCPY(buf, cmd); + if (itmp != NULL) +*************** +*** 1577,1583 **** + } + #else + /* +! * for shells that don't understand braces around commands, at least allow + * the use of commands in a pipe. + */ + STRCPY(buf, cmd); +--- 1590,1596 ---- + } + #else + /* +! * For shells that don't understand braces around commands, at least allow + * the use of commands in a pipe. + */ + STRCPY(buf, cmd); +*************** +*** 4315,4321 **** + pos_T old_cursor = curwin->w_cursor; + int start_nsubs; + #ifdef FEAT_EVAL +! int save_ma = 0; + #endif + + cmd = eap->arg; +--- 4328,4334 ---- + pos_T old_cursor = curwin->w_cursor; + int start_nsubs; + #ifdef FEAT_EVAL +! int save_ma = 0; + #endif + + cmd = eap->arg; +*************** +*** 5986,5992 **** + "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=", + "\\[count]", "\\[quotex]", "\\[range]", + "\\[pattern]", "\\\\bar", "/\\\\%\\$", +! "s/\\\\\\~", "s/\\\\U", "s/\\\\L", + "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"}; + int flags; + +--- 5999,6005 ---- + "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=", + "\\[count]", "\\[quotex]", "\\[range]", + "\\[pattern]", "\\\\bar", "/\\\\%\\$", +! "s/\\\\\\~", "s/\\\\U", "s/\\\\L", + "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"}; + int flags; + +*************** +*** 6026,6032 **** + /* Replace: + * "[:...:]" with "\[:...:]" + * "[++...]" with "\[++...]" +! * "\{" with "\\{" -- matching "} \}" + */ + if ((arg[0] == '[' && (arg[1] == ':' + || (arg[1] == '+' && arg[2] == '+'))) +--- 6039,6045 ---- + /* Replace: + * "[:...:]" with "\[:...:]" + * "[++...]" with "\[++...]" +! * "\{" with "\\{" -- matching "} \}" + */ + if ((arg[0] == '[' && (arg[1] == ':' + || (arg[1] == '+' && arg[2] == '+'))) +*** ../vim-7.4.275/src/misc1.c 2014-04-05 19:44:36.903160723 +0200 +--- src/misc1.c 2014-05-07 15:04:25.921105231 +0200 +*************** +*** 1405,1411 **** + #ifdef FEAT_SMARTINDENT + if (did_si) + { +! int sw = (int)get_sw_value(curbuf); + + if (p_sr) + newindent -= newindent % sw; +--- 1405,1411 ---- + #ifdef FEAT_SMARTINDENT + if (did_si) + { +! int sw = (int)get_sw_value(curbuf); + + if (p_sr) + newindent -= newindent % sw; +*************** +*** 10896,10898 **** +--- 10896,10936 ---- + { + return (p_im && stuff_empty() && typebuf_typed()); + } ++ ++ /* ++ * Returns the isolated name of the shell: ++ * - Skip beyond any path. E.g., "/usr/bin/csh -f" -> "csh -f". ++ * - Remove any argument. E.g., "csh -f" -> "csh". ++ * But don't allow a space in the path, so that this works: ++ * "/usr/bin/csh --rcfile ~/.cshrc" ++ * But don't do that for Windows, it's common to have a space in the path. ++ */ ++ char_u * ++ get_isolated_shell_name() ++ { ++ char_u *p; ++ ++ #ifdef WIN3264 ++ p = gettail(p_sh); ++ p = vim_strnsave(p, (int)(skiptowhite(p) - p)); ++ #else ++ p = skiptowhite(p_sh); ++ if (*p == NUL) ++ { ++ /* No white space, use the tail. */ ++ p = vim_strsave(gettail(p_sh)); ++ } ++ else ++ { ++ char_u *p1, *p2; ++ ++ /* Find the last path separator before the space. */ ++ p1 = p_sh; ++ for (p2 = p_sh; p2 < p; mb_ptr_adv(p2)) ++ if (vim_ispathsep(*p2)) ++ p1 = p2 + 1; ++ p = vim_strnsave(p1, (int)(p - p1)); ++ } ++ #endif ++ return p; ++ } +*** ../vim-7.4.275/src/option.c 2014-03-23 15:12:29.931264336 +0100 +--- src/option.c 2014-05-07 15:05:14.117105653 +0200 +*************** +*** 3804,3840 **** + else + do_sp = !(options[idx_sp].flags & P_WAS_SET); + #endif +! +! /* +! * Isolate the name of the shell: +! * - Skip beyond any path. E.g., "/usr/bin/csh -f" -> "csh -f". +! * - Remove any argument. E.g., "csh -f" -> "csh". +! * But don't allow a space in the path, so that this works: +! * "/usr/bin/csh --rcfile ~/.cshrc" +! * But don't do that for Windows, it's common to have a space in the path. +! */ +! #ifdef WIN3264 +! p = gettail(p_sh); +! p = vim_strnsave(p, (int)(skiptowhite(p) - p)); +! #else +! p = skiptowhite(p_sh); +! if (*p == NUL) +! { +! /* No white space, use the tail. */ +! p = vim_strsave(gettail(p_sh)); +! } +! else +! { +! char_u *p1, *p2; +! +! /* Find the last path separator before the space. */ +! p1 = p_sh; +! for (p2 = p_sh; p2 < p; mb_ptr_adv(p2)) +! if (vim_ispathsep(*p2)) +! p1 = p2 + 1; +! p = vim_strnsave(p1, (int)(p - p1)); +! } +! #endif + if (p != NULL) + { + /* +--- 3804,3810 ---- + else + do_sp = !(options[idx_sp].flags & P_WAS_SET); + #endif +! p = get_isolated_shell_name(); + if (p != NULL) + { + /* +*************** +*** 3875,3880 **** +--- 3845,3851 ---- + || fnamecmp(p, "zsh") == 0 + || fnamecmp(p, "zsh-beta") == 0 + || fnamecmp(p, "bash") == 0 ++ || fnamecmp(p, "fish") == 0 + # ifdef WIN3264 + || fnamecmp(p, "cmd") == 0 + || fnamecmp(p, "sh.exe") == 0 +*************** +*** 8858,8865 **** + * opt_type). Uses + * + * Returned flags: +! * 0 hidden or unknown option, also option that does not have requested +! * type (see SREQ_* in vim.h) + * see SOPT_* in vim.h for other flags + * + * Possible opt_type values: see SREQ_* in vim.h +--- 8829,8836 ---- + * opt_type). Uses + * + * Returned flags: +! * 0 hidden or unknown option, also option that does not have requested +! * type (see SREQ_* in vim.h) + * see SOPT_* in vim.h for other flags + * + * Possible opt_type values: see SREQ_* in vim.h +*** ../vim-7.4.275/src/proto/misc1.pro 2014-04-05 19:44:36.903160723 +0200 +--- src/proto/misc1.pro 2014-05-07 14:57:04.605101368 +0200 +*************** +*** 103,106 **** +--- 103,107 ---- + char_u *get_cmd_output __ARGS((char_u *cmd, char_u *infile, int flags, int *ret_len)); + void FreeWild __ARGS((int count, char_u **files)); + int goto_im __ARGS((void)); ++ char_u *get_isolated_shell_name __ARGS((void)); + /* vim: set ft=c : */ +*** ../vim-7.4.275/src/version.c 2014-05-07 14:38:41.129091709 +0200 +--- src/version.c 2014-05-07 14:58:59.769102376 +0200 +*************** +*** 736,737 **** +--- 736,739 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 276, + /**/ + +-- +Support your right to bare arms! Wear short sleeves! + + /// 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 ///