]> granicus.if.org Git - vim/commitdiff
updated for version 7.0171
authorBram Moolenaar <Bram@vim.org>
Fri, 16 Dec 2005 21:49:31 +0000 (21:49 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 16 Dec 2005 21:49:31 +0000 (21:49 +0000)
runtime/macros/editexisting.vim
runtime/syntax/sed.vim
src/buffer.c
src/normal.c
src/os_unix.c
src/tag.c
src/vim.h
src/xxd/xxd.c

index 2f28874aa63a837f7e3c512816c7d3065f680bcf..b062c5b2251a9c6dc96f114593fdb2f1934dfba6 100644 (file)
@@ -1,9 +1,10 @@
 " Vim Plugin:  Edit the file with an existing Vim if possible
 " Maintainer:  Bram Moolenaar
-" Last Change: 2005 Dec 11
+" Last Change: 2005 Dec 15
 
 " This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32)
-" $VIM/vimfiles/plugin directory.
+" $VIM/vimfiles/plugin directory.  Or make a symbolic link, so that you
+" automatically use the latest version.
 
 " This plugin serves two purposes:
 " 1. On startup, if we were invoked with one file name argument and the file
@@ -43,13 +44,15 @@ func s:EditElsewhere(filename)
       endif
       call remote_expr(servername, "foreground()")
 
-      " Make sure the file is visible in a window (not hidden).
-      " If v:swapcommand exists and is set, send it to the server.
-      if exists("v:swapcommand")
-       let c = substitute(v:swapcommand, "'", "''", "g")
-       call remote_expr(servername, "EditExisting('" . fname_esc . "', '" . c . "')")
-      else
-       call remote_expr(servername, "EditExisting('" . fname_esc . "', '')")
+      if remote_expr(servername, "exists('*EditExisting')")
+       " Make sure the file is visible in a window (not hidden).
+       " If v:swapcommand exists and is set, send it to the server.
+       if exists("v:swapcommand")
+         let c = substitute(v:swapcommand, "'", "''", "g")
+         call remote_expr(servername, "EditExisting('" . fname_esc . "', '" . c . "')")
+       else
+         call remote_expr(servername, "EditExisting('" . fname_esc . "', '')")
+       endif
       endif
 
       if !(has('vim_starting') && has('gui_running') && has('gui_win32'))
index 68e395bb5614feab15c7e771110cbff3511b2f95..0383b6fe4fccda2be8dd929d206e1781e48a3f85 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    sed
 " Maintainer:  Haakon Riiser <hakonrk@fys.uio.no>
 " URL:         http://folk.uio.no/hakonrk/vim/syntax/sed.vim
-" Last Change: 2003 May 11
+" Last Change: 2005 Dec 15
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -21,7 +21,7 @@ syn match sedAddress  "\d\+\~\d\+"
 syn region sedAddress   matchgroup=Special start="[{,;]\s*/\(\\/\)\="lc=1 skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
 syn region sedAddress   matchgroup=Special start="^\s*/\(\\/\)\=" skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
 syn match sedComment   "^\s*#.*$"
-syn match sedFunction  "[dDgGhHlnNpPqx=]\s*\($\|;\)" contains=sedSemicolon,sedWhitespace
+syn match sedFunction  "[dDgGhHlnNpPqQx=]\s*\($\|;\)" contains=sedSemicolon,sedWhitespace
 syn match sedLabel     ":[^;]*"
 syn match sedLineCont  "^\(\\\\\)*\\$" contained
 syn match sedLineCont  "[^\\]\(\\\\\)*\\$"ms=e contained
index 0c1915b4a4d7f7bda118315c4fdfc749843f2778..f252489c29040c2c79bd19923494b93ec1f8f2b8 100644 (file)
@@ -681,6 +681,7 @@ goto_buffer(eap, start, dir, count)
        /* Quitting means closing the split window, nothing else. */
        win_close(curwin, TRUE);
        swap_exists_action = SEA_NONE;
+       swap_exists_did_quit = TRUE;
 
 #  if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
        /* Restore the error/interrupt/exception state if not discarded by a
@@ -719,6 +720,7 @@ handle_swap_exists(old_curbuf)
         * buffer.  If that buffer is gone or the same as the current one,
         * open a new, empty buffer. */
        swap_exists_action = SEA_NONE;  /* don't want it again */
+       swap_exists_did_quit = TRUE;
        close_buffer(curwin, curbuf, DOBUF_UNLOAD);
        if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
            old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
@@ -4402,6 +4404,7 @@ ex_buffer_all(eap)
                win_close(curwin, TRUE);
                --open_wins;
                swap_exists_action = SEA_NONE;
+               swap_exists_did_quit = TRUE;
 
 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
                /* Restore the error/interrupt/exception state if not
index dfd2f0dfe2f28332925a1248b0e1294454e38853..2526de37988281b66e6e381ae9a433e92494e796 100644 (file)
@@ -2108,7 +2108,7 @@ op_colon(oap)
 }
 
 /*
- * Handle the "gy" operator: call 'operatorfunc'.
+ * Handle the "g@" operator: call 'operatorfunc'.
  */
 /*ARGSUSED*/
     void
@@ -7724,7 +7724,7 @@ nv_g_cmd(cap)
      *  "gu"       Change text to lower case.
      *  "gU"       Change text to upper case.
      *   "g?"      rot13 encoding
-     *   "gy"      call 'operatorfunc'
+     *   "g@"      call 'operatorfunc'
      */
     case 'q':
     case 'w':
@@ -7734,7 +7734,7 @@ nv_g_cmd(cap)
     case 'u':
     case 'U':
     case '?':
-    case 'y':
+    case '@':
        nv_operator(cap);
        break;
 
index 89c420d9941f68aeb55a90069e55159bd66162d5..6165e9f6ad1de0abadd70a58960f1f186964113d 100644 (file)
@@ -3539,7 +3539,7 @@ mch_call_shell(cmd, options)
     int                pty_slave_fd = -1;
     char       *tty_name;
 # endif
-    int                fd_toshell[2];      /* for pipes */
+    int                fd_toshell[2];          /* for pipes */
     int                fd_fromshell[2];
     int                pipe_error = FALSE;
 # ifdef HAVE_SETENV
@@ -3548,19 +3548,21 @@ mch_call_shell(cmd, options)
     static char        envbuf_Rows[20];
     static char        envbuf_Columns[20];
 # endif
-    int                did_settmode = FALSE; /* TRUE when settmode(TMODE_RAW) called */
+    int                did_settmode = FALSE;   /* settmode(TMODE_RAW) called */
 
     out_flush();
     if (options & SHELL_COOKED)
        settmode(TMODE_COOK);           /* set to normal mode */
 
-    /*
-     * 1: find number of arguments
-     * 2: separate them and built argv[]
-     */
     newcmd = vim_strsave(p_sh);
     if (newcmd == NULL)                /* out of memory */
        goto error;
+
+    /*
+     * Do this loop twice:
+     * 1: find number of arguments
+     * 2: separate them and build argv[]
+     */
     for (i = 0; i < 2; ++i)
     {
        p = newcmd;
@@ -3655,6 +3657,7 @@ mch_call_shell(cmd, options)
 # ifdef __BEOS__
        beos_cleanup_read_thread();
 # endif
+
        if ((pid = fork()) == -1)       /* maybe we should use vfork() */
        {
            MSG_PUTS(_("\nCannot fork\n"));
@@ -3728,17 +3731,24 @@ mch_call_shell(cmd, options)
            {
 
 # ifdef HAVE_SETSID
-               (void)setsid();
+               /* Create our own process group, so that the child and all its
+                * children can be kill()ed.  Don't do this when using pipes,
+                * because stdin is not a tty, we would loose /dev/tty. */
+               if (p_stmp)
+                   (void)setsid();
 # endif
 # ifdef FEAT_GUI
-               /* push stream discipline modules */
-               if (options & SHELL_COOKED)
-                   SetupSlavePTY(pty_slave_fd);
+               if (pty_slave_fd >= 0)
+               {
+                   /* push stream discipline modules */
+                   if (options & SHELL_COOKED)
+                       SetupSlavePTY(pty_slave_fd);
 #  ifdef TIOCSCTTY
-               /* try to become controlling tty (probably doesn't work,
-                * unless run by root) */
-               ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL);
+                   /* Try to become controlling tty (probably doesn't work,
+                    * unless run by root) */
+                   ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL);
 #  endif
+               }
 # endif
                /* Simulate to have a dumb terminal (for now) */
 # ifdef HAVE_SETENV
@@ -3895,7 +3905,7 @@ mch_call_shell(cmd, options)
                old_State = State;
                State = EXTERNCMD;      /* don't redraw at window resize */
 
-               if (options & SHELL_WRITE && toshell_fd >= 0)
+               if ((options & SHELL_WRITE) && toshell_fd >= 0)
                {
                    /* Fork a process that will write the lines to the
                     * external program. */
@@ -3976,6 +3986,8 @@ mch_call_shell(cmd, options)
                     * Don't do this when filtering and terminal is in cooked
                     * mode, the shell command will handle the I/O.  Avoids
                     * that a typed password is echoed for ssh or gpg command.
+                    * Don't get characters when the child has already
+                    * finished (wait_pid == 0).
                     * Don't get extra characters when we already have one.
                     * Don't read characters unless we didn't get output for a
                     * while, avoids that ":r !ls" eats typeahead.
@@ -3989,6 +4001,7 @@ mch_call_shell(cmd, options)
                                                    || gui.in_use
 #endif
                                                    )
+                           && wait_pid == 0
                            && (ta_len > 0
                                || (noread_cnt > 4
                                    && (len = ui_inchar(ta_buf,
@@ -4207,6 +4220,11 @@ mch_call_shell(cmd, options)
                            break;
                    }
 
+                   /* If we already detected the child has finished break the
+                    * loop now. */
+                   if (wait_pid == pid)
+                       break;
+
                    /*
                     * Check if the child still exists, before checking for
                     * typed characters (otherwise we would loose typeahead).
@@ -4219,10 +4237,14 @@ mch_call_shell(cmd, options)
                    if ((wait_pid == (pid_t)-1 && errno == ECHILD)
                            || (wait_pid == pid && WIFEXITED(status)))
                    {
+                       /* Don't break the loop yet, try reading more
+                        * characters from "fromshell_fd" first.  When using
+                        * pipes there might still be something to read and
+                        * then we'll break the loop at the "break" above. */
                        wait_pid = pid;
-                       break;
                    }
-                   wait_pid = 0;
+                   else
+                       wait_pid = 0;
                }
 finished:
                p_more = p_more_save;
index 440e220e8f79f881169732dab1c4da1456bdc406..a9d4d7555300f34958fabf4a7bddd0edba427d8c 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -2419,7 +2419,8 @@ get_tagfname(first, buf)
                                              , TRUE, found_tagfile_cb, NULL);
            hf_idx = 0;
        }
-       else if (hf_idx >= tag_fnames.ga_len)
+
+       if (hf_idx >= tag_fnames.ga_len)
        {
            /* Not found in 'runtimepath', use 'helpfile', if it exists and
             * wasn't used yet, replacing "help.txt" with "tags". */
index 69092ee7b00a7fb9873e5954a46f3eb7d8f7ae7d..9fc38f52f38ecf7c26a7e7ef6bfe72c67194e398 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -1201,7 +1201,7 @@ typedef enum
 #define OP_FOLDDEL     24      /* "zd" delete folds */
 #define OP_FOLDDELREC  25      /* "zD" delete folds recursively */
 #define OP_FORMAT2     26      /* "gw" format operator, keeps cursor pos */
-#define OP_FUNCTION    27      /* "gy" call 'operatorfunc' */
+#define OP_FUNCTION    27      /* "g@" call 'operatorfunc' */
 
 /*
  * Motion types, used for operators and for yank/delete registers.
index 299ba37f78d571eee0c5bb468be7ab640b50a7ad..2b553dd6bbf0244c276e11c58352fb26837df2fd 100644 (file)
@@ -146,16 +146,18 @@ char osver[] = "";
 #if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__))
 # define CYGWIN
 #endif
-#if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(CYGWIN)
+#if defined(MSDOS) || defined(WIN32) || defined(OS2)
 # define BIN_READ(yes)  ((yes) ? "rb" : "rt")
 # define BIN_WRITE(yes) ((yes) ? "wb" : "wt")
 # define BIN_CREAT(yes) ((yes) ? (O_CREAT|O_BINARY) : O_CREAT)
 # define BIN_ASSIGN(fp, yes) setmode(fileno(fp), (yes) ? O_BINARY : O_TEXT)
-# if defined(CYGWIN)
-#  define PATH_SEP '/'
-# else
-#  define PATH_SEP '\\'
-# endif
+# define PATH_SEP '\\'
+#elif defined(CYGWIN)
+# define BIN_READ(yes)  ((yes) ? "rb" : "rt")
+# define BIN_WRITE(yes) ((yes) ? "wb" : "w")
+# define BIN_CREAT(yes) ((yes) ? (O_CREAT|O_BINARY) : O_CREAT)
+# define BIN_ASSIGN(fp, yes) ((yes) ? (void) setmode(fileno(fp), O_BINARY) : (void) (fp))
+# define PATH_SEP '/'
 #else
 # ifdef VMS
 #  define BIN_READ(dummy)  "r"