changeset 8281:74b15ed0a259 v7.4.1433

commit https://github.com/vim/vim/commit/85b11769ab507c7df93f319fd964fa579701b76b Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 27 18:13:23 2016 +0100 patch 7.4.1433 Problem: The Sniff interface is no longer useful, the tool has not been available for may years. Solution: Delete the Sniff interface and related code.
author Christian Brabandt <cb@256bit.org>
date Sat, 27 Feb 2016 18:15:07 +0100
parents 65bed5ff0ba6
children 979b6b144d70
files runtime/doc/if_sniff.txt src/Make_mvc.mak src/Make_vms.mms src/Makefile src/auto/configure src/charset.c src/config.h.in src/config.mk.in src/configure.in src/edit.c src/eval.c src/ex_cmds.h src/ex_cmds2.c src/ex_docmd.c src/ex_getln.c src/feature.h src/gui_gtk_x11.c src/gui_w32.c src/gui_x11.c src/if_sniff.c src/if_sniff.h src/keymap.h src/normal.c src/os_unix.c src/os_win32.c src/structs.h src/term.c src/ui.c src/version.c src/vim.h
diffstat 30 files changed, 26 insertions(+), 1646 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/if_sniff.txt
+++ b/runtime/doc/if_sniff.txt
@@ -1,95 +1,11 @@
-*if_sniff.txt*	For Vim version 7.4.  Last change: 2005 Mar 29
+*if_sniff.txt*	For Vim version 7.4.  Last change: 2016 Feb 27
 
 
 		  VIM REFERENCE MANUAL
 		by Anton Leherbauer (toni@takefive.co.at)
 
 
-SNiFF+ and Vim				    *sniff*
-
-1. Introduction				    |sniff-intro|
-2. Commands				    |sniff-commands|
-3. Compiling Vim with SNiFF+ interface	    |sniff-compiling|
-
-{Vi does not have any of these commands}  *E275* *E274* *E276* *E278* *E279*
-
-The SNiFF+ interface only works, when Vim was compiled with the |+sniff|
-feature.
-
-==============================================================================
-1. Introduction					*sniff-intro*
-
-The following features for the use with SNiFF+ are available:
-
-   * Vim can be used for all editing requests
-   * SNiFF+ recognizes and updates all browsers when a file is saved in Vim
-   * SNiFF+ commands can be issued directly from Vim
-
-How to use Vim with SNiFF+
-   1. Make sure SNiFF+ is running.
-   2. In the Editor view of the Preferences dialog set the Field named
-      'External Editor' to 'Emacs/Vim'.
-   4. Start Vim
-   5. Connect to SNiFF+ (:sniff connect)
-
-Once a connection is established, SNiFF+ uses Vim for all requests to show or
-edit source code.  On the other hand, you can send queries to SNiFF+ with the
-:sniff command.
-
-==============================================================================
-2. Commands				    *sniff-commands*
-
-			    *:sniff* *:sni*
-:sni[ff] request [symbol]   Send request to sniff with optional symbol.
-			    {not in Vi}
-:sni[ff]		    Display all possible requests and the connection
-			    status
-
-Most requests require a symbol (identifier) as parameter.  If it is omitted,
-Vim will use the current word under the cursor.
-The available requests are listed below:
-
-request		      mapping	description
--------------------------------------------------------------------------------
-connect			sc	Establish connection with SNiFF+.
-				Make sure SNiFF+ is prepared for this in the
-				Preferences
-disconnect		sq	Disconnect from SNiFF+.  You can reconnect any
-				time with :sniff connect (or 'sc')
-toggle			st	Toggle between implementation
-				and definition file
-find-symbol		sf	Load the symbol into a Symbol Browser
-browse-class		sb	Loads the class into a Class Browser
-superclass		ss	Edit superclass of symbol
-overridden		so	Edit overridden method of symbol
-retrieve-file		srf	Retrieve symbol in current file
-retrieve-project	srp	Retrieve symbol in current project
-retrieve-all-projects	srP	Retrieve symbol in all projects
-retrieve-next		sR	Retrieve symbol using current Retriever
-				settings
-goto-symbol		sg	Goto definition or implementation of symbol
-hierarchy		sh	Load symbol into the Hierarchy Browser
-restr-hier		sH	same as above but show only related classes
-xref-to			sxt	Start a refers-to query on symbol and
-				load the results into the Cross Referencer
-xref-by			sxb	Start a referred-by query on symbol
-xref-has		sxh	Start a refers-to components query on symbol
-xref-used-by		sxu	Start a referred-by as component query on
-				symbol
-show-docu		sd	Show documentation of symbol
-gen-docu		sD	Generate documentation of symbol
-
-The mappings are defined in a file 'sniff.vim', which is part of every SNiFF+
-product ($SNIFF_DIR/config/sniff.vim).  This file is sourced whenever Vim
-connects to SNiFF+.
-
-==============================================================================
-3. Compiling Vim with SNiFF+ interface		*sniff-compiling*
-
-To compile Vim with SNiFF+ support, you need two source files of the extra
-archive: if_sniff.c and if_sniff.h.
-On Unix: Edit the Makefile and uncomment the line "--enable-sniff".  Or run
-configure manually with this argument.
-On NT: Specify SNIFF=yes with your make command.
+The SNiFF+ support was removed at patch 7.4.1433.  If you want to check it out
+sync to before that.
 
  vim:tw=78:ts=8:ft=help:norl:
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -82,8 +82,6 @@
 #	  TCL_VER_LONG=[Tcl version, eg 8.3] (default is 8.3)
 #	    You must set TCL_VER_LONG when you set TCL_VER.
 #
-#	SNiFF+ interface: SNIFF=yes
-#
 #	Cscope support: CSCOPE=yes
 #
 #	Iconv library support (always dynamically loaded):
@@ -269,16 +267,6 @@ WP64CHECK = /Wp64
 CTAGS = ctags
 !endif
 
-!if "$(SNIFF)" == "yes"
-# SNIFF - Include support for SNiFF+.
-SNIFF_INCL  = if_sniff.h
-SNIFF_OBJ   = $(OBJDIR)/if_sniff.obj
-SNIFF_LIB   = shell32.lib
-SNIFF_DEFS  = -DFEAT_SNIFF
-# The SNiFF integration needs multithreaded libraries!
-MULTITHREADED = yes
-!endif
-
 !ifndef CSCOPE
 CSCOPE = yes
 !endif
@@ -380,7 +368,7 @@ WINVER = 0x0501
 #VIMRUNTIMEDIR = somewhere
 
 CFLAGS = -c /W3 /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
