home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.4.276
- 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.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 ///
-