-		$(SNIFF_DEFS) $(CSCOPE_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
+		$(CSCOPE_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
 		$(NBDEBUG_DEFS) $(XPM_DEFS) \
 		$(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
 		/Fo$(OUTDIR)/ 
@@ -528,7 +516,7 @@ CFLAGS = $(CFLAGS) /Zl /MTd
 !endif # DEBUG
 
 INCL =	vim.h os_win32.h ascii.h feature.h globals.h keymap.h macros.h \
-	proto.h option.h structs.h term.h $(SNIFF_INCL) $(CSCOPE_INCL) \
+	proto.h option.h structs.h term.h $(CSCOPE_INCL) \
 	$(NBDEBUG_INCL)
 
 OBJ = \
@@ -997,7 +985,7 @@ conflags = $(conflags) /map /mapinfo:lin
 !ENDIF
 
 LINKARGS1 = $(linkdebug) $(conflags)
-LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) user32.lib $(SNIFF_LIB) \
+LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) user32.lib \
 		$(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \
 		$(TCL_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(LINK_PDB)
 
@@ -1020,12 +1008,12 @@ all:	$(VIM).exe \
 
 $(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
 		$(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
-		$(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
+		$(CSCOPE_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
 		version.c version.h
 	$(CC) $(CFLAGS) version.c
 	$(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(OLE_OBJ) \
 		$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
-		$(TCL_OBJ) $(SNIFF_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+		$(TCL_OBJ) $(CSCOPE_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
 		$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
 	if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
 
@@ -1212,9 +1200,6 @@ lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).l
 $(OUTDIR)/if_ruby.obj: $(OUTDIR) if_ruby.c  $(INCL)
 	$(CC) $(CFLAGS) $(RUBY_INC) if_ruby.c
 
-$(OUTDIR)/if_sniff.obj:	$(OUTDIR) if_sniff.c  $(INCL)
-	$(CC) $(CFLAGS) if_sniff.c
-
 $(OUTDIR)/if_tcl.obj: $(OUTDIR) if_tcl.c  $(INCL)
 	$(CC) $(CFLAGS) $(TCL_INC) if_tcl.c
 
--- a/src/Make_vms.mms
+++ b/src/Make_vms.mms
@@ -2,7 +2,7 @@
 # Makefile for Vim on OpenVMS
 #
 # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
-# Last change:  2016 Jan 22
+# Last change:  2016 Feb 27
 #
 # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
 # with MMS and MMK
@@ -66,7 +66,6 @@ CCVER = YES
 # VIM_PERL   = YES
 # VIM_PYTHON = YES
 # VIM_RUBY   = YES
-# VIM_SNIFF  = YES
 
 # X Input Method.  For entering special languages like chinese and
 # Japanese. Please define just one: VIM_XIM or VIM_HANGULIN
@@ -228,15 +227,6 @@ TCL_LIB = ,OS_VMS_TCL.OPT/OPT
 TCL_INC = ,dka0:[tcl80.generic]
 .ENDIF
 
-.IFDEF VIM_SNIFF
-# SNIFF related setup.
-SNIFF_DEF = ,"FEAT_SNIFF"
-SNIFF_SRC = if_sniff.c
-SNIFF_OBJ = if_sniff.obj
-SNIFF_LIB =
-SNIFF_INC =
-.ENDIF
-
 .IFDEF VIM_RUBY
 # RUBY related setup.
 RUBY_DEF = ,"FEAT_RUBY"
@@ -293,7 +283,7 @@ VIMHOST = "''F$TRNLNM("SYS$NODE")'''F$TR
 .SUFFIXES : .obj .c
 
 ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
- $(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
+ $(TCL_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
  $(CFLAGS)$(GUI_FLAG) -
  /include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
 
@@ -302,12 +292,12 @@ ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(
 # as $(GUI_INC) - replaced with $(GUI_INC_VER)
 # Otherwise should not be any other difference.
 ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
- $(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
+ $(TCL_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
  $(CFLAGS)$(GUI_FLAG) -
  /include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC_VER)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
 
 ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) \
-	   $(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(SNIFF_LIB) $(RUBY_LIB)
+	   $(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(RUBY_LIB)
 
 SRC =	blowfish.c buffer.c charset.c crypt.c, crypt_zip.c diff.c digraph.c edit.c eval.c ex_cmds.c ex_cmds2.c \
 	ex_docmd.c ex_eval.c ex_getln.c if_xcmdsrv.c fileio.c fold.c getchar.c \
@@ -315,7 +305,7 @@ SRC =	blowfish.c buffer.c charset.c cryp
 	misc2.c move.c normal.c ops.c option.c popupmnu.c quickfix.c regexp.c search.c sha256.c\
 	spell.c syntax.c tag.c term.c termlib.c ui.c undo.c version.c screen.c \
 	window.c os_unix.c os_vms.c pathdef.c \
-	$(GUI_SRC) $(PERL_SRC) $(PYTHON_SRC) $(TCL_SRC) $(SNIFF_SRC) \
+	$(GUI_SRC) $(PERL_SRC) $(PYTHON_SRC) $(TCL_SRC) \
 	$(RUBY_SRC) $(HANGULIN_SRC) $(MZSCH_SRC)
 
 OBJ =	blowfish.obj buffer.obj charset.obj crypt.obj, crypt_zip.obj diff.obj digraph.obj edit.obj eval.obj \
@@ -326,7 +316,7 @@ OBJ =	blowfish.obj buffer.obj charset.ob
 	regexp.obj search.obj sha256.obj spell.obj syntax.obj tag.obj term.obj termlib.obj \
 	ui.obj undo.obj screen.obj version.obj window.obj os_unix.obj \
 	os_vms.obj pathdef.obj if_mzsch.obj\
-	$(GUI_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(TCL_OBJ) $(SNIFF_OBJ) \
+	$(GUI_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(TCL_OBJ) \
 	$(RUBY_OBJ) $(HANGULIN_OBJ) $(MZSCH_OBJ)
 
 # Default target is making the executable
@@ -778,10 +768,6 @@ if_ruby.obj : if_ruby.c vim.h [.auto]con
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h version.h
-if_sniff.obj : if_sniff.c vim.h [.auto]config.h feature.h os_unix.h \
- ascii.h keymap.h term.h macros.h structs.h regexp.h \
- gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
- globals.h farsi.h arabic.h os_unixx.h
 gui_beval.obj : gui_beval.c vim.h [.auto]config.h feature.h os_unix.h \
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
--- a/src/Makefile
+++ b/src/Makefile
@@ -466,9 +466,6 @@ CClink = $(CC)
 # Uncomment this when you do not want inter process communication.
 #CONF_OPT_CHANNEL = --disable-channel
 
-# SNIFF - Include support for SNiFF+.
-#CONF_OPT_SNIFF = --enable-sniff
-
 # MULTIBYTE - To edit multi-byte characters.
 # Uncomment this when you want to edit a multibyte language.
 # It's automatically enabled with normal features, GTK or IME support.
@@ -1391,7 +1388,7 @@ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
 
 LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(TCL_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
 
-LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
+LINT_EXTRA = -DHANGUL_INPUT -D"__attribute__(x)="
 
 DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS)
 
@@ -1532,14 +1529,13 @@ SRC =	$(BASIC_SRC) \
 	$(PYTHON_SRC) $(PYTHON3_SRC) \
 	$(TCL_SRC) \
 	$(RUBY_SRC) \
-	$(SNIFF_SRC) \
 	$(WORKSHOP_SRC) \
 	$(WSDEBUG_SRC)
 
 TAGS_SRC = *.c *.cpp if_perl.xs
 
 EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \
-	    if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
+	    if_python.c if_python3.c if_tcl.c if_ruby.c \
 	    gui_beval.c workshop.c wsdebug.c integration.c \
 	    netbeans.c channel.c \
 	    $(GRESOURCE_SRC)
@@ -1561,7 +1557,7 @@ ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(
 # The perl sources also don't work well with lint.
 LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) \
 	   $(PYTHON_SRC) $(PYTHON3_SRC) $(TCL_SRC) \
-	   $(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) \
+	   $(WORKSHOP_SRC) $(WSDEBUG_SRC) \
 	   $(NETBEANS_SRC) $(CHANNEL_SRC)
 #LINT_SRC = $(SRC)
 #LINT_SRC = $(ALL_SRC)
@@ -1611,7 +1607,6 @@ OBJ_COMMON = \
 	objects/sha256.o \
 	objects/spell.o \
 	objects/syntax.o \
-	$(SNIFF_OBJ) \
 	objects/tag.o \
 	objects/term.o \
 	objects/ui.o \
@@ -1750,7 +1745,7 @@ config auto/config.mk: auto/configure co
 		$(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
 		$(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
 		$(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
-		$(CONF_OPT_SNIFF) $(CONF_OPT_FEAT) $(CONF_TERM_LIB) \
+		$(CONF_OPT_FEAT) $(CONF_TERM_LIB) \
 		$(CONF_OPT_COMPBY) $(CONF_OPT_ACL) $(CONF_OPT_NETBEANS) \
 		$(CONF_OPT_CHANNEL) \
 		$(CONF_ARGS) $(CONF_OPT_MZSCHEME) $(CONF_OPT_PLTHOME) \
@@ -2815,9 +2810,6 @@ objects/if_python3.o: if_python3.c if_py
 objects/if_ruby.o: if_ruby.c
 	$(CCC) $(RUBY_CFLAGS) -o $@ if_ruby.c
 
-objects/if_sniff.o: if_sniff.c
-	$(CCC) -o $@ if_sniff.c
-
 objects/if_tcl.o: if_tcl.c
 	$(CCC) $(TCL_CFLAGS) -o $@ if_tcl.c
 
@@ -3364,10 +3356,6 @@ objects/if_ruby.o: if_ruby.c auto/config
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
  farsi.h arabic.h version.h
-objects/if_sniff.o: if_sniff.c vim.h auto/config.h feature.h os_unix.h \
- auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
- regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h \
- globals.h farsi.h arabic.h os_unixx.h
 objects/gui_beval.o: gui_beval.c vim.h auto/config.h feature.h os_unix.h \
  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
  regexp.h gui.h gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h \
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -653,8 +653,6 @@ X_PRE_LIBS
 X_CFLAGS
 XMKMF
 xmkmfpath
-SNIFF_OBJ
-SNIFF_SRC
 CHANNEL_OBJ
 CHANNEL_SRC
 NETBEANS_OBJ
@@ -812,7 +810,6 @@ enable_cscope
 enable_workshop
 enable_netbeans
 enable_channel
-enable_sniff
 enable_multibyte
 enable_hangulinput
 enable_xim
@@ -1477,7 +1474,6 @@ Optional Features:
   --enable-workshop       Include Sun Visual Workshop support.
   --disable-netbeans      Disable NetBeans integration support.
   --disable-channel      Disable process communication support.
-  --enable-sniff          Include Sniff interface.
   --enable-multibyte      Include multibyte editing support.
   --enable-hangulinput    Include Hangul input support.
   --enable-xim            Include XIM input support.
@@ -7439,26 +7435,6 @@ if test "$enable_channel" = "yes"; then
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-sniff argument" >&5
-$as_echo_n "checking --enable-sniff argument... " >&6; }
-# Check whether --enable-sniff was given.
-if test "${enable_sniff+set}" = set; then :
-  enableval=$enable_sniff;
-else
-  enable_sniff="no"
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_sniff" >&5
-$as_echo "$enable_sniff" >&6; }
-if test "$enable_sniff" = "yes"; then
-  $as_echo "#define FEAT_SNIFF 1" >>confdefs.h
-
-  SNIFF_SRC="if_sniff.c"
-
-  SNIFF_OBJ="objects/if_sniff.o"
-
-fi
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-multibyte argument" >&5
 $as_echo_n "checking --enable-multibyte argument... " >&6; }
 # Check whether --enable-multibyte was given.
--- a/src/charset.c
+++ b/src/charset.c
@@ -1761,8 +1761,7 @@ skiptowhite(char_u *p)
     return p;
 }
 
-#if defined(FEAT_LISTCMDS) || defined(FEAT_SIGNS) || defined(FEAT_SNIFF) \
-	|| defined(PROTO)
+#if defined(FEAT_LISTCMDS) || defined(FEAT_SIGNS) || defined(PROTO)
 /*
  * skiptowhite_esc: Like skiptowhite(), but also skip escaped chars
  */
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -362,9 +362,6 @@
 /* Define for linking via dlopen() or LoadLibrary() */
 #undef DYNAMIC_TCL
 
-/* Define if you want to include the Sniff interface. */
-#undef FEAT_SNIFF
-
 /* Define if you want to add support for ACL */
 #undef HAVE_POSIX_ACL
 #undef HAVE_SOLARIS_ZFS_ACL
--- a/src/config.mk.in
+++ b/src/config.mk.in
@@ -99,9 +99,6 @@ RUBY_PRO	= @RUBY_PRO@
 RUBY_CFLAGS	= @RUBY_CFLAGS@
 RUBY_LIBS	= @RUBY_LIBS@
 
-SNIFF_SRC	= @SNIFF_SRC@
-SNIFF_OBJ	= @SNIFF_OBJ@
-
 AWK		= @AWK@
 
 STRIP		= @STRIP@
--- a/src/configure.in
+++ b/src/configure.in
@@ -2021,19 +2021,6 @@ if test "$enable_channel" = "yes"; then
   AC_SUBST(CHANNEL_OBJ)
 fi
 
-AC_MSG_CHECKING(--enable-sniff argument)
-AC_ARG_ENABLE(sniff,
-	[  --enable-sniff          Include Sniff interface.], ,
-	[enable_sniff="no"])
-AC_MSG_RESULT($enable_sniff)
-if test "$enable_sniff" = "yes"; then
-  AC_DEFINE(FEAT_SNIFF)
-  SNIFF_SRC="if_sniff.c"
-  AC_SUBST(SNIFF_SRC)
-  SNIFF_OBJ="objects/if_sniff.o"
-  AC_SUBST(SNIFF_OBJ)
-fi
-
 AC_MSG_CHECKING(--enable-multibyte argument)
 AC_ARG_ENABLE(multibyte,
 	[  --enable-multibyte      Include multibyte editing support.], ,
--- a/src/edit.c
+++ b/src/edit.c
@@ -1052,12 +1052,6 @@ doESCkey:
 	case K_SELECT:	/* end of Select mode mapping - ignore */
 	    break;
 
-#ifdef FEAT_SNIFF
-	case K_SNIFF:	/* Sniff command received */
-	    stuffcharReadbuff(K_SNIFF);
-	    goto doESCkey;
-#endif
-
 	case K_HELP:	/* Help key works like <ESC> <Help> */
 	case K_F1:
 	case K_XF1:
--- a/src/eval.c
+++ b/src/eval.c
@@ -13930,9 +13930,6 @@ f_has(typval_T *argvars, typval_T *rettv
 #ifdef FEAT_SMARTINDENT
 	"smartindent",
 #endif
-#ifdef FEAT_SNIFF
-	"sniff",
-#endif
 #ifdef STARTUPTIME
 	"startuptime",
 #endif
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1281,9 +1281,6 @@ EX(CMD_smenu,		"smenu",	ex_menu,
 EX(CMD_snext,		"snext",	ex_next,
 			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
 			ADDR_LINES),
-EX(CMD_sniff,		"sniff",	ex_sniff,
-			EXTRA|TRLBAR,
-			ADDR_LINES),
 EX(CMD_snomagic,	"snomagic",	ex_submagic,
 			RANGE|WHOLEFOLD|EXTRA|CMDWIN,
 			ADDR_LINES),
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -131,9 +131,6 @@ do_debug(char_u *cmd)
     redir_off = TRUE;		/* don't redirect debug commands */
 
     State = NORMAL;
-#ifdef FEAT_SNIFF
-    want_sniff_request = 0;    /* No K_SNIFF wanted */
-#endif
 
     if (!debug_did_msg)
 	MSG(_("Entering Debug mode.  Type \"cont\" to continue."));
@@ -151,9 +148,7 @@ do_debug(char_u *cmd)
     {
 	msg_scroll = TRUE;
 	need_wait_return = FALSE;
-#ifdef FEAT_SNIFF
-	ProcessSniffRequests();
-#endif
+
 	/* Save the current typeahead buffer and replace it with an empty one.
 	 * This makes sure we get input from the user here and don't interfere
 	 * with the commands being executed.  Reset "ex_normal_busy" to avoid
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -296,9 +296,6 @@ static void	ex_popup(exarg_T *eap);
 # define ex_rubydo		ex_ni
 # define ex_rubyfile		ex_ni
 #endif
-#ifndef FEAT_SNIFF
-# define ex_sniff		ex_ni
-#endif
 #ifndef FEAT_KEYMAP
 # define ex_loadkeymap		ex_ni
 #endif
@@ -641,9 +638,6 @@ do_exmode(
     /* Ignore scrollbar and mouse events in Ex mode */
     ++hold_gui_events;
 #endif
-#ifdef FEAT_SNIFF
-    want_sniff_request = 0;    /* No K_SNIFF wanted */
-#endif
 
     MSG(_("Entering Ex mode.  Type \"visual\" to go to Normal mode."));
     while (exmode_active)
@@ -661,9 +655,6 @@ do_exmode(
 	changedtick = curbuf->b_changedtick;
 	prev_msg_row = msg_row;
 	prev_line = curwin->w_cursor.lnum;
-#ifdef FEAT_SNIFF
-	ProcessSniffRequests();
-#endif
 	if (improved)
 	{
 	    cmdline_row = msg_row;
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -206,9 +206,6 @@ getcmdline(
     struct cmdline_info save_ccline;
 #endif
 
-#ifdef FEAT_SNIFF
-    want_sniff_request = 0;
-#endif
 #ifdef FEAT_EVAL
     if (firstc == -1)
     {
--- a/src/feature.h
+++ b/src/feature.h
@@ -1221,7 +1221,6 @@
  * +perl		Perl interface: "--enable-perlinterp"
  * +python		Python interface: "--enable-pythoninterp"
  * +tcl			TCL interface: "--enable-tclinterp"
- * +sniff		Sniff interface: "--enable-sniff"
  * +sun_workshop	Sun Workshop integration
  * +netbeans_intg	Netbeans integration
  * +channel		Inter process communication
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -6460,22 +6460,6 @@ input_timer_cb(gpointer data)
     return FALSE;		/* don't happen again */
 }
 
-#ifdef FEAT_SNIFF
-/*
- * Callback function, used when data is available on the SNiFF connection.
- */
-    static void
-sniff_request_cb(
-    gpointer	data UNUSED,
-    gint	source_fd UNUSED,
-    GdkInputCondition condition UNUSED)
-{
-    static char_u bytes[3] = {CSI, (int)KS_EXTRA, (int)KE_SNIFF};
-
-    add_to_input_buf(bytes, 3);
-}
-#endif
-
 /*
  * GUI input routine called by gui_wait_for_chars().  Waits for a character
  * from the keyboard.
@@ -6491,26 +6475,6 @@ gui_mch_wait_for_chars(long wtime)
     int focus;
     guint timer;
     static int timed_out;
-#ifdef FEAT_SNIFF
-    static int	sniff_on = 0;
-    static gint	sniff_input_id = 0;
-#endif
-
-#ifdef FEAT_SNIFF
-    if (sniff_on && !want_sniff_request)
-    {
-	if (sniff_input_id)
-	    gdk_input_remove(sniff_input_id);
-	sniff_on = 0;
-    }
-    else if (!sniff_on && want_sniff_request)
-    {
-	/* Add fd_from_sniff to watch for available data in main loop. */
-	sniff_input_id = gdk_input_add(fd_from_sniff,
-			       GDK_INPUT_READ, sniff_request_cb, NULL);
-	sniff_on = 1;
-    }
-#endif
 
     timed_out = FALSE;
 
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -326,7 +326,7 @@ static int		s_findrep_is_find;	/* TRUE f
 #endif
 
 static HINSTANCE	s_hinst = NULL;
-#if !defined(FEAT_SNIFF) && !defined(FEAT_GUI)
+#if !defined(FEAT_GUI)
 static
 #endif
 HWND			s_hwnd = NULL;
@@ -1927,23 +1927,6 @@ process_message(void)
     }
 #endif
 
-#ifdef FEAT_SNIFF
-    if (sniff_request_waiting && want_sniff_request)
-    {
-	static char_u bytes[3] = {CSI, (char_u)KS_EXTRA, (char_u)KE_SNIFF};
-	add_to_input_buf(bytes, 3); /* K_SNIFF */
-	sniff_request_waiting = 0;
-	want_sniff_request = 0;
-	/* request is handled in normal.c */
-    }
-    if (msg.message == WM_USER)
-    {
-	MyTranslateMessage(&msg);
-	pDispatchMessage(&msg);
-	return;
-    }
-#endif
-
 #ifdef MSWIN_FIND_REPLACE
     /* Don't process messages used by the dialog */
     if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
--- a/src/gui_x11.c
+++ b/src/gui_x11.c
@@ -145,9 +145,6 @@ static void gui_x11_focus_change_cb(Widg
 static void gui_x11_enter_cb(Widget w, XtPointer data, XEvent *event, Boolean *dum);
 static void gui_x11_leave_cb(Widget w, XtPointer data, XEvent *event, Boolean *dum);
 static void gui_x11_mouse_cb(Widget w, XtPointer data, XEvent *event, Boolean *dum);
-#ifdef FEAT_SNIFF
-static void gui_x11_sniff_request_cb(XtPointer closure, int *source, XtInputId *id);
-#endif
 static void gui_x11_check_copy_area(void);
 #ifdef FEAT_CLIENTSERVER
 static void gui_x11_send_event_handler(Widget, XtPointer, XEvent *, Boolean *);
@@ -1163,20 +1160,6 @@ gui_x11_mouse_cb(
     gui_send_mouse_event(button, x, y, repeated_click, vim_modifiers);
 }
 
-#ifdef FEAT_SNIFF
-/* ARGSUSED */
-    static void
-gui_x11_sniff_request_cb(
-    XtPointer	closure UNUSED,
-    int		*source UNUSED,
-    XtInputId	*id UNUSED)
-{
-    static char_u bytes[3] = {CSI, (int)KS_EXTRA, (int)KE_SNIFF};
-
-    add_to_input_buf(bytes, 3);
-}
-#endif
-
 /*
  * End of call-back routines
  */
@@ -2818,28 +2801,9 @@ gui_mch_wait_for_chars(long wtime)
     static int	    timed_out;
     XtIntervalId    timer = (XtIntervalId)0;
     XtInputMask	    desired;
-#ifdef FEAT_SNIFF
-    static int	    sniff_on = 0;
-    static XtInputId sniff_input_id = 0;
-#endif
 
     timed_out = FALSE;
 
-#ifdef FEAT_SNIFF
-    if (sniff_on && !want_sniff_request)
-    {
-	if (sniff_input_id)
-	    XtRemoveInput(sniff_input_id);
-	sniff_on = 0;
-    }
-    else if (!sniff_on && want_sniff_request)
-    {
-	sniff_input_id = XtAppAddInput(app_context, fd_from_sniff,
-		     (XtPointer)XtInputReadMask, gui_x11_sniff_request_cb, 0);
-	sniff_on = 1;
-    }
-#endif
-
     if (wtime > 0)
 	timer = XtAppAddTimeOut(app_context, (long_u)wtime, gui_x11_timer_cb,
 								  &timed_out);
deleted file mode 100644
--- a/src/if_sniff.c
+++ /dev/null
@@ -1,1201 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * if_sniff.c Interface between Vim and SNiFF+
- *
- * See README.txt for an overview of the Vim source code.
- */
-
-#include "vim.h"
-
-#ifdef WIN32
-# include <stdio.h>
-# include <process.h>
-# include <string.h>
-# include <assert.h>
-#else
-# ifdef FEAT_GUI_X11
-#  include "gui_x11.pro"
-# endif
-# include "os_unixx.h"
-#endif
-
-static int sniffemacs_pid;
-
-int fd_from_sniff;
-int sniff_connected = 0;
-int sniff_request_waiting = 0;
-int want_sniff_request = 0;
-
-#define MAX_REQUEST_LEN 512
-
-#define NEED_SYMBOL	2
-#define EMPTY_SYMBOL	4
-#define NEED_FILE	8
-#define SILENT		16
-#define DISCONNECT	32
-#define CONNECT		64
-
-#define RQ_NONE		0
-#define RQ_SIMPLE	1
-#define RQ_CONTEXT	NEED_FILE + NEED_SYMBOL
-#define RQ_SCONTEXT	NEED_FILE + NEED_SYMBOL + EMPTY_SYMBOL
-#define RQ_NOSYMBOL	NEED_FILE
-#define RQ_SILENT	RQ_NOSYMBOL + SILENT
-#define RQ_CONNECT	RQ_NONE + CONNECT
-#define RQ_DISCONNECT	RQ_SIMPLE + DISCONNECT
-
-struct sn_cmd
-{
-    char *cmd_name;
-    char cmd_code;
-    char *cmd_msg;
-    int  cmd_type;
-};
-
-struct sn_cmd_list
-{
-    struct sn_cmd* sniff_cmd;
-    struct sn_cmd_list* next_cmd;
-};
-
-static struct sn_cmd sniff_cmds[] =
-{
-    { "toggle",		'e', N_("Toggle implementation/definition"),RQ_SCONTEXT },
-    { "superclass",	's', N_("Show base class of"),		RQ_CONTEXT },
-    { "overridden",	'm', N_("Show overridden member function"),RQ_SCONTEXT },
-    { "retrieve-file",	'r', N_("Retrieve from file"),		RQ_CONTEXT },
-    { "retrieve-project",'p', N_("Retrieve from project"),	RQ_CONTEXT },
-    { "retrieve-all-projects",
-			'P', N_("Retrieve from all projects"),	RQ_CONTEXT },
-    { "retrieve-next",	'R', N_("Retrieve"),	RQ_CONTEXT },
-    { "goto-symbol",	'g', N_("Show source of"),		RQ_CONTEXT },
-    { "find-symbol",	'f', N_("Find symbol"),			RQ_CONTEXT },
-    { "browse-class",	'w', N_("Browse class"),		RQ_CONTEXT },
-    { "hierarchy",	't', N_("Show class in hierarchy"),	RQ_CONTEXT },
-    { "restr-hier",	'T', N_("Show class in restricted hierarchy"),RQ_CONTEXT },
-    { "xref-to",	'x', N_("Xref refers to"),		RQ_CONTEXT },
-    { "xref-by",	'X', N_("Xref referred by"),		RQ_CONTEXT },
-    { "xref-has",	'c', N_("Xref has a"),			RQ_CONTEXT },
-    { "xref-used-by",	'C', N_("Xref used by"),		RQ_CONTEXT },
-    { "show-docu",	'd', N_("Show docu of"),		RQ_CONTEXT },
-    { "gen-docu",	'D', N_("Generate docu for"),		RQ_CONTEXT },
-    { "connect",	'y', NULL,				RQ_CONNECT },
-    { "disconnect",	'q', NULL,				RQ_DISCONNECT },
-    { "font-info",	'z', NULL,				RQ_SILENT },
-    { "update",		'u', NULL,				RQ_SILENT },
-    { NULL,		'\0', NULL, 0}
-};
-
-
-static char *SniffEmacs[2] = {"sniffemacs", (char *)NULL};  /* Yes, Emacs! */
-static int fd_to_sniff;
-static int sniff_will_disconnect = 0;
-static char msg_sniff_disconnect[] = N_("Cannot connect to SNiFF+. Check environment (sniffemacs must be found in $PATH).\n");
-static char sniff_rq_sep[] = " ";
-static struct sn_cmd_list *sniff_cmd_ext = NULL;
-
-/* Initializing vim commands
- * executed each time vim connects to Sniff
- */
-static char *init_cmds[]= {
-    "augroup sniff",
-    "autocmd BufWritePost * sniff update",
-    "autocmd BufReadPost * sniff font-info",
-    "autocmd VimLeave * sniff disconnect",
-    "augroup END",
-
-    "let g:sniff_connected = 1",
-
-    "if ! exists('g:sniff_mappings_sourced')|"
-	"if ! exists('g:sniff_mappings')|"
-	    "if exists('$SNIFF_DIR4')|"
-		"let g:sniff_mappings='$SNIFF_DIR4/config/integrations/vim/sniff.vim'|"
-	    "else|"
-		"let g:sniff_mappings='$SNIFF_DIR/config/sniff.vim'|"
-	    "endif|"
-	"endif|"
-	"let g:sniff_mappings=expand(g:sniff_mappings)|"
-	"if filereadable(g:sniff_mappings)|"
-	    "execute 'source' g:sniff_mappings|"
-	    "let g:sniff_mappings_sourced=1|"
-	"endif|"
-    "endif",
-
-    NULL
-};
-
-/*-------- Function Prototypes ----------------------------------*/
-
-static int ConnectToSniffEmacs(void);
-static void sniff_connect(void);
-static void HandleSniffRequest(char* buffer);
-static int get_request(int fd, char *buf, int maxlen);
-static void WriteToSniff(char *str);
-static void SendRequest(struct sn_cmd *command, char* symbol);
-static void vi_msg(char *);
-static void vi_error_msg(char *);
-static char *vi_symbol_under_cursor(void);
-static void vi_open_file(char *);
-static char *vi_buffer_name(void);
-static buf_T *vi_find_buffer(char *);
-static void vi_exec_cmd(char *);
-static void vi_set_cursor_pos(long char_nr);
-static long vi_cursor_pos(void);
-
-/* debug trace */
-#if 0
-static FILE* _tracefile = NULL;
-#define SNIFF_TRACE_OPEN(file) if (!_tracefile) _tracefile = fopen(file, "w")
-#define SNIFF_TRACE(msg) fprintf(_tracefile, msg); fflush(_tracefile);
-#define SNIFF_TRACE1(msg, arg) fprintf(_tracefile, msg,arg); fflush(_tracefile);
-#define SNIFF_TRACE_CLOSE fclose(_tracefile); _tracefile=NULL;
-#else
-#define SNIFF_TRACE_OPEN(file)
-#define SNIFF_TRACE(msg)
-#define SNIFF_TRACE1(msg, arg)
-#define SNIFF_TRACE_CLOSE
-#endif
-
-/*-------- Windows Only Declarations -----------------------------*/
-#ifdef WIN32
-
-static int  sniff_request_processed=1;
-static HANDLE sniffemacs_handle=NULL;
-static HANDLE readthread_handle=NULL;
-static HANDLE handle_to_sniff=NULL;
-static HANDLE handle_from_sniff=NULL;
-
-struct sniffBufNode
-{
-    struct sniffBufNode *next;
-    int    bufLen;
-    char   buf[MAX_REQUEST_LEN];
-};
-static struct sniffBufNode *sniffBufStart=NULL;
-static struct sniffBufNode *sniffBufEnd=NULL;
-static HANDLE hBufferMutex=NULL;
-
-# ifdef FEAT_GUI_W32
-    extern HWND s_hwnd;       /* gvim's Window handle */
-# endif
-/*
- * some helper functions for Windows port only
- */
-
-    static HANDLE
-ExecuteDetachedProgram(char *szBinary, char *szCmdLine,
-    HANDLE hStdInput, HANDLE hStdOutput)
-{
-    BOOL bResult;
-    DWORD nError;
-    PROCESS_INFORMATION aProcessInformation;
-    PROCESS_INFORMATION *pProcessInformation= &aProcessInformation;
-    STARTUPINFO aStartupInfo;
-    STARTUPINFO *pStartupInfo= &aStartupInfo;
-    DWORD dwCreationFlags= 0;
-    char szPath[512];
-    HINSTANCE hResult;
-
-    hResult = FindExecutable(szBinary, ".", szPath);
-    if ((int)hResult <= 32)
-    {
-	/* can't find the exe file */
-	return NULL;
-    }
-
-    ZeroMemory(pStartupInfo, sizeof(*pStartupInfo));
-    pStartupInfo->dwFlags= STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
-    pStartupInfo->hStdInput = hStdInput;
-    pStartupInfo->hStdOutput = hStdOutput;
-    pStartupInfo->wShowWindow= SW_HIDE;
-    pStartupInfo->cb = sizeof(STARTUPINFO);
-
-    bResult= CreateProcess(
-	szPath,
-	szCmdLine,
-	NULL,    /* security attr for process */
-	NULL,    /* security attr for primary thread */
-	TRUE,    /* DO inherit stdin and stdout */
-	dwCreationFlags, /* creation flags */
-	NULL,    /* environment */
-	".",    /* current directory */
-	pStartupInfo,   /* startup info: NULL crashes  */
-	pProcessInformation /* process information: NULL crashes */
-    );
-    nError= GetLastError();
-    if (bResult)
-    {
-	CloseHandle(pProcessInformation->hThread);
-	CloseHandle(hStdInput);
-	CloseHandle(hStdOutput);
-	return(pProcessInformation->hProcess);
-    }
-    else
-	return(NULL);
-}
-
-/*
- * write to the internal Thread / Thread communications buffer.
- * Return TRUE if successful, FALSE else.
- */
-    static BOOL
-writeToBuffer(char *msg, int len)
-{
-    DWORD dwWaitResult;     /* Request ownership of mutex. */
-    struct sniffBufNode *bn;
-    int bnSize;
-
-    SNIFF_TRACE1("writeToBuffer %d\n", len);
-    bnSize = sizeof(struct sniffBufNode) - MAX_REQUEST_LEN + len + 1;
-    if (bnSize < 128) bnSize = 128; /* minimum length to avoid fragmentation */
-    bn = (struct sniffBufNode *)malloc(bnSize);
-    if (!bn)
-	return FALSE;
-
-    memcpy(bn->buf, msg, len);
-    bn->buf[len]='\0';    /* terminate CString for added safety */
-    bn->next = NULL;
-    bn->bufLen = len;
-    /* now, acquire a Mutex for adding the string to our linked list */
-    dwWaitResult = WaitForSingleObject(
-	hBufferMutex,   /* handle of mutex */
-	1000L);   /* one-second time-out interval */
-    if (dwWaitResult == WAIT_OBJECT_0)
-    {
-	/* The thread got mutex ownership. */
-	if (sniffBufEnd)
-	{
-	    sniffBufEnd->next = bn;
-	    sniffBufEnd = bn;
-	}
-	else
-	    sniffBufStart = sniffBufEnd = bn;
-	/* Release ownership of the mutex object. */
-	if (! ReleaseMutex(hBufferMutex))
-	{
-	    /* Deal with error. */
-	}
-	return TRUE;
-    }
-
-    /* Cannot get mutex ownership due to time-out or mutex object abandoned. */
-    free(bn);
-    return FALSE;
-}
-
-/*
- * read from the internal Thread / Thread communications buffer.
- * Return TRUE if successful, FALSE else.
- */
-    static int
-ReadFromBuffer(char *buf, int maxlen)
-{
-    DWORD dwWaitResult;     /* Request ownership of mutex. */
-    int   theLen;
-    struct sniffBufNode *bn;
-
-    dwWaitResult = WaitForSingleObject(
-	hBufferMutex,   /* handle of mutex */
-	1000L);		/* one-second time-out interval */
-    if (dwWaitResult == WAIT_OBJECT_0)
-    {
-	if (!sniffBufStart)
-	{
-	    /* all pending Requests Processed */
-	    theLen = 0;
-	}
-	else
-	{
-	    bn = sniffBufStart;
-	    theLen = bn->bufLen;
-	    SNIFF_TRACE1("ReadFromBuffer %d\n", theLen);
-	    if (theLen >= maxlen)
-	    {
-		/* notify the user of buffer overflow? */
-		theLen = maxlen-1;
-	    }
-	    memcpy(buf, bn->buf, theLen);
-	    buf[theLen] = '\0';
-	    if (! (sniffBufStart = bn->next))
-	    {
-		sniffBufEnd = NULL;
-		sniff_request_processed = 1;
-	    }
-	    free(bn);
-	}
-	if (! ReleaseMutex(hBufferMutex))
-	{
-	    /* Deal with error. */
-	}
-	return theLen;
-    }
-
-    /* Cannot get mutex ownership due to time-out or mutex object abandoned. */
-    return -1;
-}
-
-/* on Win32, a separate Thread reads the input pipe. get_request is not needed here. */
-    static void __cdecl
-SniffEmacsReadThread(void *dummy)
-{
-    static char	ReadThreadBuffer[MAX_REQUEST_LEN];
-    int		ReadThreadLen=0;
-    int		result=0;
-    int		msgLen=0;
-    char	*msgStart, *msgCur;
-
-    SNIFF_TRACE("begin thread\n");
-    /* Read from the pipe to SniffEmacs */
-    while (sniff_connected)
-    {
-	if (!ReadFile(handle_from_sniff,
-		ReadThreadBuffer + ReadThreadLen,    /* acknowledge rest in buffer */
-		MAX_REQUEST_LEN - ReadThreadLen,
-		&result,
-		NULL))
-	{
-	    DWORD err = GetLastError();
-	    result = -1;
-	}
-
-	if (result < 0)
-	{
-	    /* probably sniffemacs died... log the Error? */
-	    sniff_disconnect(1);
-	}
-	else if (result > 0)
-	{
-	    ReadThreadLen += result-1;   /* total length of valid chars */
-	    for(msgCur=msgStart=ReadThreadBuffer; ReadThreadLen > 0; msgCur++, ReadThreadLen--)
-	    {
-		if (*msgCur == '\0' || *msgCur == '\r' || *msgCur == '\n')
-		{
-		    msgLen = msgCur-msgStart; /* don't add the CR/LF chars */
-		    if (msgLen > 0)
-			writeToBuffer(msgStart, msgLen);
-		    msgStart = msgCur + 1; /* over-read single CR/LF chars */
-		}
-	    }
-
-	/* move incomplete message to beginning of buffer */
-	ReadThreadLen = msgCur - msgStart;
-	if (ReadThreadLen > 0)
-	    mch_memmove(ReadThreadBuffer, msgStart, ReadThreadLen);
-
-	if (sniff_request_processed)
-	{
-	    /* notify others that new data has arrived */
-	    sniff_request_processed = 0;
-	    sniff_request_waiting = 1;
-#ifdef FEAT_GUI_W32
-	    PostMessage(s_hwnd, WM_USER, (WPARAM)0, (LPARAM)0);
-#endif
-	    }
-	}
-    }
-    SNIFF_TRACE("end thread\n");
-}
-#endif /* WIN32 */
-/*-------- End of Windows Only Declarations ------------------------*/
-
-
-/* ProcessSniffRequests
- * Function that should be called from outside
- * to process the waiting sniff requests
- */
-    void
-ProcessSniffRequests(void)
-{
-    static char buf[MAX_REQUEST_LEN];
-    int len;
-
-    while (sniff_connected)
-    {
-#ifdef WIN32
-	len = ReadFromBuffer(buf, sizeof(buf));
-#else
-	len = get_request(fd_from_sniff, buf, sizeof(buf));
-#endif
-	if (len < 0)
-	{
-	    vi_error_msg(_("E274: Sniff: Error during read. Disconnected"));
-	    sniff_disconnect(1);
-	    break;
-	}
-	else if (len > 0)
-	    HandleSniffRequest( buf );
-	else
-	    break;
-    }
-
-    if (sniff_will_disconnect)	/* Now the last msg has been processed */
-	sniff_disconnect(1);
-}
-
-    static struct sn_cmd *
-find_sniff_cmd(char *cmd)
-{
-    struct sn_cmd *sniff_cmd = NULL;
-    int i;
-    for(i=0; sniff_cmds[i].cmd_name; i++)
-    {
-	if (!strcmp(cmd, sniff_cmds[i].cmd_name))
-	{
-	    sniff_cmd = &sniff_cmds[i];
-	    break;
-	}
-    }
-    if (!sniff_cmd)
-    {
-	struct sn_cmd_list *list = sniff_cmd_ext;
-	while (list)
-	{
-	    if (!strcmp(cmd, list->sniff_cmd->cmd_name))
-	    {
-		sniff_cmd = list->sniff_cmd;
-		break;
-	    }
-	    list = list->next_cmd;
-	}
-    }
-    return sniff_cmd;
-}
-
-    static int
-add_sniff_cmd(char *cmd, char *def, char *msg)
-{
-    int rc = 0;
-    if (def != NULL && def[0] != NUL && find_sniff_cmd(cmd) == NULL)
-    {
-	struct sn_cmd_list *list = sniff_cmd_ext;
-	struct sn_cmd *sniff_cmd = (struct sn_cmd*)malloc(sizeof(struct sn_cmd));
-	struct sn_cmd_list *cmd_node = (struct sn_cmd_list*)malloc(sizeof(struct sn_cmd_list));
-	int rq_type = 0;
-
-	/* unescape message text */
-	char *p = msg;
-	char *end = p+strlen(msg);
-	while (*p)
-	{
-	    if (*p == '\\')
-		mch_memmove(p,p+1,end-p);
-	    p++;
-	}
-	SNIFF_TRACE1("request name = %s\n",cmd);
-	SNIFF_TRACE1("request def = %s\n",def);
-	SNIFF_TRACE1("request msg = %s\n",msg);
-
-	while (list && list->next_cmd)
-	    list = list->next_cmd;
-	if (!list)
-	    sniff_cmd_ext = cmd_node;
-	else
-	    list->next_cmd = cmd_node;
-
-	sniff_cmd->cmd_name = cmd;
-	sniff_cmd->cmd_code = def[0];
-	sniff_cmd->cmd_msg = msg;
-	switch(def[1])
-	{
-	    case 'f':
-		rq_type = RQ_NOSYMBOL;
-		break;
-	    case 's':
-		rq_type = RQ_CONTEXT;
-		break;
-	    case 'S':
-		rq_type = RQ_SCONTEXT;
-		break;
-	    default:
-		rq_type = RQ_SIMPLE;
-		break;
-	}
-	sniff_cmd->cmd_type = rq_type;
-	cmd_node->sniff_cmd = sniff_cmd;
-	cmd_node->next_cmd = NULL;
-	rc = 1;
-    }
-    return rc;
-}
-
-/* ex_sniff
- * Handle ":sniff" command
- */
-    void
-ex_sniff(exarg_T *eap)
-{
-    char_u	*arg = eap->arg;
-    char_u *symbol = NULL;
-    char_u *cmd = NULL;
-
-    SNIFF_TRACE_OPEN("if_sniff.log");
-    if (ends_excmd(*arg))	/* no request: print available commands */
-    {
-	int i;
-	msg_start();
-	msg_outtrans_attr((char_u *)"-- SNiFF+ commands --", hl_attr(HLF_T));
-	for(i=0; sniff_cmds[i].cmd_name; i++)
-	{
-	    msg_putchar('\n');
-	    msg_outtrans((char_u *)":sniff ");
-	    msg_outtrans((char_u *)sniff_cmds[i].cmd_name);
-	}
-	msg_putchar('\n');
-	msg_outtrans((char_u *)_("SNiFF+ is currently "));
-	if (!sniff_connected)
-	    msg_outtrans((char_u *)_("not "));
-	msg_outtrans((char_u *)_("connected"));
-	msg_end();
-    }
-    else	/* extract command name and symbol if present */
-    {
-	symbol = skiptowhite(arg);
-	cmd  = vim_strnsave(arg, (int)(symbol-arg));
-	symbol = skipwhite(symbol);
-	if (ends_excmd(*symbol))
-	    symbol = NULL;
-	if (!strcmp((char *)cmd, "addcmd"))
-	{
-	    char_u *def = skiptowhite(symbol);
-	    char_u *name = vim_strnsave(symbol, (int)(def-symbol));
-	    char_u *msg;
-	    def = skipwhite(def);
-	    msg = skiptowhite(def);
-	    def = vim_strnsave(def, (int)(msg-def));
-	    msg = skipwhite(msg);
-	    if (ends_excmd(*msg))
-		msg = vim_strsave(name);
-	    else
-		msg = vim_strnsave(msg, (int)(skiptowhite_esc(msg)-msg));
-	    if (!add_sniff_cmd((char*)name, (char*)def, (char*)msg))
-	    {
-		vim_free(msg);
-		vim_free(def);
-		vim_free(name);
-	    }
-	}
-	else
-	{
-	    struct sn_cmd* sniff_cmd = find_sniff_cmd((char*)cmd);
-	    if (sniff_cmd)
-		SendRequest(sniff_cmd, (char *)symbol);
-	    else
-		EMSG2(_("E275: Unknown SNiFF+ request: %s"), cmd);
-	}
-	vim_free(cmd);
-    }
-}
-
-
-    static void
-sniff_connect(void)
-{
-    if (sniff_connected)
-	return;
-    if (ConnectToSniffEmacs())
-	vi_error_msg(_("E276: Error connecting to SNiFF+"));
-    else
-    {
-	int i;
-
-	for (i = 0; init_cmds[i]; i++)
-	    vi_exec_cmd(init_cmds[i]);
-    }
-}
-
-    void
-sniff_disconnect(int immediately)
-{
-    if (!sniff_connected)
-	return;
-    if (immediately)
-    {
-	vi_exec_cmd("augroup sniff");
-	vi_exec_cmd("au!");
-	vi_exec_cmd("augroup END");
-	vi_exec_cmd("unlet g:sniff_connected");
-	sniff_connected = 0;
-	want_sniff_request = 0;
-	sniff_will_disconnect = 0;
-#ifdef FEAT_GUI
-	if (gui.in_use)
-	    gui_mch_wait_for_chars(0L);
-#endif
-#ifdef WIN32
-	while (sniffBufStart != NULL)
-	{
-	    struct sniffBufNode *node = sniffBufStart;
-	    sniffBufStart = sniffBufStart->next;
-	    free(node);
-	}
-	sniffBufStart = sniffBufEnd = NULL;
-	sniff_request_processed = 1;
-	CloseHandle(handle_to_sniff);
-	CloseHandle(handle_from_sniff);
-	WaitForSingleObject(sniffemacs_handle, 1000L);
-	CloseHandle(sniffemacs_handle);
-	sniffemacs_handle = NULL;
-	WaitForSingleObject(readthread_handle, 1000L);
-	readthread_handle = NULL;
-	CloseHandle(hBufferMutex);
-	hBufferMutex = NULL;
-	SNIFF_TRACE_CLOSE;
-#else
-	close(fd_to_sniff);
-	close(fd_from_sniff);
-	wait(NULL);
-#endif
-    }
-    else
-    {
-#ifdef WIN32
-# if (defined(_MSC_VER) && _MSC_VER >= 1400)
-        Sleep(2);
-# else
-	_sleep(2);
-# endif
-	if (!sniff_request_processed)
-	    ProcessSniffRequests();
-#else
-	sleep(2);		    /* Incoming msg could disturb edit */
-#endif
-	sniff_will_disconnect = 1;  /* We expect disconnect msg in 2 secs */
-    }
-}
-
-
-/* ConnectToSniffEmacs
- * Connect to Sniff: returns 1 on error
- */
-    static int
-ConnectToSniffEmacs(void)
-{
-#ifdef WIN32		/* Windows Version of the Code */
-    HANDLE ToSniffEmacs[2], FromSniffEmacs[2];
-    SECURITY_ATTRIBUTES sa;
-
-    sa.nLength = sizeof(sa);
-    sa.lpSecurityDescriptor = NULL;
-    sa.bInheritHandle = TRUE;
-
-    if (! CreatePipe(&ToSniffEmacs[0], &ToSniffEmacs[1], &sa, 0))
-	return 1;
-    if (! CreatePipe(&FromSniffEmacs[0], &FromSniffEmacs[1], &sa, 0))
-	return 1;
-
-    sniffemacs_handle = ExecuteDetachedProgram(SniffEmacs[0], SniffEmacs[0],
-	ToSniffEmacs[0], FromSniffEmacs[1]);
-
-    if (sniffemacs_handle)
-    {
-	handle_to_sniff  = ToSniffEmacs[1];
-	handle_from_sniff = FromSniffEmacs[0];
-	sniff_connected = 1;
-	hBufferMutex = CreateMutex(
-	    NULL,			/* no security attributes */
-	    FALSE,			/* initially not owned */
-	    "SniffReadBufferMutex");    /* name of mutex */
-	if (hBufferMutex == NULL)
-	{
-	    /* Check for error. */
-	}
-	readthread_handle = (HANDLE)_beginthread(SniffEmacsReadThread, 0, NULL);
-	return 0;
-    }
-    else
-    {
-	/* error in spawn() */
-	return 1;
-    }
-
-#else		/* UNIX Version of the Code */
-    int ToSniffEmacs[2], FromSniffEmacs[2];
-
-    if (pipe(ToSniffEmacs) != 0)
-	return 1;
-    if (pipe(FromSniffEmacs) != 0)
-	return 1;
-
-    /* fork */
-    if ((sniffemacs_pid=fork()) == 0)
-    {
-	/* child */
-
-	/* prepare communication pipes */
-	close(ToSniffEmacs[1]);
-	close(FromSniffEmacs[0]);
-
-	dup2(ToSniffEmacs[0],fileno(stdin));   /* write to ToSniffEmacs[1] */
-	dup2(FromSniffEmacs[1],fileno(stdout));/* read from FromSniffEmacs[0] */
-
-	close(ToSniffEmacs[0]);
-	close(FromSniffEmacs[1]);
-
-	/* start sniffemacs */
-	execvp (SniffEmacs[0], SniffEmacs);
-	{
-/*	    FILE *out = fdopen(FromSniffEmacs[1], "w"); */
-	    sleep(1);
-	    fputs(_(msg_sniff_disconnect), stdout);
-	    fflush(stdout);
-	    sleep(3);
-#ifdef FEAT_GUI
-	    if (gui.in_use)
-		gui_exit(1);
-#endif
-	    exit(1);
-	}
-	return 1;
-    }
-    else if (sniffemacs_pid > 0)
-    {
-	/* parent process */
-	close(ToSniffEmacs[0]);
-	fd_to_sniff  = ToSniffEmacs[1];
-	close(FromSniffEmacs[1]);
-	fd_from_sniff = FromSniffEmacs[0];
-	sniff_connected = 1;
-	return 0;
-    }
-    else   /* error in fork() */
-	return 1;
-#endif		/* UNIX Version of the Code */
-}
-
-
-/* HandleSniffRequest
- * Handle one request from SNiFF+
- */
-    static void
-HandleSniffRequest(char *buffer)
-{
-    char VICommand[MAX_REQUEST_LEN];
-    char command;
-    char *arguments;
-    char *token;
-    char *argv[3];
-    int argc = 0;
-    buf_T  *buf;
-
-    const char *SetTab     = "set tabstop=%d";
-    const char *SelectBuf  = "buf %s";
-    const char *DeleteBuf  = "bd %s";
-    const char *UnloadBuf  = "bun %s";
-    const char *GotoLine   = "%d";
-
-    command   = buffer[0];
-    arguments = &buffer[1];
-    token = strtok(arguments, sniff_rq_sep);
-    while (argc <3)
-    {
-	if (token)
-	{
-	    argv[argc] = (char*)vim_strsave((char_u *)token);
-	    token = strtok(0, sniff_rq_sep);
-	}
-	else
-	    argv[argc] = strdup("");
-	argc++;
-    }
-
-    switch (command)
-    {
-	case 'o' :  /* visit file at char pos */
-	case 'O' :  /* visit file at line number */
-	{
-	    char *file = argv[0];
-	    int position = atoi(argv[1]);
-
-	    buf = vi_find_buffer(file);
-	    setpcmark();      /* insert current pos in jump list [mark.c]*/
-	    if (!buf)
-		vi_open_file(file);
-	    else if (buf!=curbuf)
-	    {
-		vim_snprintf(VICommand, sizeof(VICommand),
-						     (char *)SelectBuf, file);
-		vi_exec_cmd(VICommand);
-	    }
-	    if (command == 'o')
-		vi_set_cursor_pos((long)position);
-	    else
-	    {
-		vim_snprintf(VICommand, sizeof(VICommand),
-					     (char *)GotoLine, (int)position);
-		vi_exec_cmd(VICommand);
-	    }
-	    checkpcmark();	/* [mark.c] */
-#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32)
-	    if (gui.in_use && !gui.in_focus)  /* Raise Vim Window */
-	    {
-# ifdef FEAT_GUI_W32
-		SetForegroundWindow(s_hwnd);
-# else
-		extern Widget vimShell;
-
-		XSetInputFocus(gui.dpy, XtWindow(vimShell), RevertToNone,
-			CurrentTime);
-		XRaiseWindow(gui.dpy, XtWindow(vimShell));
-# endif
-	    }
-#endif
-	    break;
-	}
-	case 'p' :  /* path of file has changed */
-	    /* when changing from shared to private WS (checkout) */
-	{
-	    char *file = argv[0];
-	    char *new_path = argv[1];
-
-	    buf = vi_find_buffer(file);
-	    if (buf && !buf->b_changed) /* delete buffer only if not modified */
-	    {
-		vim_snprintf(VICommand, sizeof(VICommand),
-						     (char *)DeleteBuf, file);
-		vi_exec_cmd(VICommand);
-	    }
-	    vi_open_file(new_path);
-	    break;
-	}
-	case 'w' :  /* writability has changed */
-	    /* Sniff sends request twice,
-	     * but only the last one is the right one */
-	{
-	    char *file = argv[0];
-	    int writable = atoi(argv[1]);
-
-	    buf = vi_find_buffer(file);
-	    if (buf)
-	    {
-		buf->b_p_ro = !writable;
-		if (buf != curbuf)
-		{
-		    buf->b_flags |= BF_CHECK_RO + BF_NEVERLOADED;
-		    if (writable && !buf->b_changed)
-		    {
-			vim_snprintf(VICommand, sizeof(VICommand),
-						     (char *)UnloadBuf, file);
-			vi_exec_cmd(VICommand);
-		    }
-		}
-		else if (writable && !buf->b_changed)
-		{
-		    vi_exec_cmd("e");
-		}
-	    }
-	    break;
-	}
-	case 'h' :  /* highlight info */
-	    break;  /* not implemented */
-
-	case 't' :  /* Set tab width */
-	{
-	    int tab_width = atoi(argv[1]);
-
-	    if (tab_width > 0 && tab_width <= 16)
-	    {
-		vim_snprintf(VICommand, sizeof(VICommand),
-						   (char *)SetTab, tab_width);
-		vi_exec_cmd(VICommand);
-	    }
-	    break;
-	}
-	case '|':
-	{
-	    /* change the request separator */
-	    sniff_rq_sep[0] = arguments[0];
-	    /* echo the request */
-	    WriteToSniff(buffer);
-	    break;
-	}
-	case 'A' :  /* Warning/Info msg */
-	    vi_msg(arguments);
-	    if (!strncmp(arguments, "Disconnected", 12))
-		sniff_disconnect(1);	/* unexpected disconnection */
-	    break;
-	case 'a' :  /* Error msg */
-	    vi_error_msg(arguments);
-	    if (!strncmp(arguments, "Cannot connect", 14))
-		sniff_disconnect(1);
-	    break;
-
-	default :
-	    break;
-    }
-    while (argc)
-	vim_free(argv[--argc]);
-}
-
-
-#ifndef WIN32
-/* get_request
- * read string from fd up to next newline (excluding the nl),
- * returns  length of string
- *	    0 if no data available or no complete line
- *	   <0 on error
- */
-    static int
-get_request(int fd, char *buf, int maxlen)
-{
-    static char	inbuf[1024];
-    static int	pos = 0, bytes = 0;
-    int		len;
-#ifdef HAVE_SELECT
-    struct timeval tval;
-    fd_set	rfds;
-
-    FD_ZERO(&rfds);
-    FD_SET(fd, &rfds);
-    tval.tv_sec  = 0;
-    tval.tv_usec = 0;
-#else
-    struct pollfd fds;
-
-    fds.fd = fd;
-    fds.events = POLLIN;
-#endif
-
-    for (len = 0; len < maxlen; len++)
-    {
-	if (pos >= bytes)	    /* end of buffer reached? */
-	{
-#ifdef HAVE_SELECT
-	    if (select(fd + 1, &rfds, NULL, NULL, &tval) > 0)
-#else
-	    if (poll(&fds, 1, 0) > 0)
-#endif
-	    {
-		pos = 0;
-		bytes = read(fd, inbuf, sizeof(inbuf));
-		if (bytes <= 0)
-		    return bytes;
-	    }
-	    else
-	    {
-		pos = pos-len;
-		buf[0] = '\0';
-		return 0;
-	    }
-	}
-	if ((buf[len] = inbuf[pos++]) =='\n')
-	    break;
-    }
-    buf[len] = '\0';
-    return len;
-}
-#endif     /* WIN32 */
-
-
-    static void
-SendRequest(struct sn_cmd *command, char *symbol)
-{
-    int		cmd_type = command->cmd_type;
-    static char cmdstr[MAX_REQUEST_LEN];
-    static char msgtxt[MAX_REQUEST_LEN];
-    char	*buffer_name = NULL;
-
-    if (cmd_type == RQ_CONNECT)
-    {
-	sniff_connect();
-	return;
-    }
-    if (!sniff_connected && !(cmd_type & SILENT))
-    {
-	vi_error_msg(_("E278: SNiFF+ not connected"));
-	return;
-    }
-
-    if (cmd_type & NEED_FILE)
-    {
-	if (!curbuf->b_sniff)
-	{
-	    if (!(cmd_type & SILENT))
-		vi_error_msg(_("E279: Not a SNiFF+ buffer"));
-	    return;
-	}
-	buffer_name = vi_buffer_name();
-	if (buffer_name == NULL)
-	    return;
-	if (cmd_type & NEED_SYMBOL)
-	{
-	    if (cmd_type & EMPTY_SYMBOL)
-		symbol = " ";
-	    else if (!symbol && !(symbol = vi_symbol_under_cursor()))
-		return;	    /* error msg already displayed */
-	}
-
-	if (symbol)
-	    vim_snprintf(cmdstr, sizeof(cmdstr), "%c%s%s%ld%s%s\n",
-		command->cmd_code,
-		buffer_name,
-		sniff_rq_sep,
-		vi_cursor_pos(),
-		sniff_rq_sep,
-		symbol
-	    );
-	else
-	    vim_snprintf(cmdstr, sizeof(cmdstr), "%c%s\n",
-		    command->cmd_code, buffer_name);
-    }
-    else    /* simple request */
-    {
-	cmdstr[0] = command->cmd_code;
-	cmdstr[1] = '\n';
-	cmdstr[2] = '\0';
-    }
-    if (command->cmd_msg && !(cmd_type & SILENT))
-    {
-	if ((cmd_type & NEED_SYMBOL) && !(cmd_type & EMPTY_SYMBOL))
-	{
-	    vim_snprintf(msgtxt, sizeof(msgtxt), "%s: %s",
-						 _(command->cmd_msg), symbol);
-	    vi_msg(msgtxt);
-	}
-	else
-	    vi_msg(_(command->cmd_msg));
-    }
-    WriteToSniff(cmdstr);
-    if (cmd_type & DISCONNECT)
-	sniff_disconnect(0);
-}
-
-
-
-    static void
-WriteToSniff(char *str)
-{
-    int bytes;
-#ifdef WIN32
-    if (! WriteFile(handle_to_sniff, str, strlen(str), &bytes, NULL))
-    {
-	DWORD err=GetLastError();
-	bytes = -1;
-    }
-#else
-    bytes = write(fd_to_sniff, str, strlen(str));
-#endif
-    if (bytes<0)
-    {
-	vi_msg(_("Sniff: Error during write. Disconnected"));
-	sniff_disconnect(1);
-    }
-}
-
-/*-------- vim helping functions --------------------------------*/
-
-    static void
-vi_msg(char *str)
-{
-    if (str != NULL && *str != NUL)
-	MSG((char_u *)str);
-}
-
-    static void
-vi_error_msg(char *str)
-{
-    if (str != NULL && *str != NUL)
-	EMSG((char_u *)str);
-}
-
-    static void
-vi_open_file(char *fname)
-{
-    ++no_wait_return;
-    do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF,
-	    curwin);
-    curbuf->b_sniff = TRUE;
-    --no_wait_return;					/* [ex_docmd.c] */
-}
-
-    static buf_T *
-vi_find_buffer(char *fname)
-{			    /* derived from buflist_findname() [buffer.c] */
-    buf_T	*buf;
-
-    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-	if (buf->b_sfname != NULL && fnamecmp(fname, buf->b_sfname) == 0)
-	    return (buf);
-    return NULL;
-}
-
-
-    static char *
-vi_symbol_under_cursor(void)
-{
-    int		len;
-    char	*symbolp;
-    char	*p;
-    static char sniff_symbol[256];
-
-    len = find_ident_under_cursor((char_u **)&symbolp, FIND_IDENT);
-    /* [normal.c] */
-    if (len <= 0)
-	return NULL;
-    for (p=sniff_symbol; len; len--)
-	*p++ = *symbolp++;
-    *p = '\0';
-    return sniff_symbol;
-}
-
-
-    static char *
-vi_buffer_name(void)
-{
-    return (char *)curbuf->b_sfname;
-}
-
-    static void
-vi_exec_cmd(char *vicmd)
-{
-    do_cmdline_cmd((char_u *)vicmd);  /* [ex_docmd.c] */
-}
-
-/*
- * Set cursor on character position
- * derived from cursor_pos_info() [buffer.c]
- */
-    static void
-vi_set_cursor_pos(long char_pos)
-{
-    linenr_T	lnum;
-    long	char_count = 1;  /* first position = 1 */
-    int		line_size;
-    int		eol_size;
-
-    if (char_pos == 0)
-    {
-	char_pos = 1;
-    }
-    if (get_fileformat(curbuf) == EOL_DOS)
-	eol_size = 2;
-    else
-	eol_size = 1;
-    for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
-    {
-	line_size = STRLEN(ml_get(lnum)) + eol_size;
-	if (char_count+line_size > char_pos) break;
-	char_count += line_size;
-    }
-    curwin->w_cursor.lnum = lnum;
-    curwin->w_cursor.col  = char_pos - char_count;
-}
-
-    static long
-vi_cursor_pos(void)
-{
-    linenr_T	lnum;
-    long	char_count=1;  /* sniff starts with pos 1 */
-    int		line_size;
-    int		eol_size;
-
-    if (curbuf->b_p_tx)
-	eol_size = 2;
-    else
-	eol_size = 1;
-    for (lnum = 1; lnum < curwin->w_cursor.lnum; ++lnum)
-    {
-	line_size = STRLEN(ml_get(lnum)) + eol_size;
-	char_count += line_size;
-    }
-    return char_count + curwin->w_cursor.col;
-}
deleted file mode 100644
--- a/src/if_sniff.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * if_sniff.h Interface between Vim and SNiFF+
- */
-
-#ifndef __if_sniff_h__
-#define __if_sniff_h__
-
-extern int  want_sniff_request;
-extern int  sniff_request_waiting;
-extern int  sniff_connected;
-extern int  fd_from_sniff;
-extern void sniff_disconnect(int immediately);
-extern void ProcessSniffRequests(void);
-extern void ex_sniff(exarg_T *eap);
-
-#endif
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -211,8 +211,6 @@ enum key_extra
     , KE_TAB		/* unshifted TAB key */
     , KE_S_TAB_OLD	/* shifted TAB key (no longer used) */
 
-    , KE_SNIFF		/* SNiFF+ input waiting */
-
     , KE_XF1		/* extra vt100 function keys for xterm */
     , KE_XF2
     , KE_XF3
@@ -449,8 +447,6 @@ enum key_extra
 #define K_IGNORE	TERMCAP2KEY(KS_EXTRA, KE_IGNORE)
 #define K_NOP		TERMCAP2KEY(KS_EXTRA, KE_NOP)
 
-#define K_SNIFF		TERMCAP2KEY(KS_EXTRA, KE_SNIFF)
-
 #define K_MOUSEDOWN	TERMCAP2KEY(KS_EXTRA, KE_MOUSEDOWN)
 #define K_MOUSEUP	TERMCAP2KEY(KS_EXTRA, KE_MOUSEUP)
 #define K_MOUSELEFT	TERMCAP2KEY(KS_EXTRA, KE_MOUSELEFT)
--- a/src/normal.c
+++ b/src/normal.c
@@ -163,9 +163,6 @@ static void	nv_halfpage(cmdarg_T *cap);
 static void	nv_join(cmdarg_T *cap);
 static void	nv_put(cmdarg_T *cap);
 static void	nv_open(cmdarg_T *cap);
-#ifdef FEAT_SNIFF
-static void	nv_sniff(cmdarg_T *cap);
-#endif
 #ifdef FEAT_NETBEANS_INTG
 static void	nv_nbcmd(cmdarg_T *cap);
 #endif
@@ -420,9 +417,6 @@ static const struct nv_cmd
     {K_F8,	farsi_fkey,	0,			0},
     {K_F9,	farsi_fkey,	0,			0},
 #endif
-#ifdef FEAT_SNIFF
-    {K_SNIFF,	nv_sniff,	0,			0},
-#endif
 #ifdef FEAT_NETBEANS_INTG
     {K_F21,	nv_nbcmd,	NV_NCH_ALW,		0},
 #endif
@@ -570,10 +564,6 @@ normal_cmd(
      * remembered in "opcount". */
     ca.opcount = opcount;
 
-#ifdef FEAT_SNIFF
-    want_sniff_request = sniff_connected;
-#endif
-
     /*
      * If there is an operator pending, then the command we take this time
      * will terminate it. Finish_op tells us to finish the operation before
@@ -9388,14 +9378,6 @@ nv_open(cmdarg_T *cap)
 	n_opencmd(cap);
 }
 
-#ifdef FEAT_SNIFF
-    static void
-nv_sniff(cmdarg_T *cap UNUSED)
-{
-    ProcessSniffRequests();
-}
-#endif
-
 #ifdef FEAT_NETBEANS_INTG
     static void
 nv_nbcmd(cmdarg_T *cap)
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5340,7 +5340,6 @@ WaitForChar(long msec)
  * "msec" == 0 will check for characters once.
  * "msec" == -1 will block until a character is available.
  * When a GUI is being used, this will not be used for input -- webb
- * Returns also, when a request from Sniff is waiting -- toni.
  * Or when a Linux GPM mouse event is waiting.
  * Or when a clientserver message is on the queue.
  */
@@ -5427,15 +5426,6 @@ RealWaitForChar(int fd, long msec, int *
 	fds[0].events = POLLIN;
 	nfd = 1;
 
-# ifdef FEAT_SNIFF
-#  define SNIFF_IDX 1
-	if (want_sniff_request)
-	{
-	    fds[SNIFF_IDX].fd = fd_from_sniff;
-	    fds[SNIFF_IDX].events = POLLIN;
-	    nfd++;
-	}
-# endif
 # ifdef FEAT_XCLIPBOARD
 	may_restore_clipboard();
 	if (xterm_Shell != (Widget)0)
@@ -5478,17 +5468,6 @@ RealWaitForChar(int fd, long msec, int *
 	    finished = FALSE;
 # endif
 
-# ifdef FEAT_SNIFF
-	if (ret < 0)
-	    sniff_disconnect(1);
-	else if (want_sniff_request)
-	{
-	    if (fds[SNIFF_IDX].revents & POLLHUP)
-		sniff_disconnect(1);
-	    if (fds[SNIFF_IDX].revents & POLLIN)
-		sniff_request_waiting = 1;
-	}
-# endif
 # ifdef FEAT_XCLIPBOARD
 	if (xterm_Shell != (Widget)0 && (fds[xterm_idx].revents & POLLIN))
 	{
@@ -5574,15 +5553,6 @@ select_eintr:
 # endif
 	maxfd = fd;
 
-# ifdef FEAT_SNIFF
-	if (want_sniff_request)
-	{
-	    FD_SET(fd_from_sniff, &rfds);
-	    FD_SET(fd_from_sniff, &efds);
-	    if (maxfd < fd_from_sniff)
-		maxfd = fd_from_sniff;
-	}
-# endif
 # ifdef FEAT_XCLIPBOARD
 	may_restore_clipboard();
 	if (xterm_Shell != (Widget)0)
@@ -5652,17 +5622,6 @@ select_eintr:
 	    finished = FALSE;
 # endif
 
-# ifdef FEAT_SNIFF
-	if (ret < 0 )
-	    sniff_disconnect(1);
-	else if (ret > 0 && want_sniff_request)
-	{
-	    if (FD_ISSET(fd_from_sniff, &efds))
-		sniff_disconnect(1);
-	    if (FD_ISSET(fd_from_sniff, &rfds))
-		sniff_request_waiting = 1;
-	}
-# endif
 # ifdef FEAT_XCLIPBOARD
 	if (ret > 0 && xterm_Shell != (Widget)0
 		&& FD_ISSET(ConnectionNumber(xterm_dpy), &rfds))
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1683,27 +1683,6 @@ mch_inchar(
     if (typeaheadlen > 0)
 	goto theend;
 
-#ifdef FEAT_SNIFF
-    if (want_sniff_request)
-    {
-	if (sniff_request_waiting)
-	{
-	    /* return K_SNIFF */
-	    typeahead[typeaheadlen++] = CSI;
-	    typeahead[typeaheadlen++] = (char_u)KS_EXTRA;
-	    typeahead[typeaheadlen++] = (char_u)KE_SNIFF;
-	    sniff_request_waiting = 0;
-	    want_sniff_request = 0;
-	    goto theend;
-	}
-	else if (time < 0 || time > 250)
-	{
-	    /* don't wait too long, a request might be pending */
-	    time = 250;
-	}
-    }
-#endif
-
     if (time >= 0)
     {
 	if (!WaitForChar(time))     /* no character available */
--- a/src/structs.h
+++ b/src/structs.h
@@ -1639,10 +1639,6 @@ struct file_buffer
     char	 b_fab_rat;	/* Record attribute */
     unsigned int b_fab_mrs;	/* Max record size  */
 #endif
-#ifdef FEAT_SNIFF
-    int		b_sniff;	/* file was loaded through Sniff */
-#endif
-
     int		b_fnum;		/* buffer number for this file. */
 
     int		b_changed;	/* 'modified': Set to TRUE if something in the
--- a/src/term.c
+++ b/src/term.c
@@ -1796,16 +1796,6 @@ set_termname(char_u *term)
 # endif
 #endif	/* FEAT_MOUSE */
 
-#ifdef FEAT_SNIFF
-    {
-	char_u	name[2];
-
-	name[0] = (int)KS_EXTRA;
-	name[1] = (int)KE_SNIFF;
-	add_termcode(name, (char_u *)"\233sniff", FALSE);
-    }
-#endif
-
 #ifdef USE_TERM_CONSOLE
     /* DEFAULT_TERM indicates that it is the machine console. */
     if (STRCMP(term, DEFAULT_TERM) != 0)
--- a/src/ui.c
+++ b/src/ui.c
@@ -1627,7 +1627,7 @@ set_input_buf(char_u *p)
 #if defined(FEAT_GUI) \
 	|| defined(FEAT_MOUSE_GPM) || defined(FEAT_SYSMOUSE) \
 	|| defined(FEAT_XCLIPBOARD) || defined(VMS) \
-	|| defined(FEAT_SNIFF) || defined(FEAT_CLIENTSERVER) \
+	|| defined(FEAT_CLIENTSERVER) \
 	|| defined(PROTO)
 /*
  * Add the given bytes to the input buffer
@@ -1772,17 +1772,7 @@ fill_input_buf(int exit_on_error UNUSED)
     inbufcount = 0;
 # else
 
-#  ifdef FEAT_SNIFF
-    if (sniff_request_waiting)
-    {
-	add_to_input_buf((char_u *)"\233sniff",6); /* results in K_SNIFF */
-	sniff_request_waiting = 0;
-	want_sniff_request = 0;
-	return;
-    }
-#  endif
-
-# ifdef FEAT_MBYTE
+#  ifdef FEAT_MBYTE
     if (rest != NULL)
     {
 	/* Use remainder of previous call, starts with an invalid character
@@ -1806,7 +1796,7 @@ fill_input_buf(int exit_on_error UNUSED)
     }
     else
 	unconverted = 0;
-#endif
+#  endif
 
     len = 0;	/* to avoid gcc warning */
     for (try = 0; try < 100; ++try)
--- a/src/version.c
+++ b/src/version.c
@@ -554,11 +554,6 @@ static char *(features[]) =
 #else
 	"-smartindent",
 #endif
-#ifdef FEAT_SNIFF
-	"+sniff",
-#else
-	"-sniff",
-#endif
 #ifdef STARTUPTIME
 	"+startuptime",
 #else
@@ -749,6 +744,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1433,
+/**/
     1432,
 /**/
     1431,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1972,10 +1972,6 @@ typedef int VimClipboard;	/* This is req
 
 #include "globals.h"	    /* global variables and messages */
 
-#ifdef FEAT_SNIFF
-# include "if_sniff.h"
-#endif
-
 #ifndef FEAT_VIRTUALEDIT
 # define getvvcol(w, p, s, c, e) getvcol(w, p, s, c, e)
 # define virtual_active() FALSE