diff options
Diffstat (limited to 'data/vim/patches/8.1.0763')
-rw-r--r-- | data/vim/patches/8.1.0763 | 5153 |
1 files changed, 0 insertions, 5153 deletions
diff --git a/data/vim/patches/8.1.0763 b/data/vim/patches/8.1.0763 deleted file mode 100644 index 8c4c6109f..000000000 --- a/data/vim/patches/8.1.0763 +++ /dev/null @@ -1,5153 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0763 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0763 -Problem: Nobody is using the Sun Workshop support. -Solution: Remove the Workshop support. -Files: runtime/doc/workshop.txt, runtime/doc/help.txt, - runtime/doc/netbeans.txt, src/Makefile, src/auto/configure, - src/beval.c, src/buffer.c, src/config.h.in, src/config.mk.in, - src/configure.ac, src/evalfunc.c, src/ex_cmds.c, src/ex_cmds.h, - src/ex_docmd.c, src/feature.h, src/fileio.c, src/globals.h, - src/gui.c, src/gui_beval.c, src/gui_motif.c, src/gui_x11.c, - src/integration.c, src/integration.h, src/main.c, src/misc2.c, - src/nbdebug.c, src/netbeans.c, src/proto.h, - src/proto/workshop.pro, src/ui.c, src/version.c, src/vim.h, - src/workshop.c, src/workshop.h, src/wsdebug.c, src/wsdebug.h, - src/ex_cmdidxs.h - - -*** ../vim-8.1.0762/runtime/doc/workshop.txt 2018-05-17 13:42:04.000000000 +0200 ---- runtime/doc/workshop.txt 2019-01-17 14:47:16.643795105 +0100 -*************** -*** 1,4 **** -! *workshop.txt* For Vim version 8.1. Last change: 2013 Jul 06 - - - VIM REFERENCE MANUAL by Gordon Prieur ---- 1,4 ---- -! *workshop.txt* For Vim version 8.1. Last change: 2019 Jan 17 - - - VIM REFERENCE MANUAL by Gordon Prieur -*************** -*** 6,98 **** - - Sun Visual WorkShop Features *workshop* *workshop-support* - -! 1. Introduction |workshop-intro| -! 2. Commands |workshop-commands| -! 3. Compiling vim/gvim for WorkShop |workshop-compiling| -! 4. Configuring gvim for a WorkShop release tree |workshop-configure| -! 5. Obtaining the latest version of the XPM library |workshop-xpm| -! -! {Vi does not have any of these features} -! {only available when compiled with the |+sun_workshop| feature} -! -! ============================================================================== -! 1. Introduction *workshop-intro* -! -! Sun Visual WorkShop has an "Editor of Choice" feature designed to let users -! debug using their favorite editors. For the 6.0 release we have added support -! for gvim. A workshop debug session will have a debugging window and an editor -! window (possibly others as well). The user can do many debugging operations -! from the editor window, minimizing the need to switch from window to window. -! -! The version of vim shipped with Sun Visual WorkShop 6 (also called Forte -! Developer 6) is vim 5.3. The features in this release are much more reliable -! than the vim/gvim shipped with Visual WorkShop. VWS users wishing to use vim -! as their editor should compile these sources and install them in their -! workshop release tree. -! -! ============================================================================== -! 2. Commands *workshop-commands* -! -! *:ws* *:wsverb* -! :ws[verb] verb Pass the verb to the verb executor -! -! Pass the verb to a workshop function which gathers some arguments and -! sends the verb and data to workshop over an IPC connection. -! -! ============================================================================== -! 3. Compiling vim/gvim for WorkShop *workshop-compiling* -! -! Compiling vim with FEAT_SUN_WORKSHOP turns on all compile time flags necessary -! for building a vim to work with Visual WorkShop. The features required for VWS -! have been built and tested using the Sun compilers from the VWS release. They -! have not been built or tested using Gnu compilers. This does not mean the -! features won't build and run if compiled with gcc, just that nothing is -! guaranteed with gcc! -! -! ============================================================================== -! 4. Configuring gvim for a WorkShop release tree *workshop-configure* -! -! There are several assumptions which must be met in order to compile a gvim for -! use with Sun Visual WorkShop 6. -! -! o You should use the compiler in VWS rather than gcc. We have neither -! built nor tested with gcc and cannot guarantee it will build properly. -! -! o You must supply your own XPM library. See |workshop-xpm| below for -! details on obtaining the latest version of XPM. -! -! o Edit the Makefile in the src directory and uncomment the lines for Sun -! Visual WorkShop. You can easily find these by searching for the string -! FEAT_SUN_WORKSHOP -! -! o We also suggest you use Motif for your gui. This will provide gvim with -! the same look-and-feel as the rest of Sun Visual WorkShop. -! -! The following configuration line can be used to configure vim to build for use -! with Sun Visual WorkShop: -! -! $ CC=cc configure --enable-workshop --enable-gui=motif \ -! -prefix=<VWS-install-dir>/contrib/contrib6/<vim-version> -! -! The VWS-install-dir should be the base directory where your Sun Visual WorkShop -! was installed. By default this is /opt/SUNWspro. It will normally require -! root permissions to install the vim release. You will also need to change the -! symlink <VWS-install-dir>/bin/gvim to point to the vim in your newly installed -! directory. The <vim-version> should be a unique version string. I use "vim" -! concatenated with the equivalent of version.h's VIM_VERSION_SHORT. -! -! ============================================================================== -! 5. Obtaining the latest version of the XPM library *workshop-xpm* -! -! The XPM library is required to show images within Vim with Motif or Athena. -! Without it the toolbar and signs will be disabled. -! -! The XPM library is provided by Arnaud Le Hors of the French National Institute -! for Research in Computer Science and Control. It can be downloaded from -! http://cgit.freedesktop.org/xorg/lib/libXpm. The current release, as of this -! writing, is xpm-3.4k-solaris.tgz, which is a gzip'ed tar file. If you create -! the directory /usr/local/xpm and untar the file there you can use the -! uncommented lines in the Makefile without changing them. If you use another -! xpm directory you will need to change the XPM_DIR in src/Makefile. - -! vim:tw=78:ts=8:ft=help:norl: ---- 6,14 ---- - - Sun Visual WorkShop Features *workshop* *workshop-support* - -! The support for WorkShop was removed in patch 8.1.0763 in January 2019. -! The product has not been available for a long time and has been replaced by -! |NetBeans|. - -! -! vim:tw=78:ts=8:noet:ft=help:norl: -*** ../vim-8.1.0762/runtime/doc/help.txt 2018-05-17 13:41:40.000000000 +0200 ---- runtime/doc/help.txt 2019-01-17 14:55:00.628054659 +0100 -*************** -*** 171,177 **** - |if_ole.txt| OLE automation interface for Win32 - |if_ruby.txt| Ruby interface - |debugger.txt| Interface with a debugger -- |workshop.txt| Sun Visual Workshop interface - |netbeans.txt| NetBeans External Editor interface - |sign.txt| debugging signs - ---- 180,185 ---- -*** ../vim-8.1.0762/runtime/doc/netbeans.txt 2018-05-17 13:41:41.000000000 +0200 ---- runtime/doc/netbeans.txt 2019-01-17 14:53:47.956614503 +0100 -*************** -*** 1,10 **** -! *netbeans.txt* For Vim version 8.1. Last change: 2016 Jul 15 - - - VIM REFERENCE MANUAL by Gordon Prieur et al. - - -! *netbeans* *netbeans-support* - - Vim NetBeans Protocol: a socket interface for Vim integration into an IDE. - ---- 1,10 ---- -! *netbeans.txt* For Vim version 8.1. Last change: 2019 Jan 17 - - - VIM REFERENCE MANUAL by Gordon Prieur et al. - - -! *netbeans* *NetBeans* *netbeans-support* - - Vim NetBeans Protocol: a socket interface for Vim integration into an IDE. - -*************** -*** 123,130 **** - by gvim when it is run with one of the following GUIs: GTK, GNOME, Windows, - Athena and Motif. - -! If Motif support is required the user must supply XPM libraries. See -! |workshop-xpm| for details on obtaining the latest version of XPM. - - - On MS-Windows: ---- 123,140 ---- - by gvim when it is run with one of the following GUIs: GTK, GNOME, Windows, - Athena and Motif. - -! *netbeans-xpm* -! If Motif support is required the user must supply XPM libraries. -! The XPM library is required to show images within Vim with Motif or Athena. -! Without it the toolbar and signs will be disabled. -! -! The XPM library is provided by Arnaud Le Hors of the French National Institute -! for Research in Computer Science and Control. It can be downloaded from -! http://cgit.freedesktop.org/xorg/lib/libXpm. The current release, as of this -! writing, is xpm-3.4k-solaris.tgz, which is a gzip'ed tar file. If you create -! the directory /usr/local/xpm and untar the file there you can use the -! uncommented lines in the Makefile without changing them. If you use another -! xpm directory you will need to change the XPM_DIR in src/Makefile. - - - On MS-Windows: -*************** -*** 409,417 **** - Vim will define a sign for the annotation. - When color is a number, this is the "#rrggbb" Red, Green and - Blue values of the color (see |gui-colors|) and the -! highlighting is only defined for GVim. - When color is a name, this color is defined both for Vim -! running in a color terminal and for GVim. - When both "fg" and "bg" are "none" no line highlighting is - used (new in version 2.1). - When "glyphFile" is empty, no text sign is used (new in ---- 419,427 ---- - Vim will define a sign for the annotation. - When color is a number, this is the "#rrggbb" Red, Green and - Blue values of the color (see |gui-colors|) and the -! highlighting is only defined for gVim. - When color is a name, this color is defined both for Vim -! running in a color terminal and for gVim. - When both "fg" and "bg" are "none" no line highlighting is - used (new in version 2.1). - When "glyphFile" is empty, no text sign is used (new in -*** ../vim-8.1.0762/src/Makefile 2019-01-12 22:47:01.256088105 +0100 ---- src/Makefile 2019-01-17 15:04:39.151775617 +0100 -*************** -*** 317,323 **** - # You can give a lot of options to configure. - # Change this to your desire and do 'make config' afterwards - -! # examples: - #CONF_ARGS1 = --exec-prefix=/usr - #CONF_ARGS2 = --with-vim-name=vim8 --with-ex-name=ex8 --with-view-name=view8 - #CONF_ARGS3 = --with-global-runtime=/etc/vim,/usr/share/vim ---- 317,323 ---- - # You can give a lot of options to configure. - # Change this to your desire and do 'make config' afterwards - -! # examples you can uncomment: - #CONF_ARGS1 = --exec-prefix=/usr - #CONF_ARGS2 = --with-vim-name=vim8 --with-ex-name=ex8 --with-view-name=view8 - #CONF_ARGS3 = --with-global-runtime=/etc/vim,/usr/share/vim -*************** -*** 464,482 **** - # TCL - # Uncomment this when you want to include the Tcl interface. - # First one is for static linking, second one for dynamic loading. - #CONF_OPT_TCL = --enable-tclinterp - #CONF_OPT_TCL = --enable-tclinterp=dynamic - #CONF_OPT_TCL = --enable-tclinterp --with-tclsh=tclsh8.4 - - # CSCOPE - # Uncomment this when you want to include the Cscope interface. - #CONF_OPT_CSCOPE = --enable-cscope -! -! # WORKSHOP - Sun Visual Workshop interface. Only works with Motif! -! #CONF_OPT_WORKSHOP = --enable-workshop - - # NETBEANS - NetBeans interface. Only works with Motif, GTK, and gnome. -! # Motif version must have XPM libraries (see |workshop-xpm|). - # Uncomment this when you do not want the netbeans interface. - #CONF_OPT_NETBEANS = --disable-netbeans - ---- 464,479 ---- - # TCL - # Uncomment this when you want to include the Tcl interface. - # First one is for static linking, second one for dynamic loading. - #CONF_OPT_TCL = --enable-tclinterp - #CONF_OPT_TCL = --enable-tclinterp=dynamic - #CONF_OPT_TCL = --enable-tclinterp --with-tclsh=tclsh8.4 - - # CSCOPE - # Uncomment this when you want to include the Cscope interface. - #CONF_OPT_CSCOPE = --enable-cscope - - # NETBEANS - NetBeans interface. Only works with Motif, GTK, and gnome. -! # Motif version must have XPM libraries (see |netbeans-xpm|). - # Uncomment this when you do not want the netbeans interface. - #CONF_OPT_NETBEANS = --disable-netbeans - -*************** -*** 781,787 **** - #CC = /usr/ucb/cc - #EXTRA_LIBS = -R/usr/ucblib - -! ### Solaris with Forte Developer and FEAT_SUN_WORKSHOP - # The Xpm library is available from http://koala.ilog.fr/ftp/pub/xpm. - #CC = cc - #XPM_DIR = /usr/local/xpm/xpm-3.4k-solaris ---- 780,786 ---- - #CC = /usr/ucb/cc - #EXTRA_LIBS = -R/usr/ucblib - -! ### Solaris with Forte Developer and NetBeans. - # The Xpm library is available from http://koala.ilog.fr/ftp/pub/xpm. - #CC = cc - #XPM_DIR = /usr/local/xpm/xpm-3.4k-solaris -*************** -*** 791,800 **** - #EXTRA_IPATHS = $(XPM_IPATH) - #EXTRA_DEFS = -xCC -DHAVE_X11_XPM_H - -- ### Solaris with workshop compilers: Vim is unstable when compiled with -- # "-fast". Use this instead. (Shea Martin) -- #CFLAGS = -x02 -xtarget=ultra -- - ### (R) for Solaris 2.5 (or 2.5.1) with gcc > 2.5.6 you might need this: - #LDFLAGS = -lw -ldl -lXmu - #GUI_LIB_LOC = -L/usr/local/lib ---- 790,795 ---- -*************** -*** 1651,1664 **** - $(PERL_SRC) \ - $(PYTHON_SRC) $(PYTHON3_SRC) \ - $(TCL_SRC) \ -! $(RUBY_SRC) \ -! $(WORKSHOP_SRC) \ -! $(WSDEBUG_SRC) - - 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 \ -! gui_beval.c workshop.c wsdebug.c integration.c \ -! netbeans.c channel.c \ - $(GRESOURCE_SRC) - - # Unittest files ---- 1646,1656 ---- - $(PERL_SRC) \ - $(PYTHON_SRC) $(PYTHON3_SRC) \ - $(TCL_SRC) \ -! $(RUBY_SRC) - - 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 \ -! gui_beval.c netbeans.c channel.c \ - $(GRESOURCE_SRC) - - # Unittest files -*************** -*** 1684,1690 **** - # The perl sources also don't work well with lint. - LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) \ - $(PYTHON_SRC) $(PYTHON3_SRC) $(TCL_SRC) \ -- $(WORKSHOP_SRC) $(WSDEBUG_SRC) \ - $(NETBEANS_SRC) $(CHANNEL_SRC) $(TERM_SRC) - #LINT_SRC = $(SRC) - #LINT_SRC = $(ALL_SRC) ---- 1676,1681 ---- -*************** -*** 1761,1771 **** - $(TCL_OBJ) \ - $(RUBY_OBJ) \ - $(OS_EXTRA_OBJ) \ -- $(WORKSHOP_OBJ) \ - $(NETBEANS_OBJ) \ - $(CHANNEL_OBJ) \ -! $(XDIFF_OBJS) \ -! $(WSDEBUG_OBJ) - - # The files included by tests are not in OBJ_COMMON. - OBJ_MAIN = \ ---- 1752,1760 ---- - $(TCL_OBJ) \ - $(RUBY_OBJ) \ - $(OS_EXTRA_OBJ) \ - $(NETBEANS_OBJ) \ - $(CHANNEL_OBJ) \ -! $(XDIFF_OBJS) - - # The files included by tests are not in OBJ_COMMON. - OBJ_MAIN = \ -*************** -*** 1889,1895 **** - window.pro \ - beval.pro \ - gui_beval.pro \ -- workshop.pro \ - netbeans.pro \ - channel.pro \ - $(ALL_GUI_PRO) \ ---- 1878,1883 ---- -*************** -*** 1932,1938 **** - $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \ - $(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_FEAT) $(CONF_TERM_LIB) \ - $(CONF_OPT_COMPBY) $(CONF_OPT_ACL) $(CONF_OPT_NETBEANS) \ - $(CONF_OPT_CHANNEL) $(CONF_OPT_TERMINAL) \ ---- 1920,1926 ---- - $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \ - $(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_FEAT) $(CONF_TERM_LIB) \ - $(CONF_OPT_COMPBY) $(CONF_OPT_ACL) $(CONF_OPT_NETBEANS) \ - $(CONF_OPT_CHANNEL) $(CONF_OPT_TERMINAL) \ -*************** -*** 3098,3106 **** - objects/if_tcl.o: if_tcl.c - $(CCC_NF) $(TCL_CFLAGS) $(ALL_CFLAGS) -o $@ if_tcl.c - -- objects/integration.o: integration.c -- $(CCC) -o $@ integration.c -- - objects/json.o: json.c - $(CCC) -o $@ json.c - ---- 3086,3091 ---- -*************** -*** 3239,3250 **** - objects/window.o: window.c - $(CCC) -o $@ window.c - -- objects/workshop.o: workshop.c -- $(CCC) -o $@ workshop.c -- -- objects/wsdebug.o: wsdebug.c -- $(CCC) -o $@ wsdebug.c -- - objects/netbeans.o: netbeans.c - $(CCC) -o $@ netbeans.c - ---- 3224,3229 ---- -*************** -*** 3784,3799 **** - os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \ - proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ - proto.h globals.h farsi.h arabic.h -- objects/workshop.o: workshop.c protodef.h auto/config.h integration.h vim.h \ -- feature.h os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h \ -- option.h beval.h proto/gui_beval.pro structs.h regexp.h gui.h alloc.h \ -- ex_cmds.h spell.h proto.h globals.h farsi.h arabic.h version.h \ -- workshop.h -- objects/wsdebug.o: wsdebug.c -- objects/integration.o: integration.c vim.h protodef.h auto/config.h feature.h \ -- os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \ -- proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ -- proto.h globals.h farsi.h arabic.h integration.h - objects/netbeans.o: netbeans.c vim.h protodef.h auto/config.h feature.h os_unix.h \ - auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \ - proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \ ---- 3763,3768 ---- -*** ../vim-8.1.0762/src/auto/configure 2019-01-12 16:10:47.415360504 +0100 ---- src/auto/configure 2019-01-17 14:58:28.142489864 +0100 -*************** -*** 661,668 **** - CHANNEL_SRC - NETBEANS_OBJ - NETBEANS_SRC -- WORKSHOP_OBJ -- WORKSHOP_SRC - RUBY_LIBS - RUBY_CFLAGS - RUBY_PRO ---- 661,666 ---- -*************** -*** 812,818 **** - enable_rubyinterp - with_ruby_command - enable_cscope -- enable_workshop - enable_netbeans - enable_channel - enable_terminal ---- 810,815 ---- -*************** -*** 1494,1500 **** - --enable-tclinterp=OPTS Include Tcl interpreter. default=no OPTS=no/yes/dynamic - --enable-rubyinterp=OPTS Include Ruby interpreter. default=no OPTS=no/yes/dynamic - --enable-cscope Include cscope interface. -- --enable-workshop Include Sun Visual Workshop support. - --disable-netbeans Disable NetBeans integration support. - --disable-channel Disable process communication support. - --enable-terminal Enable terminal emulation support. ---- 1491,1496 ---- -*************** -*** 7665,7693 **** - - fi - -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-workshop argument" >&5 -- $as_echo_n "checking --enable-workshop argument... " >&6; } -- # Check whether --enable-workshop was given. -- if test "${enable_workshop+set}" = set; then : -- enableval=$enable_workshop; -- else -- enable_workshop="no" -- fi -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_workshop" >&5 -- $as_echo "$enable_workshop" >&6; } -- if test "$enable_workshop" = "yes"; then -- $as_echo "#define FEAT_SUN_WORKSHOP 1" >>confdefs.h -- -- WORKSHOP_SRC="workshop.c integration.c" -- -- WORKSHOP_OBJ="objects/workshop.o objects/integration.o" -- -- if test "${enable_gui-xxx}" = xxx; then -- enable_gui=motif -- fi -- fi -- - { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-netbeans argument" >&5 - $as_echo_n "checking --disable-netbeans argument... " >&6; } - # Check whether --enable-netbeans was given. ---- 7661,7666 ---- -*** ../vim-8.1.0762/src/beval.c 2018-10-02 14:15:08.991376909 +0200 ---- src/beval.c 2019-01-17 15:16:25.906741669 +0100 -*************** -*** 273,282 **** - if (bevalServers & BEVAL_NETBEANS) - netbeans_beval_cb(beval, state); - #endif -- #ifdef FEAT_SUN_WORKSHOP -- if (bevalServers & BEVAL_WORKSHOP) -- workshop_beval_cb(beval, state); -- #endif - - recursive = FALSE; - } ---- 273,278 ---- -*** ../vim-8.1.0762/src/buffer.c 2019-01-15 20:19:36.739904461 +0100 ---- src/buffer.c 2019-01-17 15:19:25.237997004 +0100 -*************** -*** 658,668 **** - */ - if (wipe_buf) - { -- #ifdef FEAT_SUN_WORKSHOP -- if (usingSunWorkShop) -- workshop_file_closed_lineno((char *)buf->b_ffname, -- (int)buf->b_last_cursor.lnum); -- #endif - if (buf->b_sfname != buf->b_ffname) - VIM_CLEAR(buf->b_sfname); - else ---- 658,663 ---- -*** ../vim-8.1.0762/src/config.h.in 2018-12-21 11:48:48.320680492 +0100 ---- src/config.h.in 2019-01-17 14:58:51.046319671 +0100 -*************** -*** 441,449 **** - /* Define if we have shl_load() */ - #undef HAVE_SHL_LOAD - -- /* Define if you want to include Sun Visual Workshop support. */ -- #undef FEAT_SUN_WORKSHOP -- - /* Define if you want to include NetBeans integration. */ - #undef FEAT_NETBEANS_INTG - ---- 441,446 ---- -*** ../vim-8.1.0762/src/config.mk.in 2018-04-11 22:14:38.000000000 +0200 ---- src/config.mk.in 2019-01-17 14:59:00.314250926 +0100 -*************** -*** 81,89 **** - HANGULIN_SRC = @HANGULIN_SRC@ - HANGULIN_OBJ = @HANGULIN_OBJ@ - -- WORKSHOP_SRC = @WORKSHOP_SRC@ -- WORKSHOP_OBJ = @WORKSHOP_OBJ@ -- - NETBEANS_SRC = @NETBEANS_SRC@ - NETBEANS_OBJ = @NETBEANS_OBJ@ - CHANNEL_SRC = @CHANNEL_SRC@ ---- 81,86 ---- -*** ../vim-8.1.0762/src/configure.ac 2019-01-12 16:10:47.411360533 +0100 ---- src/configure.ac 2019-01-17 14:58:24.194519245 +0100 -*************** -*** 1996,2017 **** - AC_DEFINE(FEAT_CSCOPE) - fi - -- AC_MSG_CHECKING(--enable-workshop argument) -- AC_ARG_ENABLE(workshop, -- [ --enable-workshop Include Sun Visual Workshop support.], , -- [enable_workshop="no"]) -- AC_MSG_RESULT($enable_workshop) -- if test "$enable_workshop" = "yes"; then -- AC_DEFINE(FEAT_SUN_WORKSHOP) -- WORKSHOP_SRC="workshop.c integration.c" -- AC_SUBST(WORKSHOP_SRC) -- WORKSHOP_OBJ="objects/workshop.o objects/integration.o" -- AC_SUBST(WORKSHOP_OBJ) -- if test "${enable_gui-xxx}" = xxx; then -- enable_gui=motif -- fi -- fi -- - AC_MSG_CHECKING(--disable-netbeans argument) - AC_ARG_ENABLE(netbeans, - [ --disable-netbeans Disable NetBeans integration support.], ---- 1996,2001 ---- -*** ../vim-8.1.0762/src/evalfunc.c 2019-01-15 22:16:37.414340200 +0100 ---- src/evalfunc.c 2019-01-17 14:50:04.854386619 +0100 -*************** -*** 6512,6520 **** - #ifdef FEAT_STL_OPT - "statusline", - #endif -- #ifdef FEAT_SUN_WORKSHOP -- "sun_workshop", -- #endif - #ifdef FEAT_NETBEANS_INTG - "netbeans_intg", - #endif ---- 6512,6517 ---- -*** ../vim-8.1.0762/src/ex_cmds.c 2019-01-13 23:38:33.387773334 +0100 ---- src/ex_cmds.c 2019-01-17 15:20:04.497831990 +0100 -*************** -*** 3805,3813 **** - int newcol = -1; - int solcol = -1; - pos_T *pos; -- #ifdef FEAT_SUN_WORKSHOP -- char_u *cp; -- #endif - char_u *command = NULL; - #ifdef FEAT_SPELL - int did_get_winopts = FALSE; ---- 3805,3810 ---- -*************** -*** 3881,3891 **** - if (free_fname != NULL) - ffname = free_fname; - other_file = otherfile(ffname); -- #ifdef FEAT_SUN_WORKSHOP -- if (usingSunWorkShop && p_acd -- && (cp = vim_strrchr(sfname, '/')) != NULL) -- sfname = ++cp; -- #endif - } - } - ---- 3878,3883 ---- -*************** -*** 4457,4469 **** - } - #endif - -! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) - if (curbuf->b_ffname != NULL) - { -- # ifdef FEAT_SUN_WORKSHOP -- if (gui.in_use && usingSunWorkShop) -- workshop_file_opened((char *)curbuf->b_ffname, curbuf->b_p_ro); -- # endif - # ifdef FEAT_NETBEANS_INTG - if ((flags & ECMD_SET_HELP) != ECMD_SET_HELP) - netbeans_file_opened(curbuf); ---- 4449,4457 ---- - } - #endif - -! #if defined(FEAT_NETBEANS_INTG) - if (curbuf->b_ffname != NULL) - { - # ifdef FEAT_NETBEANS_INTG - if ((flags & ECMD_SET_HELP) != ECMD_SET_HELP) - netbeans_file_opened(curbuf); -*** ../vim-8.1.0762/src/ex_cmds.h 2019-01-13 23:38:33.387773334 +0100 ---- src/ex_cmds.h 2019-01-17 14:56:18.839459572 +0100 -*************** -*** 1670,1678 **** - EX(CMD_wqall, "wqall", do_wqall, - BANG|FILE1|ARGOPT|DFLALL|TRLBAR, - ADDR_LINES), -- EX(CMD_wsverb, "wsverb", ex_wsverb, -- EXTRA|NOTADR|NEEDARG, -- ADDR_LINES), - EX(CMD_wundo, "wundo", ex_wundo, - BANG|NEEDARG|FILE1, - ADDR_LINES), ---- 1670,1675 ---- -*** ../vim-8.1.0762/src/ex_docmd.c 2019-01-15 20:19:36.743904434 +0100 ---- src/ex_docmd.c 2019-01-17 15:20:26.561736397 +0100 -*************** -*** 411,419 **** - #ifndef FEAT_SIGNS - # define ex_sign ex_ni - #endif -- #ifndef FEAT_SUN_WORKSHOP -- # define ex_wsverb ex_ni -- #endif - #ifndef FEAT_NETBEANS_INTG - # define ex_nbclose ex_ni - # define ex_nbkey ex_ni ---- 411,416 ---- -*** ../vim-8.1.0762/src/feature.h 2019-01-12 16:10:47.415360504 +0100 ---- src/feature.h 2019-01-17 15:11:32.124821752 +0100 -*************** -*** 1232,1238 **** - * +perl Perl interface: "--enable-perlinterp" - * +python Python interface: "--enable-pythoninterp" - * +tcl TCL interface: "--enable-tclinterp" -- * +sun_workshop Sun Workshop integration - * +netbeans_intg Netbeans integration - * +channel Inter process communication - */ ---- 1232,1237 ---- -*************** -*** 1244,1256 **** - */ - - /* -- * The Sun Workshop features currently only work with Motif. -- */ -- #if !defined(FEAT_GUI_MOTIF) && defined(FEAT_SUN_WORKSHOP) -- # undef FEAT_SUN_WORKSHOP -- #endif -- -- /* - * The Netbeans feature requires +eval. - */ - #if !defined(FEAT_EVAL) && defined(FEAT_NETBEANS_INTG) ---- 1243,1248 ---- -*************** -*** 1279,1286 **** - * +signs Allow signs to be displayed to the left of text lines. - * Adds the ":sign" command. - */ -! #if defined(FEAT_BIG) || defined(FEAT_SUN_WORKSHOP) \ -! || defined(FEAT_NETBEANS_INTG) - # define FEAT_SIGNS - # if ((defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) \ - && defined(HAVE_X11_XPM_H)) \ ---- 1271,1277 ---- - * +signs Allow signs to be displayed to the left of text lines. - * Adds the ":sign" command. - */ -! #if defined(FEAT_BIG) || defined(FEAT_NETBEANS_INTG) - # define FEAT_SIGNS - # if ((defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) \ - && defined(HAVE_X11_XPM_H)) \ -*************** -*** 1299,1305 **** - || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32)) \ - && ( ((defined(FEAT_TOOLBAR) || defined(FEAT_GUI_TABLINE)) \ - && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)) \ -- || defined(FEAT_SUN_WORKSHOP) \ - || defined(FEAT_NETBEANS_INTG) || defined(FEAT_EVAL)) - # define FEAT_BEVAL_GUI - # if !defined(FEAT_XFONTSET) && !defined(FEAT_GUI_GTK) \ ---- 1290,1295 ---- -*************** -*** 1329,1365 **** - # define FEAT_GUI_X11 - #endif - -! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) -! /* -! * The following features are (currently) only used by Sun Visual WorkShop 6 -! * and NetBeans. These features could be used with other integrations with -! * debuggers so I've used separate feature defines. -! */ - # if !defined(FEAT_MENU) - # define FEAT_MENU - # endif - #endif - -! #if defined(FEAT_SUN_WORKSHOP) -! /* -! * Use an alternative method of X input for a secondary -! * command input. -! */ -! # define ALT_X_INPUT -! - /* - * +footer Motif only: Add a message area at the bottom of the - * main window area. - */ - # define FEAT_FOOTER -- - #endif - - /* - * +autochdir 'autochdir' option. - */ -! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ -! || defined(FEAT_BIG) - # define FEAT_AUTOCHDIR - #endif - ---- 1319,1343 ---- - # define FEAT_GUI_X11 - #endif - -! #if defined(FEAT_NETBEANS_INTG) -! // NetBeans uses menus. - # if !defined(FEAT_MENU) - # define FEAT_MENU - # endif - #endif - -! #if 0 - /* - * +footer Motif only: Add a message area at the bottom of the - * main window area. - */ - # define FEAT_FOOTER - #endif - - /* - * +autochdir 'autochdir' option. - */ -! #if defined(FEAT_NETBEANS_INTG) || defined(FEAT_BIG) - # define FEAT_AUTOCHDIR - #endif - -*** ../vim-8.1.0762/src/fileio.c 2019-01-13 23:38:33.391773303 +0100 ---- src/fileio.c 2019-01-17 15:20:35.345697789 +0100 -*************** -*** 5094,5104 **** - if (!p_bk && backup != NULL && mch_remove(backup) != 0) - emsg(_("E207: Can't delete backup file")); - -- #ifdef FEAT_SUN_WORKSHOP -- if (usingSunWorkShop) -- workshop_file_saved((char *) ffname); -- #endif -- - goto nofail; - - /* ---- 5094,5099 ---- -*** ../vim-8.1.0762/src/globals.h 2019-01-16 22:41:50.091917818 +0100 ---- src/globals.h 2019-01-17 15:26:00.420093561 +0100 -*************** -*** 1218,1227 **** - #if defined(FEAT_BEVAL) && !defined(NO_X11_INCLUDES) - EXTERN BalloonEval *balloonEval INIT(= NULL); - EXTERN int balloonEvalForTerm INIT(= FALSE); -! # if defined(FEAT_NETBEANS_INTG) || defined(FEAT_SUN_WORKSHOP) - EXTERN int bevalServers INIT(= 0); - # define BEVAL_NETBEANS 0x01 -- # define BEVAL_WORKSHOP 0x02 - # endif - #endif - ---- 1218,1226 ---- - #if defined(FEAT_BEVAL) && !defined(NO_X11_INCLUDES) - EXTERN BalloonEval *balloonEval INIT(= NULL); - EXTERN int balloonEvalForTerm INIT(= FALSE); -! # if defined(FEAT_NETBEANS_INTG) - EXTERN int bevalServers INIT(= 0); - # define BEVAL_NETBEANS 0x01 - # endif - #endif - -*************** -*** 1363,1376 **** - EXTERN int need_cursor_line_redraw INIT(= FALSE); - #endif - -- #ifdef ALT_X_INPUT -- /* we need to be able to go into the dispatch loop while processing a command -- * received via alternate input. However, we don't want to process another -- * command until the first is completed. -- */ -- EXTERN int suppress_alternate_input INIT(= FALSE); -- #endif -- - #ifdef USE_MCH_ERRMSG - /* Grow array to collect error messages in until they can be displayed. */ - EXTERN garray_T error_ga ---- 1362,1367 ---- -*** ../vim-8.1.0762/src/gui.c 2019-01-13 23:38:33.391773303 +0100 ---- src/gui.c 2019-01-17 15:21:11.121537479 +0100 -*************** -*** 672,681 **** - #ifdef FEAT_MENU - gui_create_initial_menus(root_menu); - #endif -- #ifdef FEAT_SUN_WORKSHOP -- if (usingSunWorkShop) -- workshop_init(); -- #endif - #ifdef FEAT_SIGN_ICONS - sign_gui_started(); - #endif ---- 672,677 ---- -*************** -*** 1604,1622 **** - /* Remember the original window position. */ - (void)gui_mch_get_winpos(&x, &y); - -! #ifdef USE_SUN_WORKSHOP -! if (!mustset && usingSunWorkShop -! && workshop_get_width_height(&width, &height)) -! { -! Columns = (width - base_width + gui.char_width - 1) / gui.char_width; -! Rows = (height - base_height + gui.char_height - 1) / gui.char_height; -! } -! else -! #endif -! { -! width = Columns * gui.char_width + base_width; -! height = Rows * gui.char_height + base_height; -! } - - if (fit_to_display) - { ---- 1600,1607 ---- - /* Remember the original window position. */ - (void)gui_mch_get_winpos(&x, &y); - -! width = Columns * gui.char_width + base_width; -! height = Rows * gui.char_height + base_height; - - if (fit_to_display) - { -*************** -*** 5128,5134 **** - } - #endif - -! #if defined(FIND_REPLACE_DIALOG) || defined(FEAT_SUN_WORKSHOP) \ - || defined(NEED_GUI_UPDATE_SCREEN) \ - || defined(PROTO) - /* ---- 5113,5119 ---- - } - #endif - -! #if defined(FIND_REPLACE_DIALOG) \ - || defined(NEED_GUI_UPDATE_SCREEN) \ - || defined(PROTO) - /* -*** ../vim-8.1.0762/src/gui_beval.c 2019-01-13 23:38:33.391773303 +0100 ---- src/gui_beval.c 2019-01-17 15:21:35.733424452 +0100 -*************** -*** 199,206 **** - #endif - #endif /* !FEAT_GUI_W32 */ - -! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ -! || defined(FEAT_EVAL) || defined(PROTO) - # if !defined(FEAT_GUI_W32) || defined(PROTO) - - /* ---- 199,205 ---- - #endif - #endif /* !FEAT_GUI_W32 */ - -! #if defined(FEAT_NETBEANS_INTG) || defined(FEAT_EVAL) || defined(PROTO) - # if !defined(FEAT_GUI_W32) || defined(PROTO) - - /* -*************** -*** 216,222 **** - undrawBalloon(beval); - } - # endif /* !FEAT_GUI_W32 */ -! #endif /* FEAT_SUN_WORKSHOP || FEAT_NETBEANS_INTG || PROTO */ - - #if !defined(FEAT_GUI_W32) || defined(PROTO) - #if defined(FEAT_BEVAL_TIP) || defined(PROTO) ---- 215,221 ---- - undrawBalloon(beval); - } - # endif /* !FEAT_GUI_W32 */ -! #endif /* FEAT_NETBEANS_INTG || PROTO */ - - #if !defined(FEAT_GUI_W32) || defined(PROTO) - #if defined(FEAT_BEVAL_TIP) || defined(PROTO) -*** ../vim-8.1.0762/src/gui_motif.c 2018-12-11 20:39:15.442937076 +0100 ---- src/gui_motif.c 2019-01-17 15:21:49.653359579 +0100 -*************** -*** 698,705 **** - XtVaSetValues(shell, XmNmappedWhenManaged, mappedWhenManaged, NULL); - } - -! #if defined(FEAT_MENU) || defined(FEAT_SUN_WORKSHOP) \ -! || defined(FEAT_GUI_DIALOG) || defined(PROTO) - - /* - * Encapsulate the way an XmFontList is created. ---- 698,704 ---- - XtVaSetValues(shell, XmNmappedWhenManaged, mappedWhenManaged, NULL); - } - -! #if defined(FEAT_MENU) || defined(FEAT_GUI_DIALOG) || defined(PROTO) - - /* - * Encapsulate the way an XmFontList is created. -*** ../vim-8.1.0762/src/gui_x11.c 2019-01-16 22:15:07.872962363 +0100 ---- src/gui_x11.c 2019-01-17 15:23:32.516860907 +0100 -*************** -*** 22,32 **** - #include <X11/cursorfont.h> - - /* -! * For Workshop XpmP.h is preferred, because it makes the signs drawn with a -! * transparent background instead of black. - */ - #if defined(HAVE_XM_XPMP_H) && defined(FEAT_GUI_MOTIF) \ -! && (!defined(HAVE_X11_XPM_H) || defined(FEAT_SUN_WORKSHOP)) - # include <Xm/XpmP.h> - #else - # ifdef HAVE_X11_XPM_H ---- 22,32 ---- - #include <X11/cursorfont.h> - - /* -! * XpmP.h is preferred, because it makes the signs drawn with a transparent -! * background instead of black. - */ - #if defined(HAVE_XM_XPMP_H) && defined(FEAT_GUI_MOTIF) \ -! && !defined(HAVE_X11_XPM_H) - # include <Xm/XpmP.h> - #else - # ifdef HAVE_X11_XPM_H -*************** -*** 469,475 **** - XtRString, - DFLT_TOOLTIP_FONT - }, -! /* This one isn't really needed, keep for Sun Workshop? */ - { - "balloonEvalFontSet", - XtCFontSet, ---- 469,475 ---- - XtRString, - DFLT_TOOLTIP_FONT - }, -! /* This one may not be really needed? */ - { - "balloonEvalFontSet", - XtCFontSet, -*************** -*** 636,643 **** - gui_mch_update(); - } - -! #if ((defined(FEAT_NETBEANS_INTG) || defined(FEAT_SUN_WORKSHOP)) \ -! && defined(FEAT_GUI_MOTIF)) || defined(PROTO) - /* - * This function fills in the XRectangle object with the current x,y - * coordinates and height, width so that an XtVaSetValues to the same shell of ---- 636,642 ---- - gui_mch_update(); - } - -! #if (defined(FEAT_NETBEANS_INTG) && defined(FEAT_GUI_MOTIF)) || defined(PROTO) - /* - * This function fills in the XRectangle object with the current x,y - * coordinates and height, width so that an XtVaSetValues to the same shell of -*************** -*** 701,715 **** - #endif - ); - } -- #ifdef FEAT_SUN_WORKSHOP -- if (usingSunWorkShop) -- { -- XRectangle rec; -- -- shellRectangle(w, &rec); -- workshop_frame_moved(rec.x, rec.y, rec.width, rec.height); -- } -- #endif - #if defined(FEAT_NETBEANS_INTG) && defined(FEAT_GUI_MOTIF) - if (netbeans_active()) - { ---- 700,705 ---- -*************** -*** 1224,1245 **** - argv[*argc] = NULL; - } - else -- #ifdef FEAT_SUN_WORKSHOP -- if (strcmp("-ws", argv[arg]) == 0) -- { -- usingSunWorkShop++; -- p_acd = TRUE; -- gui.dofork = FALSE; /* don't fork() when starting GUI */ -- mch_memmove(&argv[arg], &argv[arg + 1], -- (--*argc - arg) * sizeof(char *)); -- argv[*argc] = NULL; -- # ifdef WSDEBUG -- wsdebug_wait(WT_ENV | WT_WAIT | WT_STOP, "SPRO_GVIM_WAIT", 20); -- wsdebug_log_init("SPRO_GVIM_DEBUG", "SPRO_GVIM_DLEVEL"); -- # endif -- } -- else -- #endif - #ifdef FEAT_NETBEANS_INTG - if (strncmp("-nb", argv[arg], 3) == 0) - { ---- 1214,1219 ---- -*************** -*** 1543,1553 **** - if (gui.color_approx) - emsg(_("Vim E458: Cannot allocate colormap entry, some colors may be incorrect")); - -- #ifdef FEAT_SUN_WORKSHOP -- if (usingSunWorkShop) -- workshop_connect(app_context); -- #endif -- - #ifdef FEAT_BEVAL_GUI - gui_init_tooltip_font(); - #endif ---- 1517,1522 ---- -*************** -*** 1681,1689 **** - #ifdef FEAT_XIM - xim_init(); - #endif -- #ifdef FEAT_SUN_WORKSHOP -- workshop_postinit(); -- #endif - - return OK; - } ---- 1650,1655 ---- -*************** -*** 2748,2759 **** - #endif - - focus = gui.in_focus; -! #ifdef ALT_X_INPUT -! if (suppress_alternate_input) -! desired = (XtIMXEvent | XtIMTimer); -! else -! #endif -! desired = (XtIMAll); - while (!timed_out) - { - /* Stop or start blinking when focus changes */ ---- 2714,2720 ---- - #endif - - focus = gui.in_focus; -! desired = (XtIMAll); - while (!timed_out) - { - /* Stop or start blinking when focus changes */ -*** ../vim-8.1.0762/src/integration.c 2019-01-13 23:50:56.358162250 +0100 ---- src/integration.c 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,1112 **** -- /* vi:set ts=8 sw=8 noet: -- * -- * VIM - Vi IMproved by Bram Moolenaar -- * Visual Workshop integration by Gordon Prieur -- * -- * Do ":help uganda" in Vim to read copying and usage conditions. -- * Do ":help credits" in Vim to see a list of people who contributed. -- * See README.txt for an overview of the Vim source code. -- */ -- -- /* -- * Integration with Sun Workshop. -- * -- * This file should not change much, it's also used by other editors that -- * connect to Workshop. Consider changing workshop.c instead. -- */ -- /* -- -> consider using MakeSelectionVisible instead of gotoLine hacks -- to show the line properly -- -> consider using glue instead of our own message wrapping functions -- (but can only use glue if we don't have to distribute source) -- */ -- -- #include "vim.h" -- -- #include <stdio.h> -- #include <stdlib.h> -- -- #ifdef INET_SOCKETS -- #include <netdb.h> -- #include <netinet/in.h> -- #else -- #include <sys/un.h> -- #endif -- -- #include <sys/types.h> -- #include <sys/socket.h> -- #include <sys/param.h> -- #ifdef HAVE_LIBGEN_H -- # include <libgen.h> -- #endif -- #include <unistd.h> -- #include <string.h> -- -- #include <X11/Intrinsic.h> -- #include <Xm/Xm.h> -- #include <Xm/AtomMgr.h> -- #include <Xm/PushB.h> -- -- #ifdef HAVE_X11_XPM_H -- # include <X11/xpm.h> -- #else -- # ifdef HAVE_XM_XPMP_H -- # include <Xm/XpmP.h> -- # endif -- #endif -- -- #ifdef HAVE_UTIL_DEBUG_H -- # include <util/debug.h> -- #endif -- #ifdef HAVE_UTIL_MSGI18N_H -- # include <util/msgi18n.h> -- #endif -- -- #include "integration.h" /* <EditPlugin/integration.h> */ -- #ifdef HAVE_FRAME_H -- # include <frame.h> -- #endif -- -- #ifndef MAX -- # define MAX(a, b) (a) > (b) ? (a) : (b) -- #endif -- -- #ifndef NOCATGETS -- # define NOCATGETS(x) x -- #endif -- -- /* Functions private to this file */ -- static void workshop_disconnect(void); -- static void workshop_sensitivity(int num, char *table); -- static void adjust_sign_name(char *filename); -- static void process_menuItem(char *); -- static void process_toolbarButton(char *); -- static void workshop_set_option_first(char *name, char *value); -- -- static size_t dummy; /* to ignore return value of write() */ -- -- #define CMDBUFSIZ 2048 -- -- #ifdef DEBUG -- static FILE *dfd; -- static void pldebug(char *, ...); -- static void unrecognised_message(char *); -- -- #define HANDLE_ERRORS(cmd) else unrecognised_message(cmd); -- #else -- #define HANDLE_ERRORS(cmd) -- #endif -- -- /* -- * Version number of the protocol between an editor and eserve. -- * This number should be incremented when the protocol -- * is changed. -- */ -- #define PROTOCOL_VERSION "4.0.0" -- -- static int sd = -1; -- static XtInputId inputHandler; /* Cookie for input */ -- -- Boolean save_files = True; /* When true, save all files before build actions */ -- -- static void -- workshop_connection_closed(void) -- { -- /* -- * socket closed on other end -- */ -- XtRemoveInput(inputHandler); -- inputHandler = 0; -- sd = -1; -- } -- -- static char * -- getCommand(void) -- { -- int len; /* length of this command */ -- char lenbuf[7]; /* get the length string here */ -- char *newcb; /* used to realloc cmdbuf */ -- static char *cmdbuf;/* get the command string here */ -- static int cbsize;/* size of cmdbuf */ -- -- if ((len = read(sd, &lenbuf, 6)) == 6) { -- lenbuf[6] = 0; /* Terminate buffer such that atoi() works right */ -- len = atoi(lenbuf); -- if (cbsize < (len + 1)) { -- newcb = (char *) realloc(cmdbuf, -- MAX((len + 256), CMDBUFSIZ)); -- if (newcb != NULL) { -- cmdbuf = newcb; -- cbsize = MAX((len + 256), CMDBUFSIZ); -- } -- } -- if (cbsize >= len && (len = read(sd, cmdbuf, len)) > 0) { -- cmdbuf[len] = 0; -- return cmdbuf; -- } else { -- return NULL; -- } -- } else { -- if (len == 0) { /* EOF */ -- workshop_connection_closed(); -- } -- return NULL; -- } -- -- } -- -- static void -- messageFromEserve(XtPointer clientData UNUSED, -- int *dum1 UNUSED, -- XtInputId *dum2 UNUSED) -- { -- char *cmd; /* the 1st word of the command */ -- -- cmd = getCommand(); -- if (cmd == NULL) { -- /* We're being shut down by eserve and the "quit" message -- * didn't arrive before the socket connection got closed */ -- return; -- } -- #ifdef DEBUG -- pldebug("%s\n", cmd); -- #endif -- switch (*cmd) { -- case 'a': -- if (cmd[1] == 'c' && -- strncmp(cmd, NOCATGETS("ack "), 4) == 0) { -- int ackNum; -- char buf[20]; -- -- ackNum = atoi(&cmd[4]); -- vim_snprintf(buf, sizeof(buf), -- NOCATGETS("ack %d\n"), ackNum); -- dummy = write(sd, buf, strlen(buf)); -- } else if (strncmp(cmd, -- NOCATGETS("addMarkType "), 12) == 0) { -- int idx; -- char *color; -- char *sign; -- -- idx = atoi(strtok(&cmd[12], " ")); -- color = strtok(NULL, NOCATGETS("\001")); -- sign = strtok(NULL, NOCATGETS("\001")); -- /* Skip space that separates names */ -- if (color) { -- color++; -- } -- if (sign) { -- sign++; -- } -- /* Change sign name to accommodate a different size? */ -- adjust_sign_name(sign); -- workshop_add_mark_type(idx, color, sign); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'b': -- if (strncmp(cmd, -- NOCATGETS("balloon "), 8) == 0) { -- char *tip; -- -- tip = strtok(&cmd[8], NOCATGETS("\001")); -- workshop_show_balloon_tip(tip); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'c': -- if (strncmp(cmd, -- NOCATGETS("changeMarkType "), 15) == 0) { -- char *file; -- int markId; -- int type; -- -- file = strtok(&cmd[15], " "); -- markId = atoi(strtok(NULL, " ")); -- type = atoi(strtok(NULL, " ")); -- workshop_change_mark_type(file, markId, type); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'd': -- if (strncmp(cmd, NOCATGETS("deleteMark "), 11) == 0) { -- char *file; -- int markId; -- -- file = strtok(&cmd[11], " "); -- markId = atoi(strtok(NULL, " ")); -- workshop_delete_mark(file, markId); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'f': -- if (cmd[1] == 'o' && -- strncmp(cmd, NOCATGETS("footerMsg "), 10) == 0) { -- int severity; -- char *message; -- -- severity = -- atoi(strtok(&cmd[10], " ")); -- message = strtok(NULL, NOCATGETS("\001")); -- -- workshop_footer_message(message, severity); -- } else if (strncmp(cmd, -- NOCATGETS("frontFile "), 10) == 0) { -- char *file; -- -- file = strtok(&cmd[10], " "); -- workshop_front_file(file); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'g': -- if (cmd[1] == 'e' && -- strncmp(cmd, NOCATGETS("getMarkLine "), 12) == 0) { -- char *file; -- int markid; -- int line; -- char buf[100]; -- -- file = strtok(&cmd[12], " "); -- markid = atoi(strtok(NULL, " ")); -- line = workshop_get_mark_lineno(file, markid); -- vim_snprintf(buf, sizeof(buf), -- NOCATGETS("markLine %s %d %d\n"), -- file, markid, line); -- dummy = write(sd, buf, strlen(buf)); -- } else if (cmd[1] == 'o' && cmd[4] == 'L' && -- strncmp(cmd, NOCATGETS("gotoLine "), 9) == 0) { -- char *file; -- int lineno; -- -- file = strtok(&cmd[9], " "); -- lineno = atoi(strtok(NULL, " ")); -- workshop_goto_line(file, lineno); -- } else if (strncmp(cmd, -- NOCATGETS("gotoMark "), 9) == 0) { -- char *file; -- int markId; -- char *message; -- -- file = strtok(&cmd[9], " "); -- markId = atoi(strtok(NULL, " ")); -- message = strtok(NULL, NOCATGETS("\001")); -- workshop_goto_mark(file, markId, message); -- #ifdef NOHANDS_SUPPORT_FUNCTIONS -- } else if (strcmp(cmd, NOCATGETS("getCurrentFile")) == 0) { -- char *f = workshop_test_getcurrentfile(); -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("currentFile %d %s"), -- f ? (int)strlen(f) : 0, f ? f : ""); -- workshop_send_message(buffer); -- } else if (strcmp(cmd, NOCATGETS("getCursorRow")) == 0) { -- int row = workshop_test_getcursorrow(); -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("cursorRow %d"), row); -- workshop_send_message(buffer); -- } else if (strcmp(cmd, NOCATGETS("getCursorCol")) == 0) { -- int col = workshop_test_getcursorcol(); -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("cursorCol %d"), col); -- workshop_send_message(buffer); -- } else if (strcmp(cmd, NOCATGETS("getCursorRowText")) == 0) { -- char *t = workshop_test_getcursorrowtext(); -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("cursorRowText %d %s"), -- t ? (int)strlen(t) : 0, t ? t : ""); -- workshop_send_message(buffer); -- } else if (strcmp(cmd, NOCATGETS("getSelectedText")) == 0) { -- char *t = workshop_test_getselectedtext(); -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("selectedText %d %s"), -- t ? (int)strlen(t) : 0, t ? t : ""); -- workshop_send_message(buffer); -- #endif -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'l': -- if (strncmp(cmd, NOCATGETS("loadFile "), 9) == 0) { -- char *file; -- int line; -- char *frameid; -- -- file = strtok(&cmd[9], " "); -- line = atoi(strtok(NULL, " ")); -- frameid = strtok(NULL, " "); -- workshop_load_file(file, line, frameid); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'm': /* Menu, minimize, maximize */ -- if (cmd[1] == 'e' && cmd[4] == 'B' && -- strncmp(cmd, NOCATGETS("menuBegin "), 10) == 0) { -- workshop_menu_begin(&cmd[10]); -- } else if (cmd[1] == 'e' && cmd[4] == 'I' && -- strncmp(cmd, NOCATGETS("menuItem "), 9) == 0) { -- process_menuItem(cmd); -- } else if (cmd[1] == 'e' && cmd[4] == 'E' && -- strcmp(cmd, NOCATGETS("menuEnd")) == 0) { -- workshop_menu_end(); -- } else if (cmd[1] == 'a' && -- strcmp(cmd, NOCATGETS("maximize")) == 0) { -- workshop_maximize(); -- } else if (strcmp(cmd, NOCATGETS("minimize")) == 0) { -- workshop_minimize(); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'o': -- if (cmd[1] == 'p' && -- strcmp(cmd, NOCATGETS("option"))) { -- char *name; -- char *value; -- -- name = strtok(&cmd[7], " "); -- value = strtok(NULL, " "); -- workshop_set_option_first(name, value); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'p': -- if (strcmp(cmd, NOCATGETS("ping")) == 0) { -- #if 0 -- int pingNum; -- -- pingNum = atoi(&cmd[5]); -- workshop_send_ack(ackNum); -- /* WHAT DO I DO HERE? */ -- #endif -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'q': -- if (strncmp(cmd, NOCATGETS("quit"), 4) == 0) { -- -- /* Close the connection. It's important to do -- * that now, since workshop_quit might be -- * looking at open files. For example, if you -- * have modified one of the files without -- * saving, NEdit will ask you what you want to -- * do, and spin loop by calling -- * XtAppProcessEvent while waiting for your -- * reply. In this case, if we still have an -- * input handler and the socket has been -- * closed on the other side when eserve -- * expired, we will hang in IoWait. -- */ -- workshop_disconnect(); -- -- workshop_quit(); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 'r': -- if (cmd[1] == 'e' && -- strncmp(cmd, NOCATGETS("reloadFile "), 11) == 0) { -- char *file; -- int line; -- -- file = strtok(&cmd[11], " "); -- line = atoi(strtok(NULL, " ")); -- workshop_reload_file(file, line); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 's': -- if (cmd[1] == 'e' && cmd[2] == 't' && -- strncmp(cmd, NOCATGETS("setMark "), 8) == 0) { -- char *file; -- int line; -- int markId; -- int type; -- -- file = strtok(&cmd[8], " "); -- line = atoi(strtok(NULL, " ")); -- markId = atoi(strtok(NULL, " ")); -- type = atoi(strtok(NULL, " ")); -- workshop_set_mark(file, line, markId, type); -- } else if (cmd[1] == 'h' && -- strncmp(cmd, NOCATGETS("showFile "), 9) == 0) { -- workshop_show_file(&cmd[9]); -- } else if (cmd[1] == 'u' && -- strncmp(cmd, NOCATGETS("subMenu "), 8) == 0) { -- char *label; -- -- label = strtok(&cmd[8], NOCATGETS("\001")); -- workshop_submenu_begin(label); -- } else if (cmd[1] == 'u' && -- strcmp(cmd, NOCATGETS("subMenuEnd")) == 0) { -- workshop_submenu_end(); -- } else if (cmd[1] == 'e' && cmd[2] == 'n' && -- strncmp(cmd, NOCATGETS("sensitivity "), 12) == 0) { -- int num; -- char *bracket; -- char *table; -- -- num = atoi(strtok(&cmd[12], " ")); -- bracket = strtok(NULL, " "); -- if (*bracket != '[') { -- fprintf(stderr, NOCATGETS("Parsing " -- "error for sensitivity\n")); -- } else { -- table = strtok(NULL, NOCATGETS("]")); -- workshop_sensitivity(num, table); -- } -- } else if (cmd[1] == 'e' && cmd[2] == 'n' && cmd[3] == 'd' && -- strncmp(cmd, NOCATGETS("sendVerb "), 9) == 0) { -- /* Send the given verb back (used for the -- * debug.lineno callback (such that other tools -- * can obtain the position coordinates or the -- * selection) */ -- char *verb; -- -- verb = strtok(&cmd[9], " "); -- workshop_perform_verb(verb, NULL); -- } else if (cmd[1] == 'a' && -- strncmp(cmd, NOCATGETS("saveFile "), 9) == 0) { -- workshop_save_file(&cmd[9]); -- #ifdef NOHANDS_SUPPORT_FUNCTIONS -- } else if (strncmp(cmd, NOCATGETS("saveSensitivity "), 16) == 0) { -- char *file; -- -- file = strtok(&cmd[16], " "); -- workshop_save_sensitivity(file); -- #endif -- } -- HANDLE_ERRORS(cmd); -- break; -- -- case 't': /* Toolbar */ -- if (cmd[8] == 'e' && -- strncmp(cmd, NOCATGETS("toolbarBegin"), 12) == 0) { -- workshop_toolbar_begin(); -- } else if (cmd[8] == 'u' && -- strncmp(cmd, NOCATGETS("toolbarButton"), 13) == 0) { -- process_toolbarButton(cmd); -- } else if (cmd[7] == 'E' && -- strcmp(cmd, NOCATGETS("toolbarEnd")) == 0) { -- workshop_toolbar_end(); -- } -- HANDLE_ERRORS(cmd); -- break; -- -- #ifdef DEBUG -- default: -- unrecognised_message(cmd); -- break; -- #endif -- } -- } -- -- static void -- process_menuItem( -- char *cmd) -- { -- char *label = strtok(&cmd[9], NOCATGETS("\001")); -- char *verb = strtok(NULL, NOCATGETS("\001")); -- char *acc = strtok(NULL, NOCATGETS("\001")); -- char *accText = strtok(NULL, NOCATGETS("\001")); -- char *name = strtok(NULL, NOCATGETS("\001")); -- char *sense = strtok(NULL, NOCATGETS("\n")); -- char *filepos = strtok(NULL, NOCATGETS("\n")); -- if (*acc == '-') { -- acc = NULL; -- } -- if (*accText == '-') { -- accText = NULL; -- } -- workshop_menu_item(label, verb, acc, accText, name, filepos, sense); -- -- } -- -- -- static void -- process_toolbarButton( -- char *cmd) /* button definition */ -- { -- char *label = strtok(&cmd[14], NOCATGETS("\001")); -- char *verb = strtok(NULL, NOCATGETS("\001")); -- char *senseVerb = strtok(NULL, NOCATGETS("\001")); -- char *filepos = strtok(NULL, NOCATGETS("\001")); -- char *help = strtok(NULL, NOCATGETS("\001")); -- char *sense = strtok(NULL, NOCATGETS("\001")); -- char *file = strtok(NULL, NOCATGETS("\001")); -- char *left = strtok(NULL, NOCATGETS("\n")); -- -- if (!strcmp(label, NOCATGETS("-"))) { -- label = NULL; -- } -- if (!strcmp(help, NOCATGETS("-"))) { -- help = NULL; -- } -- if (!strcmp(file, NOCATGETS("-"))) { -- file = NULL; -- } -- if (!strcmp(senseVerb, NOCATGETS("-"))) { -- senseVerb = NULL; -- } -- workshop_toolbar_button(label, verb, senseVerb, filepos, help, -- sense, file, left); -- } -- -- -- #ifdef DEBUG -- static void -- unrecognised_message( -- char *cmd) -- { -- pldebug("Unrecognised eserve message:\n\t%s\n", cmd); -- /* abort(); */ -- } -- #endif -- -- -- /* Change sign name to accommodate a different size: -- * Create the filename based on the height. The filename format -- * of multisize icons are: -- * x.xpm : largest icon -- * x1.xpm : smaller icon -- * x2.xpm : smallest icon */ -- static void -- adjust_sign_name(char *filename) -- { -- char *s; -- static int fontSize = -1; -- -- if (fontSize == -1) -- fontSize = workshop_get_font_height(); -- if (fontSize == 0) -- return; -- if (filename[0] == '-') -- return; -- -- /* This is ugly: later we should instead pass the fontheight over -- * to eserve on startup and let eserve just send the right filenames -- * to us in the first place -- -- * I know that the filename will end with 1.xpm (see -- * GuiEditor.cc`LispPrintSign if you wonder why) */ -- s = filename+strlen(filename)-5; -- if (fontSize <= 11) -- strcpy(s, "2.xpm"); -- else if (fontSize <= 15) -- strcpy(s, "1.xpm"); -- else -- strcpy(s, ".xpm"); -- } -- -- #if 0 -- /* Were we invoked by WorkShop? This function can be used early during startup -- if you want to do things differently if the editor is started standalone -- or in WorkShop mode. For example, in standalone mode you may not want to -- add a footer/message area or a sign gutter. */ -- int -- workshop_invoked(void) -- { -- static int result = -1; -- if (result == -1) { -- result = (getenv(NOCATGETS("SPRO_EDITOR_SOCKET")) != NULL); -- } -- return result; -- } -- #endif -- -- /* Connect back to eserve */ -- void workshop_connect(XtAppContext context) -- { -- #ifdef INET_SOCKETS -- struct sockaddr_in server; -- struct hostent * host; -- int port; -- #else -- struct sockaddr_un server; -- #endif -- char buf[32]; -- char * address; -- #ifdef DEBUG -- char *file; -- #endif -- -- address = getenv(NOCATGETS("SPRO_EDITOR_SOCKET")); -- if (address == NULL) { -- return; -- } -- -- #ifdef INET_SOCKETS -- port = atoi(address); -- -- if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { -- PERROR(NOCATGETS("workshop_connect")); -- return; -- } -- -- /* Get the server internet address and put into addr structure */ -- /* fill in the socket address structure and connect to server */ -- vim_memset((char *)&server, '\0', sizeof(server)); -- server.sin_family = AF_INET; -- server.sin_port = port; -- if ((host = gethostbyname(NOCATGETS("localhost"))) == NULL) { -- PERROR(NOCATGETS("gethostbyname")); -- sd = -1; -- return; -- } -- memcpy((char *)&server.sin_addr, host->h_addr, host->h_length); -- #else -- if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { -- PERROR(NOCATGETS("workshop_connect")); -- return; -- } -- -- server.sun_family = AF_UNIX; -- strcpy(server.sun_path, address); -- #endif -- /* Connect to server */ -- if (connect(sd, (struct sockaddr *)&server, sizeof(server))) { -- if (errno == ECONNREFUSED) { -- close(sd); -- #ifdef INET_SOCKETS -- if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { -- PERROR(NOCATGETS("workshop_connect")); -- return; -- } -- #else -- if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { -- PERROR(NOCATGETS("workshop_connect")); -- return; -- } -- #endif -- if (connect(sd, (struct sockaddr *)&server, -- sizeof(server))) { -- PERROR(NOCATGETS("workshop_connect")); -- return; -- } -- -- } else { -- PERROR(NOCATGETS("workshop_connect")); -- return; -- } -- } -- -- /* tell notifier we are interested in being called -- * when there is input on the editor connection socket -- */ -- inputHandler = XtAppAddInput(context, sd, (XtPointer) XtInputReadMask, -- messageFromEserve, NULL); -- #ifdef DEBUG -- if ((file = getenv(NOCATGETS("SPRO_PLUGIN_DEBUG"))) != NULL) { -- char buf[BUFSIZ]; -- -- unlink(file); -- vim_snprintf(buf, sizeof(buf), "date > %s", file); -- system(buf); -- dfd = fopen(file, "a"); -- } else { -- dfd = NULL; -- } -- #endif -- -- vim_snprintf(buf, sizeof(buf), NOCATGETS("connected %s %s %s\n"), -- workshop_get_editor_name(), -- PROTOCOL_VERSION, -- workshop_get_editor_version()); -- dummy = write(sd, buf, strlen(buf)); -- -- vim_snprintf(buf, sizeof(buf), NOCATGETS("ack 1\n")); -- dummy = write(sd, buf, strlen(buf)); -- } -- -- static void -- workshop_disconnect(void) -- { -- /* Probably need to send some message here */ -- -- /* -- * socket closed on other end -- */ -- XtRemoveInput(inputHandler); -- close(sd); -- inputHandler = 0; -- sd = -1; -- -- } -- -- /* -- * Utility functions -- */ -- -- -- /* Minimize and maximize shells. From libutil's shell.cc. */ -- -- /* utility functions from libutil's shell.cc */ -- static Boolean -- isWindowMapped(Display *display, Window win) -- { -- XWindowAttributes winAttrs; -- XGetWindowAttributes(display, -- win, -- &winAttrs); -- if (winAttrs.map_state == IsViewable) { -- return(True); -- } else { -- return(False); -- } -- } -- -- static Boolean -- isMapped(Widget widget) -- { -- if (widget == NULL) { -- return(False); -- } -- -- if (XtIsRealized(widget) == False) { -- return(False); -- } -- -- return(isWindowMapped(XtDisplay(widget), XtWindow(widget))); -- } -- -- static Boolean -- widgetIsIconified( -- Widget w) -- { -- Atom wm_state; -- Atom act_type; /* actual Atom type returned */ -- int act_fmt; /* actual format returned */ -- u_long nitems_ret; /* number of items returned */ -- u_long bytes_after; /* number of bytes remaining */ -- u_long *property; /* actual property returned */ -- -- /* -- * If a window is iconified its WM_STATE is set to IconicState. See -- * ICCCM Version 2.0, section 4.1.3.1 for more details. -- */ -- -- wm_state = XmInternAtom(XtDisplay(w), NOCATGETS("WM_STATE"), False); -- if (XtWindow(w) != 0) { /* only check if window exists! */ -- XGetWindowProperty(XtDisplay(w), XtWindow(w), wm_state, 0L, 2L, -- False, AnyPropertyType, &act_type, &act_fmt, &nitems_ret, -- &bytes_after, (char_u **) &property); -- if (nitems_ret == 2 && property[0] == IconicState) { -- return True; -- } -- } -- -- return False; -- -- } /* end widgetIsIconified */ -- -- void -- workshop_minimize_shell(Widget shell) -- { -- if (shell != NULL && -- XtIsObject(shell) && -- XtIsRealized(shell) == True) { -- if (isMapped(shell) == True) { -- XIconifyWindow(XtDisplay(shell), XtWindow(shell), -- XScreenNumberOfScreen(XtScreen(shell))); -- } -- XtVaSetValues(shell, -- XmNiconic, True, -- NULL); -- } -- } -- -- void workshop_maximize_shell(Widget shell) -- { -- if (shell != NULL && -- XtIsRealized(shell) == True && -- widgetIsIconified(shell) == True && -- isMapped(shell) == False) { -- XtMapWidget(shell); -- /* This used to be -- XtPopdown(shell); -- XtPopup(shell, XtGrabNone); -- However, I found that that would drop any transient -- windows that had been iconified with the window. -- According to the ICCCM, XtMapWidget should be used -- to bring a window from Iconic to Normal state. -- However, Rich Mauri did a lot of work on this during -- Bart, and found that XtPopDown,XtPopup was required -- to fix several bugs involving multiple CDE workspaces. -- I've tested it now and things seem to work fine but -- I'm leaving this note for history in case this needs -- to be revisited. -- */ -- } -- } -- -- -- Boolean workshop_get_width_height(int *width, int *height) -- { -- static int wid = 0; -- static int hgt = 0; -- static Boolean firstTime = True; -- static Boolean success = False; -- -- if (firstTime) { -- char *settings; -- -- settings = getenv(NOCATGETS("SPRO_GUI_WIDTH_HEIGHT")); -- if (settings != NULL) { -- wid = atoi(settings); -- settings = strrchr(settings, ':'); -- if (settings++ != NULL) { -- hgt = atoi(settings); -- } -- if (wid > 0 && hgt > 0) { -- success = True; -- } -- firstTime = False; -- } -- } -- -- if (success) { -- *width = wid; -- *height = hgt; -- } -- return success; -- } -- -- /* -- * Toolbar code -- */ -- -- static void -- workshop_sensitivity(int num, char *table) -- { -- /* build up a verb table */ -- VerbSense *vs; -- int i; -- char *s; -- if ((num < 1) || (num > 500)) { -- return; -- } -- -- vs = (VerbSense *)malloc((num+1)*sizeof(VerbSense)); -- -- /* Point to the individual names (destroys the table string, but -- * that's okay -- this is more efficient than duplicating strings) */ -- s = table; -- for (i = 0; i < num; i++) { -- while (*s == ' ') { -- s++; -- } -- vs[i].verb = s; -- while (*s && (*s != ' ') && (*s != '\001')) { -- s++; -- } -- if (*s == 0) { -- vs[i].verb = NULL; -- break; -- } -- if (*s == '\001') { -- *s = 0; -- s++; -- } -- *s = 0; -- s++; -- while (*s == ' ') { -- s++; -- } -- if (*s == '1') { -- vs[i].sense = 1; -- } else { -- vs[i].sense = 0; -- } -- s++; -- } -- vs[i].verb = NULL; -- -- workshop_frame_sensitivities(vs); -- -- free(vs); -- } -- -- /* -- * Options code -- */ -- /* Set an editor option. -- * IGNORE an option if you do not recognize it. -- */ -- static void -- workshop_set_option_first(char *name, char *value) -- { -- /* Currently value can only be on/off. This may change later (for -- * example to set an option like "balloon evaluate delay", but -- * for now just convert it into a boolean */ -- Boolean on = !strcmp(value, "on"); -- -- if (!strcmp(name, "workshopkeys")) { -- workshop_hotkeys(on); -- } else if (!strcmp(name, "savefiles")) { -- save_files = on; -- } else if (!strcmp(name, "balloon")) { -- workshop_balloon_mode(on); -- } else if (!strcmp(name, "balloondelay")) { -- int delay = atoi(value); -- /* Should I validate the number here?? */ -- workshop_balloon_delay(delay); -- } else { -- /* Let editor interpret it */ -- workshop_set_option(name, value); -- } -- } -- -- -- void workshop_file_closed_lineno(char *filename, int lineno) -- { -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("deletedFile %s %d\n"), filename, lineno); -- dummy = write(sd, buffer, strlen(buffer)); -- } -- -- void workshop_file_opened(char *filename, int readOnly) -- { -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("loadedFile %s %d\n"), filename, readOnly); -- dummy = write(sd, buffer, strlen(buffer)); -- } -- -- -- void workshop_file_saved(char *filename) -- { -- char buffer[2*MAXPATHLEN]; -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("savedFile %s\n"), filename); -- dummy = write(sd, buffer, strlen(buffer)); -- -- /* Let editor report any moved marks that the eserve client -- * should deal with (for example, moving location-based breakpoints) */ -- workshop_moved_marks(filename); -- } -- -- void workshop_frame_moved(int new_x, int new_y, int new_w, int new_h) -- { -- char buffer[200]; -- -- if (sd >= 0) -- { -- vim_snprintf(buffer, sizeof(buffer), -- NOCATGETS("frameAt %d %d %d %d\n"), -- new_x, new_y, new_w, new_h); -- dummy = write(sd, buffer, strlen(buffer)); -- } -- } -- -- /* A button in the toolbar has been pushed. -- * Clientdata is a pointer used by the editor code to figure out the -- * positions for this toolbar (probably by storing a window pointer, -- * and then fetching the current buffer for that window and looking up -- * cursor and selection positions etc.) */ -- void workshop_perform_verb(char *verb, void *clientData) -- { -- char *filename; -- int curLine; -- int curCol; -- int selStartLine; -- int selStartCol; -- int selEndLine; -- int selEndCol; -- int selLength; -- char *selection; -- -- char buf[2*MAXPATHLEN]; -- /* Later: needsFilePos indicates whether or not we need to fetch all this -- * info for this verb... for now, however, it looks as if -- * eserve parsing routines depend on it always being present */ -- -- if (workshop_get_positions(clientData, -- &filename, -- &curLine, -- &curCol, -- &selStartLine, -- &selStartCol, -- &selEndLine, -- &selEndCol, -- &selLength, -- &selection)) { -- if (selection == NULL) { -- selection = NOCATGETS(""); -- } -- -- /* Should I save the files??? This is currently done by checking -- if the verb is one of a few recognized ones. Later we can pass -- this list from eserve to the editor (it's currently hardcoded in -- vi and emacs as well). */ -- if (save_files) { -- if (!strcmp(verb, "build.build") || !strcmp(verb, "build.build-file") || -- !strcmp(verb, "debug.fix") || !strcmp(verb, "debug.fix-all")) { -- workshop_save_files(); -- } -- } -- -- vim_snprintf(buf, sizeof(buf), -- NOCATGETS("toolVerb %s %s %d,%d %d,%d %d,%d %d %s\n"), -- verb, -- filename, -- curLine, curCol, -- selStartLine, selStartCol, -- selEndLine, selEndCol, -- selLength, -- selection); -- dummy = write(sd, buf, strlen(buf)); -- if (*selection) { -- free(selection); -- } -- } -- } -- -- /* Send a message to eserve */ -- #if defined(NOHANDS_SUPPORT_FUNCTIONS) || defined(FEAT_BEVAL_GUI) -- void workshop_send_message(char *buf) -- { -- dummy = write(sd, buf, strlen(buf)); -- } -- #endif -- -- /* Some methods, like currentFile, cursorPos, etc. are missing here. -- * But it looks like these are used for NoHands testing only so we -- * won't bother requiring editors to implement these -- */ -- -- -- #ifdef DEBUG -- -- static void -- pldebug( -- char *fmt, /* a printf style format line */ -- ...) -- { -- va_list ap; -- -- if (dfd != NULL) { -- va_start(ap, fmt); -- vfprintf(dfd, fmt, ap); -- va_end(ap); -- fflush(dfd); -- } -- -- } /* end pldebug */ -- -- #endif ---- 0 ---- -*** ../vim-8.1.0762/src/integration.h 2016-08-29 22:42:20.000000000 +0200 ---- src/integration.h 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,452 **** -- /* vi:set ts=8 sts=4 sw=4 noet: -- * -- * VIM - Vi IMproved by Bram Moolenaar -- * Visual Workshop integration by Gordon Prieur -- * -- * Do ":help uganda" in Vim to read copying and usage conditions. -- * Do ":help credits" in Vim to see a list of people who contributed. -- */ -- /* -- THIS IS AN UNSTABLE INTERFACE! It is unsupported and will likely -- change in future releases, possibly breaking compatibility! -- */ -- -- #ifndef _INTEGRATION_H -- #define _INTEGRATION_H -- -- #include <X11/Intrinsic.h> -- #include <Xm/Xm.h> -- -- #ifdef __cplusplus -- extern "C" { -- #endif -- -- /* Enable NoHands test support functions. Define this only if you want to -- compile in support in the editor such that it can be run under -- the WorkShop test suite. */ -- #ifndef NOHANDS_SUPPORT_FUNCTIONS -- #define NOHANDS_SUPPORT_FUNCTIONS -- #endif -- -- -- /* This header file has three parts. -- * 1. Functions you need to implement; these are called by the integration -- * library -- * 2. Functions you need to call when certain events happen in the editor; -- * these are implemented by the integration library -- * 3. Utility functions provided by the integration library; these make -- * task 1 a bit easier. -- */ -- -- /* -- * The following functions need to be implemented by the editor -- * integration code (and will be editor-specific). Please see the -- * sample workshop.c file for comments explaining what each functions -- * needs to do, what the arguments mean, etc. -- */ -- -- /* -- * This string is recognized by eserve and should be all lower case. -- * This is how the editor detects that it is talking to NEdit instead -- * of Vim, for example, when the connection is initiated from the editor. -- * Examples: "nedit", "gvim" -- */ -- char *workshop_get_editor_name(); -- -- /* -- * Version number of the editor. -- * This number is communicated along with the protocol -- * version to the application. -- * Examples: "5.0.2", "19.3" -- */ -- char *workshop_get_editor_version(); -- -- -- /* Goto a given line in a given file */ -- void workshop_goto_line(char *filename, int lineno); -- -- -- /* Set mark in a given file */ -- void workshop_set_mark(char *filename, int lineno, int markId, int type); -- -- -- /* Change mark type (for example from current-pc to pc-and-breakpoint) */ -- void workshop_change_mark_type(char *filename, int markId, int type); -- -- /* -- * Goto the given mark in a file (e.g. show it). -- * If message is not null, display it in the footer. -- */ -- -- void workshop_goto_mark(char *filename, int markId, char *message); -- -- -- /* Delete mark */ -- void workshop_delete_mark(char *filename, int markId); -- -- /* Begin/end pair of messages indicating that a series of _set_mark and -- * _delete_mark messages will be sent. This can/should be used to suppress gui -- * redraws between the begin and end messages. For example, if you switch -- * to a headerfile that has a class breakpoint set, there may be hundreds -- * of marks that need to be added. You don't want to refresh the gui for each -- * added sign, you want to wait until the final end message. -- */ -- void workshop_mark_batch_begin(); -- void workshop_mark_batch_end(); -- -- -- /* Load a given file into the WorkShop buffer. "frameid" is a token string -- * that identifies which frame the file would like to be loaded into. This -- * will usually be null, in which case you should use the default frame. -- * However, if frameid is not null, you need to find a frame that has this -- * frameid, and replace the file in that frame. Finally, if the frameid is -- * one you haven't seen before, you should create a new frame for this file. -- * Note that "frameid" is a string value, not just an opaque pointer, so -- * you should use strcmp rather than == when testing for equality. -- */ -- void workshop_load_file(char *filename, int line, char *frameid); -- -- -- /* Reload the WorkShop buffer */ -- void workshop_reload_file(char *filename, int line); -- -- -- /* Show the given file */ -- void workshop_show_file(char *filename); -- -- -- /* Front the given file */ -- void workshop_front_file(char *filename); -- -- -- /* Save the given file */ -- void workshop_save_file(char *filename); -- -- /* Save all WorkShop edited files. You can ask user about modified files -- * and skip saving any files the user doesn't want to save. -- * This function is typically called when the user issues a build, a fix, -- * etc. (and also if you select "Save All" from the File menu :-) -- */ -- void workshop_save_files(); -- -- /* Show a message in all footers. -- Severity currently is not defined. */ -- void workshop_footer_message(char *message, int severity); -- -- /* Minimize all windows */ -- void workshop_minimize(); -- -- -- /* Maximize all windows */ -- void workshop_maximize(); -- -- -- /* -- * Create a new mark type, assign it a given index, a given textbackground -- * color, and a given left-margin sign (where sign is a filename to an -- * .xpm file) -- */ -- void workshop_add_mark_type(int idx, char *colorspec, char *sign); -- -- -- /* Get mark line number */ -- int workshop_get_mark_lineno(char *filename, int markId); -- -- -- /* Exit editor; save confirmation dialogs are okay */ -- void workshop_quit(); -- -- /* Set an editor option. -- * For example, name="syntax",value="on" would enable syntax highlighting. -- * The currently defined options are: -- * lineno {on,off} show line numbers -- * syntax {on,off} highlight syntax -- * parentheses {on,off} show matching parentheses -- * The following options are interpreted by the library for you (so you -- * will never see the message. However, the implementation requires you -- * to provide certain callbacks, like restore hotkeys or save all files. -- * These are documented separately). -- * workshopkeys {on,off} set workshop hotkeys -- * savefiles {on,off} save all files before issuing a build -- * balloon {on,off} enable/disable balloon evaluate -- * -- * IGNORE an option if you do not recognize it. -- */ -- void workshop_set_option(char *name, char *value); -- -- /* -- * (See workshop_add_frame first.) This function notifies the editor -- * that the frame for the given window (indicated by "frame", which -- * was supplied by the editor in workshop_add_frame) has been created. -- * This can happen much later than the workshop_add_frame message, since -- * often a window is created on editor startup, while the frame description -- * is passed over from eserve much later, when the connection is complete. -- * This gives the editor a chance to kick its GUI to show the frame -- * properly; typically you'll unmanage and remanage the parent widget to -- * force a geometry recalculation. -- */ -- -- void workshop_reconfigure_frame(void *frame); -- -- -- /* Are there any moved marks? If so, call workshop_move_mark on -- * each of them now. This is how eserve can find out if for example -- * breakpoints have moved when a program has been recompiled and -- * reloaded into dbx. -- */ -- void workshop_moved_marks(char *filename); -- -- -- /* A button in the toolbar has been pushed. "frame" is provided -- * which should let you determine which toolbar had a button pushed -- * (you supplied this clientData when you created a toolbar). From -- * this you should be able to figure out which file the operation -- * applies to, and for that window the cursor line and column, -- * selection begin line and column, selection end line and column, -- * selection text and selection text length. The column numbers are -- * currently unused but implement it anyway in case we decide to use -- * them in the future. -- * Note that frame can be NULL. In this case, you should pick -- * a default window to translate coordinates for (ideally, the -- * last window the user has operated on.) This will be the case when -- * the user clicks on a Custom Button programmed to take the current -- * line number as an argument. Here it's ambiguous which buffer -- * to use, so you need to pick one. -- * (Interface consideration: Perhaps we instead should add smarts -- * into the library such that we remember which frame pointer -- * we last noticed (e.g. last call to get_positions, or perhaps -- * last add_frame) and then pass that instead? For example, we could -- * have all workshop operations return the clientData when passed -- * the filename (or add a filename-to-clientData converter?) and then -- * remember the last filename/clientData used. -- */ -- int workshop_get_positions(void *frame, -- char **filename, -- int *curLine, -- int *curCol, -- int *selStartLine, -- int *selStartCol, -- int *selEndLine, -- int *selEndCol, -- int *selLength, -- char **selection); -- -- /* The following function should return the height of a character -- * in the text display. This is used to pick out a suitable size -- * for the signs to match the text (currently available in three -- * sizes). If you just return 0, WorkShop will use the default -- * sign size. (Use XmStringExtent on character "A" to get the height.) -- */ -- -- int workshop_get_font_height(void); -- -- /* The following function requests that you register the given -- * hotkey as a keyboard accelerator for all frames. Whenever the -- * hotkey is pressed, you should invoke workshop_hotkey_pressed -- * and pass the current frame pointer as an argument as well as -- * the clientData pointer passed in to this function. -- * The remove function unregisters the hotkey. -- */ -- void workshop_register_hotkey(Modifiers modifiers, KeySym keysym, -- void *clientData); -- void workshop_unregister_hotkey(Modifiers modifiers, KeySym keysym, -- void *clientData); -- -- -- -- -- /* -- * -- * The following functions notify eserve of important editor events, -- * such as files being modified, files being saved, etc. You must -- * sprinkle your editor code with calls to these. For example, whenever -- * a file is modified (well, when its read-only status changes to modified), -- * call workshop_file_modified(). -- * -- */ -- -- -- -- /* Connect with eserve. Add this call after you editor initialization -- * is done, right before entering the event loop or blocking on input. -- * This will set up a socket connection with eserve. -- */ -- void workshop_connect(XtAppContext context); -- -- /* A file has been opened. */ -- void workshop_file_opened(char *filename, int readOnly); -- -- -- /* A file has been saved. Despite its name, eserve also uses this -- * message to mean a file has been reverted or unmodified. -- */ -- void workshop_file_saved(char *filename); -- -- -- #if 0 -- /* A file has been closed */ -- void workshop_file_closed(char *filename); -- #endif -- -- /* Like workshop_file_closed, but also inform eserve what line the -- cursor was on when you left the file. That way eserve can put you -- back where you left off when you return to this file. */ -- void workshop_file_closed_lineno(char *filename, int line); -- -- #if 0 -- /* A file has been modified */ -- void workshop_file_modified(char *filename); -- -- /* -- * A mark has been moved. Only call this as a response to -- * a workshop_moved_marks request call. -- */ -- void workshop_move_mark(char *filename, int markId, int newLineno); -- #endif -- -- /* Tell the integration library about a new frame being added. -- * Supply a form for the toolbar, a label for the footer, and an -- * XmPulldown menu for the WorkShop menu to attach to. Top and bottom -- * are the widgets above and below the toolbar form widget, if -- * any. Call this function when you create a new window. It returns a -- * void *, a handle which you should keep and return when you delete -- * the window with workshop_delete_toolbar. The "footer" argument -- * points to a Label widget that is going to be used as a status -- * message area, and "menu" (if any) points to an Menu widget that -- * should contain a WorkShop menu. Clientdata is a pointer which is -- * only used by the editor. It will typically be a pointer to the -- * window object that the toolbar is placed in. If you have multiple -- * windows, you need to use this pointer to figure out which window -- * (and thus corresponding buffer) the user has clicked on to respond -- * to the workshop_get_positions message. -- * Each frame's clientData ("frame") should be unique. -- */ -- void *workshop_add_frame(void *frame, Widget form, -- Widget top, Widget bottom, Widget footer, -- Widget menu); -- -- /* Delete a window/frame. Call this when an editor window is being deleted. */ -- void workshop_delete_frame(void *handle); -- -- /* Add a balloon evaluate text area. "frame" is used the same way -- * as in workshop_add_frame. This call is not part of workshop_add_frame because -- * a frame can have multiple tooltip areas (typically, an editor frame that -- * is split showing multiple buffers will have a separate tooltip area for -- * each text widget. Each such area is called a "window" (consistent with -- * XEmacs terminology). Separate these by the window argument if necessary. -- * You will need to implement workshop_get_balloon_text such that it uses -- * these two arguments to derive the file, line etc. for the tip. -- * Call the remove function if you delete this area such that the integration -- * library can update itself. You must call workshop_add_frame before you -- * call add_balloon_eval_area, and you must pass the same frame pointer. -- */ -- void workshop_add_balloon_eval_area(void *frame, void *window, Widget widget); -- void workshop_remove_balloon_eval_area(void *frame, void *window, Widget widget); -- -- -- /* For a given mouse position inside the balloon area (passed as x,y), -- * return the balloon text to be evaluated. There are two scenarios: -- * If the position is inside the selection, return the selection -- * string. Else, return the full line (or possibly the full line up -- * to the last semicolon (that's TBD), along with an index pointing to -- * where which character the mouse is over. -- * If we have the selection-scenario, set mouseIndex to -1 to indicate -- * that no autoexpansion should occur but that the selection should -- * be evaluated as is. -- * -- * XXX Does dbx need more information here, like the filename and line -- * number in order to determine the correct language and scope to be -- * used during evaluation?? Or should it just work like the p= button -- * (where the current scope and language is used, even if you are -- * pointing at a different file with a different scope) ? -- */ -- int workshop_get_balloon_text(Position x, Position y, -- void *frame, -- void *window, -- char **filename, -- int *line, -- char **text, -- int *mouseIndex); -- -- -- /* Window size and location -- * WorkShop will attempt to restore the size and location of a single -- * editor frame. For vi, this window is designated as the "reusable" one. -- * You can implement your own scheme for determining which window you -- * want to associate with WorkShop. Whenever the size and location of -- * this window is changed, call the following function to notify eserve. -- * Like workshop_invoked, this can be called before the workshop_connect() -- * call. -- */ -- void workshop_frame_moved(int new_x, int new_y, int new_w, int new_h); -- Boolean workshop_get_width_height(int *, int *); -- #if 0 -- Boolean workshop_get_rows_cols(int *, int *); -- #endif -- -- /* This function should be invoked when you press a hotkey -- * set up by workshop_register_hotkey. Pass the clientData -- * to it that was given to you with workshop_register_hotkey. -- */ -- void workshop_hotkey_pressed(void *frame, void *clientData); -- -- -- -- -- -- /* -- * Utility functions -- * These provide convenience functions to simplify implementing some -- * of the above functions. -- * -- */ -- -- #if 0 -- /* Were we invoked by WorkShop? This function can be used early during startup -- * if you want to do things differently if the editor is started standalone -- * or in WorkShop mode. For example, in standalone mode you may not want to -- * add a footer/message area or a sign gutter. -- */ -- int workshop_invoked(void); -- #endif -- -- -- /* Minimize (iconify) the given shell */ -- void workshop_minimize_shell(Widget shell); -- -- /* Maximize (deiconify) the given shell */ -- void workshop_maximize_shell(Widget shell); -- -- /* Called by frame.cc -- editor shouldn't call this directly. -- * Perhaps we need an integrationP.h file ? */ -- void workshop_perform_verb(char *verb, void *clientData); -- void workshop_send_message(char *buf); -- -- -- #ifdef NOHANDS_SUPPORT_FUNCTIONS -- /* The following functions are needed to run the WorkShop testsuite -- * with this editor. You don't need to implement these unless you -- * intend for your editor to be run by Workshop's testsuite. -- * getcursorrow should return the number of lines from the top of -- * the window the cursor is; similarly for getcursorcol. -- */ -- char *workshop_test_getcurrentfile(); -- int workshop_test_getcursorrow(); -- int workshop_test_getcursorcol(); -- char *workshop_test_getcursorrowtext(); -- char *workshop_test_getselectedtext(); -- #endif -- -- /* -- * Struct used to set/unset the sensitivity of verbs. -- */ -- typedef struct { -- char *verb; -- Boolean sense; -- } VerbSense; -- -- #ifdef __cplusplus -- } -- #endif -- -- #endif /* _INTEGRATION_H */ ---- 0 ---- -*** ../vim-8.1.0762/src/main.c 2019-01-14 21:51:17.987461933 +0100 ---- src/main.c 2019-01-17 15:23:50.756769234 +0100 -*************** -*** 628,637 **** - */ - if (gui.in_use) - { -! # ifdef FEAT_SUN_WORKSHOP -! if (!usingSunWorkShop) -! # endif -! gui_wait_for_chars(50L, typebuf.tb_change_cnt); - TIME_MSG("GUI delay"); - } - #endif ---- 628,634 ---- - */ - if (gui.in_use) - { -! gui_wait_for_chars(50L, typebuf.tb_change_cnt); - TIME_MSG("GUI delay"); - } - #endif -*************** -*** 983,991 **** - */ - early_arg_scan(paramp); - -- #ifdef FEAT_SUN_WORKSHOP -- findYourself(paramp->argv[0]); -- #endif - #if defined(FEAT_GUI) - /* Prepare for possibly starting GUI sometime */ - gui_prepare(¶mp->argc, paramp->argv); ---- 980,985 ---- -*** ../vim-8.1.0762/src/misc2.c 2019-01-13 23:38:33.403773217 +0100 ---- src/misc2.c 2019-01-17 15:24:05.616693884 +0100 -*************** -*** 3411,3417 **** - - #if defined(FEAT_SESSION) || defined(FEAT_AUTOCHDIR) \ - || defined(MSWIN) || defined(FEAT_GUI_MAC) || defined(FEAT_GUI_GTK) \ -! || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ - || defined(PROTO) - /* - * Change to a file's directory. ---- 3411,3417 ---- - - #if defined(FEAT_SESSION) || defined(FEAT_AUTOCHDIR) \ - || defined(MSWIN) || defined(FEAT_GUI_MAC) || defined(FEAT_GUI_GTK) \ -! || defined(FEAT_NETBEANS_INTG) \ - || defined(PROTO) - /* - * Change to a file's directory. -*** ../vim-8.1.0762/src/nbdebug.c 2016-09-25 21:41:24.000000000 +0200 ---- src/nbdebug.c 2019-01-17 15:24:41.628508930 +0100 -*************** -*** 42,48 **** - /* - * nbdebug_wait - This function can be used to delay or stop execution of vim. - * It's normally used to delay startup while attaching a -! * debugger to a running process. Since workshop starts gvim - * from a background process this is the only way to debug - * startup problems. - */ ---- 42,48 ---- - /* - * nbdebug_wait - This function can be used to delay or stop execution of vim. - * It's normally used to delay startup while attaching a -! * debugger to a running process. Since NetBeans starts gvim - * from a background process this is the only way to debug - * startup problems. - */ -*** ../vim-8.1.0762/src/netbeans.c 2019-01-15 20:19:36.743904434 +0100 ---- src/netbeans.c 2019-01-17 15:09:18.877769920 +0100 -*************** -*** 2273,2281 **** - - nbdebug((" COLONCMD %s\n", buf)); - -- /* ALT_INPUT_LOCK_ON; */ - do_cmdline((char_u *)buf, NULL, NULL, DOCMD_NOWAIT | DOCMD_KEYTYPED); -- /* ALT_INPUT_LOCK_OFF; */ - - setcursor(); /* restore the cursor position */ - out_flush_cursor(TRUE, FALSE); ---- 2273,2279 ---- -*** ../vim-8.1.0762/src/proto.h 2019-01-15 20:19:36.743904434 +0100 ---- src/proto.h 2019-01-17 15:26:51.439817568 +0100 -*************** -*** 295,303 **** - # ifdef FEAT_GUI_PHOTON - # include "gui_photon.pro" - # endif -- # ifdef FEAT_SUN_WORKSHOP -- # include "workshop.pro" -- # endif - # endif /* FEAT_GUI */ - - # ifdef FEAT_OLE ---- 295,300 ---- -*** ../vim-8.1.0762/src/proto/workshop.pro 2018-05-17 13:52:57.000000000 +0200 ---- src/proto/workshop.pro 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,49 **** -- /* workshop.c */ -- void workshop_init(void); -- void workshop_postinit(void); -- void ex_wsverb(exarg_T *eap); -- char *workshop_get_editor_name(void); -- char *workshop_get_editor_version(void); -- void workshop_load_file(char *filename, int line, char *frameid); -- void workshop_reload_file(char *filename, int line); -- void workshop_show_file(char *filename); -- void workshop_goto_line(char *filename, int lineno); -- void workshop_front_file(char *filename); -- void workshop_save_file(char *filename); -- void workshop_save_files(void); -- void workshop_quit(void); -- void workshop_minimize(void); -- void workshop_maximize(void); -- void workshop_add_mark_type(int idx, char *colorspec, char *sign); -- void workshop_set_mark(char *filename, int lineno, int markId, int idx); -- void workshop_change_mark_type(char *filename, int markId, int idx); -- void workshop_goto_mark(char *filename, int markId, char *message); -- void workshop_delete_mark(char *filename, int markId); -- int workshop_get_mark_lineno(char *filename, int markId); -- void workshop_moved_marks(char *filename); -- int workshop_get_font_height(void); -- void workshop_footer_message(char *message, int severity); -- void workshop_menu_begin(char *label); -- void workshop_submenu_begin(char *label); -- void workshop_submenu_end(void); -- void workshop_menu_item(char *label, char *verb, char *accelerator, char *acceleratorText, char *name, char *filepos, char *sensitive); -- void workshop_menu_end(void); -- void workshop_toolbar_begin(void); -- void workshop_toolbar_end(void); -- void workshop_toolbar_button(char *label, char *verb, char *senseVerb, char *filepos, char *help, char *sense, char *file, char *left); -- void workshop_frame_sensitivities(VerbSense *vs); -- void workshop_set_option(char *option, char *value); -- void workshop_balloon_mode(Boolean on); -- void workshop_balloon_delay(int delay); -- void workshop_show_balloon_tip(char *tip); -- void workshop_hotkeys(Boolean on); -- int workshop_get_positions(void *clientData, char **filename, int *curLine, int *curCol, int *selStartLine, int *selStartCol, int *selEndLine, int *selEndCol, int *selLength, char **selection); -- char *workshop_test_getcurrentfile(void); -- int workshop_test_getcursorrow(void); -- int workshop_test_getcursorcol(void); -- char *workshop_test_getcursorrowtext(void); -- char *workshop_test_getselectedtext(void); -- void workshop_save_sensitivity(char *filename); -- void workshop_beval_cb(BalloonEval *beval, int state); -- void findYourself(char *argv0); -- /* vim: set ft=c : */ ---- 0 ---- -*** ../vim-8.1.0762/src/ui.c 2019-01-17 14:11:56.434600704 +0100 ---- src/ui.c 2019-01-17 15:25:20.972303268 +0100 -*************** -*** 1625,1634 **** - * descriptions which would otherwise overflow. The buffer is considered full - * when only this extra space (or part of it) remains. - */ -! #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_JOB_CHANNEL) \ -! || defined(FEAT_CLIENTSERVER) - /* -! * Sun WorkShop and NetBeans stuff debugger commands into the input buffer. - * This requires a larger buffer... - * (Madsen) Go with this for remote input as well ... - */ ---- 1625,1633 ---- - * descriptions which would otherwise overflow. The buffer is considered full - * when only this extra space (or part of it) remains. - */ -! #if defined(FEAT_JOB_CHANNEL) || defined(FEAT_CLIENTSERVER) - /* -! * NetBeans stuffs debugger commands into the input buffer. - * This requires a larger buffer... - * (Madsen) Go with this for remote input as well ... - */ -*** ../vim-8.1.0762/src/version.c 2019-01-17 14:31:10.190919265 +0100 ---- src/version.c 2019-01-17 15:39:12.143436999 +0100 -*************** -*** 598,608 **** - #else - "-statusline", - #endif -- #ifdef FEAT_SUN_WORKSHOP -- "+sun_workshop", -- #else - "-sun_workshop", -- #endif - #ifdef FEAT_SYN_HL - "+syntax", - #else ---- 598,604 ---- -*** ../vim-8.1.0762/src/vim.h 2019-01-13 23:38:33.415773131 +0100 ---- src/vim.h 2019-01-17 15:27:00.275769256 +0100 -*************** -*** 288,297 **** - # include "os_qnx.h" - #endif - -- #ifdef FEAT_SUN_WORKSHOP -- # include "workshop.h" -- #endif -- - #ifdef X_LOCALE - # include <X11/Xlocale.h> - #else ---- 288,293 ---- -*************** -*** 2236,2249 **** - # define vim_realloc(ptr, size) realloc((ptr), (size)) - #endif - -- /* -- * The following macros stop display/event loop nesting at the wrong time. -- */ -- #ifdef ALT_X_INPUT -- # define ALT_INPUT_LOCK_OFF suppress_alternate_input = FALSE -- # define ALT_INPUT_LOCK_ON suppress_alternate_input = TRUE -- #endif -- - #ifdef FEAT_MBYTE - /* - * Return byte length of character that starts with byte "b". ---- 2232,2237 ---- -*** ../vim-8.1.0762/src/workshop.c 2018-12-21 15:16:57.483579762 +0100 ---- src/workshop.c 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,1830 **** -- /* vi:set ts=8 sts=4 sw=4 noet: -- * -- * VIM - Vi IMproved by Bram Moolenaar -- * Visual Workshop integration by Gordon Prieur -- * -- * Do ":help uganda" in Vim to read copying and usage conditions. -- * Do ":help credits" in Vim to see a list of people who contributed. -- * See README.txt for an overview of the Vim source code. -- */ -- -- #include "protodef.h" -- #ifdef HAVE_CONFIG_H -- # include "auto/config.h" -- #endif -- #include <stdio.h> -- #include <stdlib.h> -- #include <sys/types.h> -- #include <netdb.h> -- #include <netinet/in.h> -- #include <sys/socket.h> -- #ifdef HAVE_LIBGEN_H -- # include <libgen.h> -- #endif -- #include <unistd.h> -- #include <string.h> -- #include <stdlib.h> -- #include <ctype.h> -- -- #include <X11/Intrinsic.h> -- #include <Xm/Xm.h> -- #include <Xm/PushB.h> -- -- #include "integration.h" /* <EditPlugin/integration.h> */ -- -- #include "vim.h" -- #include "version.h" -- #include "workshop.h" -- -- void workshop_hotkeys(Boolean); -- -- static Boolean isShowing(int); -- static win_T *get_window(buf_T *); -- static void updatePriority(Boolean); -- static char *addUniqueMnemonic(char *, char *); -- static char *fixup(char *); -- static char *get_selection(buf_T *); -- static char *append_selection(int, char *, int *, int *); -- static void load_window(char *, int lnum); -- static void warp_to_pc(int); -- #ifdef FEAT_BEVAL_GUI -- void workshop_beval_cb(BalloonEval *, int); -- # ifdef FEAT_VARTABS -- static int computeIndex(int, char_u *, int, int *); -- # else -- static int computeIndex(int, char_u *, int); -- # endif -- #endif -- static char *fixAccelText(char *); -- static void addMenu(char *, char *, char *); -- static char *lookupVerb(char *, int); -- static void coloncmd(char *, Boolean); -- -- extern Widget vimShell; -- extern Widget textArea; -- extern XtAppContext app_context; -- -- static int tbpri; /* ToolBar priority */ -- int usingSunWorkShop = 0; /* set if -ws flag is used */ -- char curMenuName[BUFSIZ]; -- char curMenuPriority[BUFSIZ]; -- -- static Boolean workshopInitDone = False; -- static Boolean workshopHotKeysEnabled = False; -- -- /* -- * The following enum is from <gp_dbx/gp_dbx_common.h>. We can't include it -- * here because it's C++. -- */ -- enum -- { -- GPLineEval_EVALUATE, /* evaluate expression */ -- GPLineEval_INDIRECT, /* evaluate *<expression> */ -- GPLineEval_TYPE /* type of expression */ -- }; -- -- /* -- * Store each verb in the MenuMap. This lets us map from a verb to a menu. -- * There may be multiple matches for a single verb in this table. -- */ -- #define MENU_INC 50 /* menuMap incremental size increases */ -- typedef struct -- { -- char *name; /* name of the menu */ -- char *accel; /* optional accelerator key */ -- char *verb; /* menu verb */ -- } MenuMap; -- static MenuMap *menuMap; /* list of verb/menu mappings */ -- static int menuMapSize; /* current size of menuMap */ -- static int menuMapMax; /* allocated size of menuMap */ -- static char *initialFileCmd; /* save command but defer doing it */ -- -- -- void -- workshop_init(void) -- { -- char_u buf[64]; -- int is_dirty = FALSE; -- int width, height; -- XtInputMask mask; -- -- /* -- * Turn on MenuBar, ToolBar, and Footer. -- */ -- STRCPY(buf, p_go); -- if (vim_strchr(p_go, GO_MENUS) == NULL) -- { -- STRCAT(buf, "m"); -- is_dirty = TRUE; -- } -- if (vim_strchr(p_go, GO_TOOLBAR) == NULL) -- { -- STRCAT(buf, "T"); -- is_dirty = TRUE; -- } -- if (vim_strchr(p_go, GO_FOOTER) == NULL) -- { -- STRCAT(buf, "F"); -- is_dirty = TRUE; -- } -- if (is_dirty) -- set_option_value((char_u *)"go", 0L, buf, 0); -- -- /* -- * Set size from workshop_get_width_height(). -- */ -- width = height = 0; -- if (workshop_get_width_height(&width, &height)) -- { -- XtVaSetValues(vimShell, -- XmNwidth, width, -- XmNheight, height, -- NULL); -- } -- -- /* -- * Now read in the initial messages from eserve. -- */ -- while ((mask = XtAppPending(app_context)) -- && (mask & XtIMAlternateInput) && !workshopInitDone) -- XtAppProcessEvent(app_context, (XtInputMask)XtIMAlternateInput); -- } -- -- void -- workshop_postinit(void) -- { -- do_cmdline_cmd((char_u *)initialFileCmd); -- ALT_INPUT_LOCK_OFF; -- free(initialFileCmd); -- initialFileCmd = NULL; -- } -- -- void -- ex_wsverb(exarg_T *eap) -- { -- msg_clr_cmdline(); -- workshop_perform_verb((char *) eap->arg, NULL); -- } -- -- /* -- * Editor name -- * This string is recognized by eserve and should be all lower case. -- * This is how the editor detects that it is talking to gvim instead -- * of NEdit, for example, when the connection is initiated from the editor. -- */ -- char * -- workshop_get_editor_name(void) -- { -- return "gvim"; -- } -- -- /* -- * Version number of the editor. -- * This number is communicated along with the protocol -- * version to the application. -- */ -- char * -- workshop_get_editor_version(void) -- { -- return Version; -- } -- -- /* -- * Answer functions: called by eserve -- */ -- -- /* -- * Name: -- * workshop_load_file -- * -- * Function: -- * Load a given file into the WorkShop buffer. -- */ -- void -- workshop_load_file( -- char *filename, /* the file to load */ -- int line, /* an optional line number (or 0) */ -- char *frameid UNUSED) /* used for multi-frame support */ -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_load_file(%s, %d)\n", filename, line); -- #endif -- -- #ifdef FEAT_BEVAL_GUI -- bevalServers |= BEVAL_WORKSHOP; -- #endif -- -- load_window(filename, line); -- } -- -- /* -- * Reload the WorkShop buffer -- */ -- void -- workshop_reload_file( -- char *filename, -- int line) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_reload_file(%s, %d)\n", filename, line); -- #endif -- load_window(filename, line); -- } -- -- void -- workshop_show_file( -- char *filename) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_show_file(%s)\n", filename); -- #endif -- -- load_window(filename, 0); -- } -- -- void -- workshop_goto_line( -- char *filename, -- int lineno) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_goto_line(%s, %d)\n", filename, lineno); -- #endif -- -- load_window(filename, lineno); -- } -- -- void -- workshop_front_file( -- char *filename UNUSED) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_front_file()\n"); -- #endif -- /* -- * Assumption: This function will always be called after a call to -- * workshop_show_file(), so the file is always showing. -- */ -- if (vimShell != NULL) -- XRaiseWindow(gui.dpy, XtWindow(vimShell)); -- } -- -- void -- workshop_save_file( -- char *filename) -- { -- char cbuf[BUFSIZ]; /* build vim command here */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_save_file(%s)\n", filename); -- #endif -- -- /* Save the given file */ -- vim_snprintf(cbuf, sizeof(cbuf), "w %s", filename); -- coloncmd(cbuf, TRUE); -- } -- -- void -- workshop_save_files(void) -- { -- /* Save the given file */ -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_save_files()\n"); -- #endif -- -- add_to_input_buf((char_u *) ":wall\n", 6); -- } -- -- void -- workshop_quit(void) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_quit()\n"); -- #endif -- -- add_to_input_buf((char_u *) ":qall\n", 6); -- } -- -- void -- workshop_minimize(void) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_minimize()\n"); -- #endif -- workshop_minimize_shell(vimShell); -- } -- void -- workshop_maximize(void) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_maximize()\n"); -- #endif -- -- workshop_maximize_shell(vimShell); -- } -- -- void -- workshop_add_mark_type( -- int idx, -- char *colorspec, -- char *sign) -- { -- char gbuf[BUFSIZ]; /* buffer for sign name */ -- char cibuf[BUFSIZ]; /* color information */ -- char cbuf[BUFSIZ]; /* command buffer */ -- char *bp; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- { -- char *cp; -- -- cp = strrchr(sign, '/'); -- if (cp == NULL) -- cp = sign; -- else -- cp++; /* skip '/' character */ -- wstrace("workshop_add_mark_type(%d, \"%s\", \"%s\")\n", idx, -- colorspec && *colorspec ? colorspec : "<None>", cp); -- } -- #endif -- -- /* -- * Isolate the basename of sign in gbuf. We will use this for the -- * GroupName in the highlight command sent to vim. -- */ -- STRCPY(gbuf, gettail((char_u *)sign)); -- bp = strrchr(gbuf, '.'); -- if (bp != NULL) -- *bp = NUL; -- -- if (gbuf[0] != '-' && gbuf[1] != NUL) -- { -- if (colorspec != NULL && *colorspec) -- { -- vim_snprintf(cbuf, sizeof(cbuf), -- "highlight WS%s guibg=%s", gbuf, colorspec); -- coloncmd(cbuf, FALSE); -- vim_snprintf(cibuf, sizeof(cibuf), "linehl=WS%s", gbuf); -- } -- else -- cibuf[0] = NUL; -- -- vim_snprintf(cbuf, sizeof(cbuf), -- "sign define %d %s icon=%s", idx, cibuf, sign); -- coloncmd(cbuf, TRUE); -- } -- } -- -- void -- workshop_set_mark( -- char *filename, /* filename which gets the mark */ -- int lineno, /* line number which gets the mark */ -- int markId, /* unique mark identifier */ -- int idx) /* which mark to use */ -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- /* Set mark in a given file */ -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_set_mark(%s, %d (ln), %d (id), %d (idx))\n", -- filename, lineno, markId, idx); -- #endif -- -- vim_snprintf(cbuf, sizeof(cbuf), "sign place %d line=%d name=%d file=%s", -- markId, lineno, idx, filename); -- coloncmd(cbuf, TRUE); -- } -- -- void -- workshop_change_mark_type( -- char *filename, /* filename which gets the mark */ -- int markId, /* unique mark identifier */ -- int idx) /* which mark to use */ -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- /* Change mark type */ -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_change_mark_type(%s, %d, %d)\n", -- filename, markId, idx); -- #endif -- -- vim_snprintf(cbuf, sizeof(cbuf), -- "sign place %d name=%d file=%s", markId, idx, filename); -- coloncmd(cbuf, TRUE); -- } -- -- /* -- * Goto the given mark in a file (e.g. show it). -- * If message is not null, display it in the footer. -- */ -- void -- workshop_goto_mark( -- char *filename, -- int markId, -- char *message) -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- /* Goto mark */ -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_goto_mark(%s, %d (id), %s)\n", -- filename, markId, message && *message && -- !(*message == ' ' && message[1] == NULL) ? -- message : "<None>"); -- #endif -- -- vim_snprintf(cbuf, sizeof(cbuf), "sign jump %d file=%s", markId, filename); -- coloncmd(cbuf, TRUE); -- if (message != NULL && *message != NUL) -- gui_mch_set_footer((char_u *)message); -- } -- -- void -- workshop_delete_mark( -- char *filename, -- int markId) -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- /* Delete mark */ -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_delete_mark(%s, %d (id))\n", -- filename, markId); -- #endif -- -- vim_snprintf(cbuf, sizeof(cbuf), -- "sign unplace %d file=%s", markId, filename); -- coloncmd(cbuf, TRUE); -- } -- -- int -- workshop_get_mark_lineno( -- char *filename, -- int markId) -- { -- buf_T *buf; /* buffer containing filename */ -- int lineno; /* line number of filename in buf */ -- -- /* Get mark line number */ -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_get_mark_lineno(%s, %d)\n", -- filename, markId); -- #endif -- -- lineno = 0; -- buf = buflist_findname((char_u *)filename); -- if (buf != NULL) -- lineno = buf_findsign(buf, markId, NULL); -- -- return lineno; -- } -- -- -- /* -- * Are there any moved marks? If so, call workshop_move_mark on -- * each of them now. This is how eserve can find out if for example -- * breakpoints have moved when a program has been recompiled and -- * reloaded into dbx. -- */ -- void -- workshop_moved_marks(char *filename UNUSED) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("XXXworkshop_moved_marks(%s)\n", filename); -- #endif -- } -- -- int -- workshop_get_font_height(void) -- { -- XmFontList fontList; /* fontList made from gui.norm_font */ -- XmString str; -- Dimension w; -- Dimension h; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_get_font_height()\n"); -- #endif -- -- /* Pick the proper signs for this font size */ -- fontList = gui_motif_create_fontlist((XFontStruct *)gui.norm_font); -- h = 0; -- if (fontList != NULL) -- { -- str = XmStringCreateLocalized("A"); -- XmStringExtent(fontList, str, &w, &h); -- XmStringFree(str); -- XmFontListFree(fontList); -- } -- -- return (int)h; -- } -- -- void -- workshop_footer_message( -- char *message, -- int severity UNUSED) /* severity is currently unused */ -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_footer_message(%s, %d)\n", message, severity); -- #endif -- -- gui_mch_set_footer((char_u *) message); -- } -- -- /* -- * workshop_menu_begin() is passed the menu name. We determine its mnemonic -- * here and store its name and priority. -- */ -- void -- workshop_menu_begin( -- char *label) -- { -- vimmenu_T *menu; /* pointer to last menu */ -- int menuPriority = 0; /* priority of new menu */ -- char mnembuf[64]; /* store menubar mnemonics here */ -- char *name; /* label with a mnemonic */ -- char *p; /* used to find mnemonics */ -- int idx; /* index into mnembuf */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_menu_begin()\n"); -- #endif -- -- /* -- * Look through all existing (non-PopUp and non-Toolbar) menus -- * and gather their mnemonics. Use this list to decide what -- * mnemonic should be used for label. -- */ -- -- idx = 0; -- mnembuf[idx++] = 'H'; /* H is mnemonic for Help */ -- for (menu = root_menu; menu != NULL; menu = menu->next) -- { -- if (menu_is_menubar(menu->name)) -- { -- p = strchr((char *)menu->name, '&'); -- if (p != NULL) -- mnembuf[idx++] = *++p; -- } -- if (menu->next != NULL -- && strcmp((char *) menu->next->dname, "Help") == 0) -- { -- menuPriority = menu->priority + 10; -- break; -- } -- } -- mnembuf[idx++] = NUL; -- name = addUniqueMnemonic(mnembuf, label); -- -- vim_snprintf(curMenuName, sizeof(curMenuName), "%s", name); -- sprintf(curMenuPriority, "%d.0", menuPriority); -- } -- -- /* -- * Append the name and priority to strings to be used in vim menu commands. -- */ -- void -- workshop_submenu_begin( -- char *label) -- { -- #ifdef WSDEBUG_TRACE -- if (ws_debug && ws_dlevel & WS_TRACE -- && strncmp(curMenuName, "ToolBar", 7) != 0) -- wstrace("workshop_submenu_begin(%s)\n", label); -- #endif -- -- strcat(curMenuName, "."); -- strcat(curMenuName, fixup(label)); -- -- updatePriority(True); -- } -- -- /* -- * Remove the submenu name and priority from curMenu*. -- */ -- -- void -- workshop_submenu_end(void) -- { -- char *p; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE) -- && strncmp(curMenuName, "ToolBar", 7) != 0) -- wstrace("workshop_submenu_end()\n"); -- #endif -- -- p = strrchr(curMenuPriority, '.'); -- ASSERT(p != NULL); -- *p = NUL; -- -- p = strrchr(curMenuName, '.'); -- ASSERT(p != NULL); -- *p = NUL; -- } -- -- /* -- * This is where menus are really made. Each item will generate an amenu vim -- * command. The globals curMenuName and curMenuPriority contain the name and -- * priority of the parent menu tree. -- */ -- void -- workshop_menu_item( -- char *label, -- char *verb, -- char *accelerator UNUSED, -- char *acceleratorText, -- char *name UNUSED, -- char *filepos UNUSED, -- char *sensitive) -- { -- char cbuf[BUFSIZ]; -- char namebuf[BUFSIZ]; -- char accText[BUFSIZ]; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE) -- && strncmp(curMenuName, "ToolBar", 7) != 0) -- { -- if (ws_dlevel & WS_TRACE_VERBOSE) -- wsdebug("workshop_menu_item(\n" -- "\tlabel = \"%s\",\n" -- "\tverb = %s,\n" -- "\taccelerator = %s,\n" -- "\tacceleratorText = \"%s\",\n" -- "\tname = %s,\n" -- "\tfilepos = %s,\n" -- "\tsensitive = %s)\n", -- label && *label ? label : "<None>", -- verb && *verb ? verb : "<None>", -- accelerator && *accelerator ? -- accelerator : "<None>", -- acceleratorText && *acceleratorText ? -- acceleratorText : "<None>", -- name && *name ? name : "<None>", -- filepos && *filepos ? filepos : "<None>", -- sensitive); -- else if (ws_dlevel & WS_TRACE) -- wstrace("workshop_menu_item(\"%s\", %s)\n", -- label && *label ? label : "<None>", -- verb && *verb ? verb : "<None>", sensitive); -- } -- #endif -- #ifdef WSDEBUG_SENSE -- if (ws_debug) -- wstrace("menu: %-21.20s%-21.20s(%s)\n", label, verb, -- *sensitive == '1' ? "Sensitive" : "Insensitive"); -- #endif -- -- if (acceleratorText != NULL) -- vim_snprintf(accText, sizeof(accText), "<Tab>%s", acceleratorText); -- else -- accText[0] = NUL; -- updatePriority(False); -- vim_snprintf(namebuf, sizeof(namebuf), "%s.%s", curMenuName, fixup(label)); -- vim_snprintf(cbuf, sizeof(cbuf), "amenu %s %s%s\t:wsverb %s<CR>", -- curMenuPriority, namebuf, accText, verb); -- -- coloncmd(cbuf, TRUE); -- addMenu(namebuf, fixAccelText(acceleratorText), verb); -- -- if (*sensitive == '0') -- { -- vim_snprintf(cbuf, sizeof(cbuf), "amenu disable %s", namebuf); -- coloncmd(cbuf, TRUE); -- } -- } -- -- /* -- * This function is called when a complete WorkShop menu description has been -- * sent over from eserve. We do some menu cleanup. -- */ -- -- void -- workshop_menu_end(void) -- { -- Boolean using_tearoff; /* set per current option setting */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_menu_end()\n"); -- #endif -- -- using_tearoff = vim_strchr(p_go, GO_TEAROFF) != NULL; -- gui_mch_toggle_tearoffs(using_tearoff); -- } -- -- void -- workshop_toolbar_begin(void) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_toolbar_begin()\n"); -- #endif -- -- coloncmd("aunmenu ToolBar", True); -- tbpri = 10; -- } -- -- void -- workshop_toolbar_end(void) -- { -- char_u buf[64]; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- { -- wstrace("workshop_toolbar_end()\n"); -- } -- #endif -- -- /* -- * Turn on ToolBar. -- */ -- STRCPY(buf, p_go); -- if (vim_strchr(p_go, 'T') == NULL) -- { -- STRCAT(buf, "T"); -- set_option_value((char_u *)"go", 0L, buf, 0); -- } -- workshopInitDone = True; -- } -- -- void -- workshop_toolbar_button( -- char *label, -- char *verb, -- char *senseVerb UNUSED, -- char *filepos UNUSED, -- char *help, -- char *sense, -- char *file, -- char *left) -- { -- char cbuf[BUFSIZ + MAXPATHLEN]; -- char namebuf[BUFSIZ]; -- static int tbid = 1; -- char_u *p; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE)) -- wsdebug("workshop_toolbar_button(\"%s\", %s, %s,\n" -- "\t%s, \"%s\", %s,\n\t\"%s\",\n\t<%s>)\n", -- label && *label ? label : "<None>", -- verb && *verb ? verb : "<None>", -- senseVerb && *senseVerb ? senseVerb : "<None>", -- filepos && *filepos ? filepos : "<None>", -- help && *help ? help : "<None>", -- sense && *sense ? sense : "<None>", -- file && *file ? file : "<None>", -- left && *left ? left : "<None>"); -- else if (WSDLEVEL(WS_TRACE)) -- wstrace("workshop_toolbar_button(\"%s\", %s)\n", -- label && *label ? label : "<None>", -- verb && *verb ? verb : "<None>"); -- #endif -- #ifdef WSDEBUG_SENSE -- if (ws_debug) -- wsdebug("button: %-21.20s%-21.20s(%s)\n", label, verb, -- *sense == '1' ? "Sensitive" : "Insensitive"); -- #endif -- -- if (left && *left && atoi(left) > 0) -- { -- /* Add a separator (but pass the width passed after the ':') */ -- sprintf(cbuf, "amenu 1.%d ToolBar.-sep%d:%s- <nul>", -- tbpri - 5, tbid++, left); -- -- coloncmd(cbuf, True); -- } -- -- p = vim_strsave_escaped((char_u *)label, (char_u *)"\\. "); -- vim_snprintf(namebuf, sizeof(namebuf), "ToolBar.%s", p); -- vim_free(p); -- STRCPY(cbuf, "amenu <silent> "); -- if (file != NULL && *file != NUL) -- { -- p = vim_strsave_escaped((char_u *)file, (char_u *)" "); -- vim_snprintf_add(cbuf, sizeof(cbuf), "icon=%s ", p); -- vim_free(p); -- } -- vim_snprintf_add(cbuf, sizeof(cbuf),"1.%d %s :wsverb %s<CR>", -- tbpri, namebuf, verb); -- -- /* Define the menu item */ -- coloncmd(cbuf, True); -- -- if (*sense == '0') -- { -- /* If menu isn't sensitive at startup... */ -- vim_snprintf(cbuf, sizeof(cbuf), "amenu disable %s", namebuf); -- coloncmd(cbuf, True); -- } -- -- if (help && *help) -- { -- /* Do the tooltip */ -- vim_snprintf(cbuf, sizeof(cbuf), "tmenu %s %s", namebuf, help); -- coloncmd(cbuf, True); -- } -- -- addMenu(namebuf, NULL, verb); -- tbpri += 10; -- } -- -- void -- workshop_frame_sensitivities( -- VerbSense *vs) /* list of verbs to (de)sensitize */ -- { -- VerbSense *vp; /* iterate through vs */ -- char *menu_name; /* used in menu lookup */ -- int cnt; /* count of verbs to skip */ -- int len; /* length of nonvariant part of command */ -- char cbuf[4096]; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE) || WSDLEVEL(4)) -- { -- wsdebug("workshop_frame_sensitivities(\n"); -- for (vp = vs; vp->verb != NULL; vp++) -- wsdebug("\t%-25s%d\n", vp->verb, vp->sense); -- wsdebug(")\n"); -- } -- else if (WSDLEVEL(WS_TRACE)) -- wstrace("workshop_frame_sensitivities()\n"); -- #endif -- #ifdef WSDEBUG_SENSE -- if (ws_debug) -- for (vp = vs; vp->verb != NULL; vp++) -- wsdebug("change: %-21.20s%-21.20s(%s)\n", -- "", vp->verb, vp->sense == 1 ? -- "Sensitive" : "Insensitive"); -- #endif -- -- /* -- * Look for all matching menu entries for the verb. There may be more -- * than one if the verb has both a menu and toolbar entry. -- */ -- for (vp = vs; vp->verb != NULL; vp++) -- { -- cnt = 0; -- strcpy(cbuf, "amenu"); -- strcat(cbuf, " "); -- strcat(cbuf, vp->sense ? "enable" : "disable"); -- strcat(cbuf, " "); -- len = strlen(cbuf); -- while ((menu_name = lookupVerb(vp->verb, cnt++)) != NULL) -- { -- strcpy(&cbuf[len], menu_name); -- coloncmd(cbuf, FALSE); -- } -- } -- gui_update_menus(0); -- gui_mch_flush(); -- } -- -- void -- workshop_set_option( -- char *option, /* name of a supported option */ -- char *value) /* value to set option to */ -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- { -- wstrace("workshop_set_option(%s, %s)\n", option, value); -- } -- #endif -- -- cbuf[0] = NUL; -- switch (*option) /* switch on 1st letter */ -- { -- case 's': -- if (strcmp(option, "syntax") == 0) -- vim_snprintf(cbuf, sizeof(cbuf), "syntax %s", value); -- else if (strcmp(option, "savefiles") == 0) -- { -- /* XXX - Not yet implemented */ -- } -- break; -- -- case 'l': -- if (strcmp(option, "lineno") == 0) -- sprintf(cbuf, "set %snu", -- (strcmp(value, "on") == 0) ? "" : "no"); -- break; -- -- case 'p': -- if (strcmp(option, "parentheses") == 0) -- sprintf(cbuf, "set %ssm", -- (strcmp(value, "on") == 0) ? "" : "no"); -- break; -- -- case 'w': -- /* this option is set by a direct call */ -- #ifdef WSDEBUG -- wsdebug("workshop_set_option: " -- "Got unexpected workshopkeys option"); -- #endif -- break; -- -- case 'b': /* these options are set from direct calls */ -- if (option[7] == NUL && strcmp(option, "balloon") == 0) -- { -- #ifdef WSDEBUG -- /* set by direct call to workshop_balloon_mode */ -- wsdebug("workshop_set_option: " -- "Got unexpected ballooneval option"); -- #endif -- } -- else if (strcmp(option, "balloondelay") == 0) -- { -- #ifdef WSDEBUG -- /* set by direct call to workshop_balloon_delay */ -- wsdebug("workshop_set_option: " -- "Got unexpected balloondelay option"); -- #endif -- } -- break; -- } -- if (cbuf[0] != NUL) -- coloncmd(cbuf, TRUE); -- } -- -- -- void -- workshop_balloon_mode( -- Boolean on) -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_balloon_mode(%s)\n", on ? "True" : "False"); -- #endif -- -- sprintf(cbuf, "set %sbeval", on ? "" : "no"); -- coloncmd(cbuf, TRUE); -- } -- -- -- void -- workshop_balloon_delay( -- int delay) -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_balloon_delay(%d)\n", delay); -- #endif -- -- sprintf(cbuf, "set bdlay=%d", delay); -- coloncmd(cbuf, TRUE); -- } -- -- -- void -- workshop_show_balloon_tip( -- char *tip) -- { -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_show_balloon_tip(%s)\n", tip); -- #endif -- -- if (balloonEval != NULL) -- gui_mch_post_balloon(balloonEval, (char_u *)tip); -- } -- -- -- void -- workshop_hotkeys( -- Boolean on) -- { -- char cbuf[BUFSIZ]; /* command buffer */ -- MenuMap *mp; /* iterate over menuMap entries */ -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_hotkeys(%s)\n", on ? "True" : "False"); -- #endif -- -- workshopHotKeysEnabled = on; -- if (workshopHotKeysEnabled) -- for (mp = menuMap; mp < &menuMap[menuMapSize]; mp++) -- { -- if (mp->accel != NULL) -- { -- vim_snprintf(cbuf, sizeof(cbuf), -- "map %s :wsverb %s<CR>", mp->accel, mp->verb); -- coloncmd(cbuf, TRUE); -- } -- } -- else -- for (mp = menuMap; mp < &menuMap[menuMapSize]; mp++) -- { -- if (mp->accel != NULL) -- { -- vim_snprintf(cbuf, sizeof(cbuf), "unmap %s", mp->accel); -- coloncmd(cbuf, TRUE); -- } -- } -- } -- -- /* -- * A button in the toolbar has been pushed. -- */ -- int -- workshop_get_positions( -- void *clientData UNUSED, -- char **filename, /* output data */ -- int *curLine, /* output data */ -- int *curCol, /* output data */ -- int *selStartLine, /* output data */ -- int *selStartCol, /* output data */ -- int *selEndLine, /* output data */ -- int *selEndCol, /* output data */ -- int *selLength, /* output data */ -- char **selection) /* output data */ -- { -- static char ffname[MAXPATHLEN]; -- -- #ifdef WSDEBUG_TRACE -- if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) -- wstrace("workshop_get_positions(%#x, \"%s\", ...)\n", -- clientData, (curbuf && curbuf->b_sfname != NULL) -- ? (char *)curbuf->b_sfname : "<None>"); -- #endif -- -- if (curbuf->b_ffname == NULL) -- ffname[0] = NUL; -- else -- /* copy so nobody can change b_ffname */ -- strcpy(ffname, (char *) curbuf->b_ffname); -- *filename = ffname; -- *curLine = curwin->w_cursor.lnum; -- *curCol = curwin->w_cursor.col; -- -- if (curbuf->b_visual.vi_mode == 'v' && -- EQUAL_POS(curwin->w_cursor, curbuf->b_visual.vi_end)) -- { -- *selStartLine = curbuf->b_visual.vi_start.lnum; -- *selStartCol = curbuf->b_visual.vi_start.col; -- *selEndLine = curbuf->b_visual.vi_end.lnum; -- *selEndCol = curbuf->b_visual.vi_end.col; -- *selection = get_selection(curbuf); -- if (*selection) -- *selLength = strlen(*selection); -- else -- *selLength = 0; -- } -- else -- { -- *selStartLine = *selEndLine = -1; -- *selStartCol = *selEndCol = -1; -- *selLength = 0; -- *selection = ""; -- } -- -- return True; -- } -- -- -- -- /************************************************************************ -- * Utility functions -- ************************************************************************/ -- -- static char * -- get_selection( -- buf_T *buf) /* buffer whose selection we want */ -- { -- pos_T *start; /* start of the selection */ -- pos_T *end; /* end of the selection */ -- char *lp; /* pointer to actual line data */ -- int llen; /* length of actual line data */ -- char *sp; /* pointer to selection buffer */ -- int slen; /* string length in selection buffer */ -- int size; /* size of selection buffer */ -- char *new_sp; /* temp pointer to new sp */ -- int lnum; /* line number we are appending */ -- -- if (buf->b_visual.vi_mode == 'v') -- { -- start = &buf->b_visual.vi_start; -- end = &buf->b_visual.vi_end; -- if (start->lnum == end->lnum) -- { -- /* selection is all on one line */ -- lp = (char *) ml_get_pos(start); -- llen = end->col - start->col + 1; -- sp = (char *) malloc(llen + 1); -- if (sp != NULL) -- { -- strncpy(sp, lp, llen); -- sp[llen] = NUL; -- } -- } -- else -- { -- /* multi-line selection */ -- lp = (char *) ml_get_pos(start); -- llen = strlen(lp); -- sp = (char *) malloc(BUFSIZ + llen); -- if (sp != NULL) -- { -- size = BUFSIZ + llen; -- strcpy(sp, lp); -- sp[llen] = '\n'; -- slen = llen + 1; -- -- lnum = start->lnum + 1; -- while (lnum < end->lnum) -- sp = append_selection(lnum++, sp, &size, &slen); -- -- lp = (char *) ml_get(end->lnum); -- llen = end->col + 1; -- if ((slen + llen) >= size) -- { -- new_sp = (char *) -- realloc(sp, slen + llen + 1); -- if (new_sp != NULL) -- { -- size += llen + 1; -- sp = new_sp; -- } -- } -- if ((slen + llen) < size) -- { -- strncpy(&sp[slen], lp, llen); -- sp[slen + llen] = NUL; -- } -- -- } -- } -- } -- else -- sp = NULL; -- -- return sp; -- } -- -- static char * -- append_selection( -- int lnum, /* line number to append */ -- char *sp, /* pointer to selection buffer */ -- int *size, /* ptr to size of sp */ -- int *slen) /* ptr to length of selection string */ -- { -- char *lp; /* line of data from buffer */ -- int llen; /* strlen of lp */ -- char *new_sp; /* temp pointer to new sp */ -- -- lp = (char *)ml_get((linenr_T)lnum); -- llen = strlen(lp); -- -- if ((*slen + llen) <= *size) -- { -- new_sp = (char *) realloc((void *) sp, BUFSIZ + *slen + llen); -- if (*new_sp != NUL) -- { -- *size = BUFSIZ + *slen + llen; -- sp = new_sp; -- } -- } -- if ((*slen + llen) > *size) -- { -- strcat(&sp[*slen], lp); -- *slen += llen; -- sp[*slen++] = '\n'; -- } -- -- return sp; -- } -- -- -- static void -- load_buffer_by_name( -- char *filename, /* the file to load */ -- int lnum) /* an optional line number (or 0) */ -- { -- char lnumbuf[16]; /* make line number option for :e */ -- char cbuf[BUFSIZ]; /* command buffer */ -- -- if (lnum > 0) -- sprintf(lnumbuf, "+%d", lnum); -- else -- lnumbuf[0] = NUL; -- -- vim_snprintf(cbuf, sizeof(cbuf), "e %s %s", lnumbuf, filename); -- coloncmd(cbuf, False); -- } -- -- -- static void -- load_window( -- char *filename, /* filename to load */ -- int lnum) /* linenumber to go to */ -- { -- buf_T *buf; /* buffer filename is stored in */ -- win_T *win; /* window filenme is displayed in */ -- -- /* -- * Make sure filename is displayed and is the current window. -- */ -- -- buf = buflist_findname((char_u *)filename); -- if (buf == NULL || (win = get_window(buf)) == NULL) -- { -- /* No buffer or buffer is not in current window */ -- /* wsdebug("load_window: load_buffer_by_name(\"%s\", %d)\n", -- filename, lnum); */ -- load_buffer_by_name(filename, lnum); -- } -- else -- { -- /* buf is in a window */ -- if (win != curwin) -- { -- win_enter(win, False); -- /* wsdebug("load_window: window enter %s\n", -- win->w_buffer->b_sfname); */ -- } -- if (lnum > 0 && win->w_cursor.lnum != lnum) -- { -- warp_to_pc(lnum); -- /* wsdebug("load_window: warp to %s[%d]\n", -- win->w_buffer->b_sfname, lnum); */ -- } -- } -- out_flush(); -- } -- -- -- -- static void -- warp_to_pc( -- int lnum) /* line number to warp to */ -- { -- char lbuf[256]; /* build line command here */ -- -- if (lnum > 0) -- { -- if (State & INSERT) -- add_to_input_buf((char_u *) "\033", 1); -- if (isShowing(lnum)) -- sprintf(lbuf, "%dG", lnum); -- else -- sprintf(lbuf, "%dz.", lnum); -- add_to_input_buf((char_u *) lbuf, strlen(lbuf)); -- } -- } -- -- static Boolean -- isShowing( -- int lnum) /* tell if line number is showing */ -- { -- return lnum >= curwin->w_topline && lnum < curwin->w_botline; -- } -- -- -- -- static win_T * -- get_window( -- buf_T *buf) /* buffer to find window for */ -- { -- win_T *wp = NULL; /* window filename is in */ -- -- FOR_ALL_WINDOWS(wp) -- if (buf == wp->w_buffer) -- break; -- return wp; -- } -- -- -- static void -- updatePriority( -- Boolean subMenu) /* if True then start new submenu pri */ -- { -- int pri; /* priority of this menu/item */ -- char *p; -- -- p = strrchr(curMenuPriority, '.'); -- ASSERT(p != NULL); -- *p++ = NUL; -- -- pri = atoi(p) + 10; /* our new priority */ -- -- if (subMenu) -- vim_snprintf(curMenuPriority, sizeof(curMenuPriority), -- "%s.%d.0", curMenuPriority, pri); -- else -- vim_snprintf(curMenuPriority, sizeof(curMenuPriority), -- "%s.%d", curMenuPriority, pri); -- } -- -- static char * -- addUniqueMnemonic( -- char *mnemonics, /* currently used mnemonics */ -- char *label) /* label of menu needing mnemonic */ -- { -- static char name[BUFSIZ]; /* buffer for the updated name */ -- char *p; /* pointer into label */ -- char *found; /* pointer to possible mnemonic */ -- -- found = NULL; -- for (p = label; *p != NUL; p++) -- if (strchr(mnemonics, *p) == 0) -- if (found == NULL || (isupper((int)*p) && islower((int)*found))) -- found = p; -- -- if (found != NULL) -- { -- strncpy(name, label, (found - label)); -- strcat(name, "&"); -- strcat(name, found); -- } -- else -- strcpy(name, label); -- -- return name; -- } -- -- /* -- * Some characters in a menu name must be escaped in vim. Since this is vim -- * specific, it must be done on this side. -- */ -- static char * -- fixup( -- char *label) -- { -- static char buf[BUFSIZ]; -- char *bp; /* pointer into buf */ -- char *lp; /* pointer into label */ -- -- lp = label; -- bp = buf; -- while (*lp != NUL) -- { -- if (*lp == ' ' || *lp == '.') -- *bp++ = '\\'; -- *bp++ = *lp++; -- } -- *bp = NUL; -- -- return buf; -- } -- -- -- #ifdef NOHANDS_SUPPORT_FUNCTIONS -- -- /* For the NoHands test suite */ -- -- char * -- workshop_test_getcurrentfile(void) -- { -- char *filename, *selection; -- int curLine, curCol, selStartLine, selStartCol, selEndLine; -- int selEndCol, selLength; -- -- if (workshop_get_positions( -- NULL, &filename, &curLine, &curCol, &selStartLine, -- &selStartCol, &selEndLine, &selEndCol, &selLength, -- &selection)) -- return filename; -- else -- return NULL; -- } -- -- int -- workshop_test_getcursorrow(void) -- { -- return 0; -- } -- -- int -- workshop_test_getcursorcol(void) -- { -- char *filename, *selection; -- int curLine, curCol, selStartLine, selStartCol, selEndLine; -- int selEndCol, selLength; -- -- if (workshop_get_positions( -- NULL, &filename, &curLine, &curCol, &selStartLine, -- &selStartCol, &selEndLine, &selEndCol, &selLength, -- &selection)) -- return curCol; -- else -- return -1; -- } -- -- char * -- workshop_test_getcursorrowtext(void) -- { -- return NULL; -- } -- -- char * -- workshop_test_getselectedtext(void) -- { -- char *filename, *selection; -- int curLine, curCol, selStartLine, selStartCol, selEndLine; -- int selEndCol, selLength; -- -- if (workshop_get_positions( -- NULL, &filename, &curLine, &curCol, &selStartLine, -- &selStartCol, &selEndLine, &selEndCol, &selLength, -- &selection)) -- return selection; -- else -- return NULL; -- } -- -- void -- workshop_save_sensitivity(char *filename UNUSED) -- { -- } -- -- #endif -- -- static char * -- fixAccelText( -- char *ap) /* original acceleratorText */ -- { -- char buf[256]; /* build in temp buffer */ -- char *shift; /* shift string of "" */ -- -- if (ap == NULL) -- return NULL; -- -- /* If the accelerator is shifted use the vim form */ -- if (strncmp("Shift+", ap, 6) == 0) -- { -- shift = "S-"; -- ap += 6; -- } -- else -- shift = ""; -- -- if (*ap == 'F' && atoi(&ap[1]) > 0) -- { -- vim_snprintf(buf, sizeof(buf), "<%s%s>", shift, ap); -- return strdup(buf); -- } -- else -- return NULL; -- } -- -- #ifdef FEAT_BEVAL_GUI -- void -- workshop_beval_cb( -- BalloonEval *beval, -- int state) -- { -- win_T *wp; -- char_u *text; -- int type; -- linenr_T lnum; -- int col; -- int idx; -- char buf[MAXPATHLEN * 2]; -- static int serialNo = -1; -- -- if (!p_beval) -- return; -- -- if (get_beval_info(beval, FALSE, &wp, &lnum, &text, &col) == OK) -- { -- if (text && text[0]) -- { -- /* Send debugger request */ -- if (strlen((char *) text) > (MAXPATHLEN/2)) -- { -- /* -- * The user has probably selected the entire -- * buffer or something like that - don't attempt -- * to evaluate it -- */ -- return; -- } -- -- /* -- * WorkShop expects the col to be a character index, not -- * a column number. Compute the index from col. Also set -- * line to 0 because thats what dbx expects. -- */ -- #ifdef FEAT_VARTABS -- idx = computeIndex(col, text, beval->ts, beval->vts); -- #else -- idx = computeIndex(col, text, beval->ts, 0); -- #endif -- if (idx > 0) -- { -- lnum = 0; -- -- /* -- * If successful, it will respond with a balloon cmd. -- */ -- if (state & ControlMask) -- /* Evaluate *(expression) */ -- type = (int)GPLineEval_INDIRECT; -- else if (state & ShiftMask) -- /* Evaluate type(expression) */ -- type = (int)GPLineEval_TYPE; -- else -- /* Evaluate value(expression) */ -- type = (int)GPLineEval_EVALUATE; -- -- /* Send request to dbx */ -- vim_snprintf(buf, sizeof(buf), "toolVerb debug.balloonEval " -- "%s %ld,0 %d,0 %d,%d %ld %s\n", -- (char *)wp->w_buffer->b_ffname, -- (long)lnum, idx, type, serialNo++, -- (long)strlen((char *)text), (char *)text); -- balloonEval = beval; -- workshop_send_message(buf); -- } -- } -- } -- } -- -- static int -- computeIndex( -- int wantedCol, -- char_u *line, -- int ts, -- int *vts UNUSED) -- { -- int col = 0; -- int idx = 0; -- -- while (line[idx]) -- { -- if (line[idx] == '\t') -- #ifdef FEAT_VARTABS -- col += tabstop_padding(col, ts, vts); -- #else -- col += ts - (col % ts); -- #endif -- else -- col++; -- idx++; -- if (col >= wantedCol) -- return idx; -- } -- -- return -1; -- } -- #endif -- -- static void -- addMenu( -- char *menu, /* menu name */ -- char *accel, /* accelerator text (optional) */ -- char *verb) /* WorkShop action-verb */ -- { -- MenuMap *newMap; -- char cbuf[BUFSIZ]; -- -- if (menuMapSize >= menuMapMax) -- { -- newMap = realloc(menuMap, -- sizeof(MenuMap) * (menuMapMax + MENU_INC)); -- if (newMap != NULL) -- { -- menuMap = newMap; -- menuMapMax += MENU_INC; -- } -- } -- if (menuMapSize < menuMapMax) -- { -- menuMap[menuMapSize].name = strdup(menu); -- menuMap[menuMapSize].accel = accel && *accel ? strdup(accel) : NULL; -- menuMap[menuMapSize++].verb = strdup(verb); -- if (accel && workshopHotKeysEnabled) -- { -- vim_snprintf(cbuf, sizeof(cbuf), -- "map %s :wsverb %s<CR>", accel, verb); -- coloncmd(cbuf, TRUE); -- } -- } -- } -- -- static char * -- nameStrip( -- char *raw) /* menu name, possibly with & chars */ -- { -- static char buf[BUFSIZ]; /* build stripped name here */ -- char *bp = buf; -- -- while (*raw) -- { -- if (*raw != '&') -- *bp++ = *raw; -- raw++; -- } -- *bp = NUL; -- return buf; -- } -- -- -- static char * -- lookupVerb( -- char *verb, -- int skip) /* number of matches to skip */ -- { -- int i; /* loop iterator */ -- -- for (i = 0; i < menuMapSize; i++) -- if (strcmp(menuMap[i].verb, verb) == 0 && skip-- == 0) -- return nameStrip(menuMap[i].name); -- -- return NULL; -- } -- -- -- static void -- coloncmd( -- char *cmd, /* the command to print */ -- Boolean force) /* force cursor update */ -- { -- char_u *cpo_save = p_cpo; -- -- #ifdef WSDEBUG -- if (WSDLEVEL(WS_TRACE_COLONCMD)) -- wsdebug("Cmd: %s\n", cmd); -- #endif -- -- p_cpo = empty_option; -- -- ALT_INPUT_LOCK_ON; -- do_cmdline_cmd((char_u *)cmd); -- ALT_INPUT_LOCK_OFF; -- -- p_cpo = cpo_save; -- -- if (force) -- gui_update_screen(); -- } -- -- /* -- * setDollarVim - Given the run directory, search for the vim install -- * directory and set $VIM. -- * -- * We can be running out of SUNWspro/bin or out of -- * SUNWspro/contrib/contrib6/vim5.6/bin so we check -- * relative to both of these directories. -- */ -- static void -- setDollarVim( -- char *rundir) -- { -- char buf[MAXPATHLEN]; -- char *cp; -- -- /* -- * First case: Running from <install-dir>/SUNWspro/bin -- */ -- strcpy(buf, rundir); -- strcat(buf, "/../contrib/contrib6/vim" VIM_VERSION_SHORT "/share/vim/" -- VIM_VERSION_NODOT "/syntax/syntax.vim"); -- if (access(buf, R_OK) == 0) -- { -- strcpy(buf, "SPRO_WSDIR="); -- strcat(buf, rundir); -- cp = strrchr(buf, '/'); -- if (cp != NULL) -- strcpy(cp, "/WS6U2"); -- putenv(strdup(buf)); -- -- strcpy(buf, "VIM="); -- strcat(buf, rundir); -- strcat(buf, "/../contrib/contrib6/vim" VIM_VERSION_SHORT "/share/vim/" -- VIM_VERSION_NODOT); -- putenv(strdup(buf)); -- return; -- } -- -- /* -- * Second case: Probably running from -- * <install-dir>/SUNWspro/contrib/contrib6/vim5.6/bin -- */ -- strcpy(buf, rundir); -- strcat(buf, "/../../../contrib/contrib6/vim" VIM_VERSION_SHORT -- "/share/vim/" VIM_VERSION_NODOT "/syntax/syntax.vim"); -- if (access(buf, R_OK) == 0) -- { -- strcpy(buf, "SPRO_WSDIR="); -- strcat(buf, rundir); -- cp = strrchr(buf, '/'); -- if (cp != NULL) -- strcpy(cp, "../../../../WS6U2"); -- putenv(strdup(buf)); -- -- strcpy(buf, "VIM="); -- strcat(buf, rundir); -- strcat(buf, "/../../../contrib/contrib6/vim" VIM_VERSION_SHORT -- "/share/vim/" VIM_VERSION_NODOT); -- putenv(strdup(buf)); -- return; -- } -- } -- -- /* -- * findYourself - Find the directory we are running from. This is used to -- * set $VIM. We need to set this because users can install -- * the package in a different directory than the compiled -- * directory. This is a Sun Visual WorkShop requirement! -- * -- * Note: We override a user's $VIM because it won't have the -- * WorkShop specific files. S/he may not like this but it's -- * better than getting the wrong files (especially as the -- * user is likely to have $VIM set to 5.4 or later). -- */ -- void -- findYourself( -- char *argv0) -- { -- char *runpath = NULL; -- char *path; -- char *pathbuf; -- -- if (*argv0 == '/') -- runpath = strdup(argv0); -- else if (*argv0 == '.' || strchr(argv0, '/')) -- { -- runpath = (char *) malloc(MAXPATHLEN); -- if (getcwd(runpath, MAXPATHLEN) == NULL) -- runpath[0] = NUL; -- strcat(runpath, "/"); -- strcat(runpath, argv0); -- } -- else -- { -- path = getenv("PATH"); -- if (path != NULL) -- { -- runpath = (char *) malloc(MAXPATHLEN); -- pathbuf = strdup(path); -- path = strtok(pathbuf, ":"); -- do -- { -- strcpy(runpath, path); -- strcat(runpath, "/"); -- strcat(runpath, argv0); -- if (access(runpath, X_OK) == 0) -- break; -- } while ((path = strtok(NULL, ":")) != NULL); -- free(pathbuf); -- } -- } -- -- if (runpath != NULL) -- { -- char runbuf[MAXPATHLEN]; -- -- /* -- * We found the run directory. Now find the install dir. -- */ -- (void)vim_FullName((char_u *)runpath, (char_u *)runbuf, MAXPATHLEN, 1); -- path = strrchr(runbuf, '/'); -- if (path != NULL) -- *path = NUL; /* remove the vim/gvim name */ -- path = strrchr(runbuf, '/'); -- if (path != NULL) -- { -- if (strncmp(path, "/bin", 4) == 0) -- setDollarVim(runbuf); -- else if (strncmp(path, "/src", 4) == 0) -- { -- *path = NUL; /* development tree */ -- setDollarVim(runbuf); -- } -- } -- free(runpath); -- } -- } ---- 0 ---- -*** ../vim-8.1.0762/src/workshop.h 2016-08-29 22:42:21.000000000 +0200 ---- src/workshop.h 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,28 **** -- /* vi:set ts=8 sts=4 sw=4 noet: -- * -- * VIM - Vi IMproved by Bram Moolenaar -- * Visual Workshop integration by Gordon Prieur -- * -- * Do ":help uganda" in Vim to read copying and usage conditions. -- * Do ":help credits" in Vim to see a list of people who contributed. -- */ -- -- #if !defined(WORKSHOP_H) && defined(FEAT_SUN_WORKSHOP) -- #define WORKSHOP_H -- -- #include <X11/Intrinsic.h> -- #include <Xm/Xm.h> -- -- #include "integration.h" -- -- #ifdef WSDEBUG -- # include "wsdebug.h" -- #else -- # ifndef ASSERT -- # define ASSERT(c) -- # endif -- #endif -- -- extern int usingSunWorkShop; /* set if -ws flag is used */ -- -- #endif ---- 0 ---- -*** ../vim-8.1.0762/src/wsdebug.c 2016-09-25 21:41:24.000000000 +0200 ---- src/wsdebug.c 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,184 **** -- /* vi:set ts=8 sw=8 noet: -- * -- * VIM - Vi IMproved by Bram Moolenaar -- * Visual Workshop integration by Gordon Prieur -- * -- * Do ":help uganda" in Vim to read copying and usage conditions. -- * Do ":help credits" in Vim to see a list of people who contributed. -- * See README.txt for an overview of the Vim source code. -- */ -- -- /* -- * WorkShop Debugging Tools. What are these tools and why are they important? -- * There are two main tools here. The first tool is a tool for delaying or -- * stopping gvim during startup. The second tool is a protocol log tool. -- * -- * The startup delay tool is called wsdebug_wait(). This is very important for -- * debugging startup problems because gvim will be started automatically from -- * workshop and cannot be run directly from a debugger. The only way to debug -- * a gvim started by workshop is by attaching a debugger to it. Without this -- * tool all starup code will have completed before you can get the pid and -- * attach. -- * -- * The second tool is a protocol log tool. The workshop editor server and gvim -- * pass information back and forth during a workshop session. Sometimes it is -- * very important to peruse this conversation in order to understand what is -- * happening. The wsdebug_log_init() call sets up this protocol log tool and -- * wsdebug() and wstrace() calls output the information to the log. -- * -- * This code must have WSDEBUG defined for it to be compiled into vim/gvim. -- */ -- -- #ifdef WSDEBUG -- -- #include "vim.h" -- -- FILE *ws_debug = NULL; -- u_int ws_dlevel = 0; /* ws_debug verbosity level */ -- -- void wsdebug(char *, ...); -- void wstrace(char *, ...); -- -- static int lookup(char *); -- #ifdef USE_WS_ERRORHANDLER -- static int errorHandler(Display *, XErrorEvent *); -- #endif -- -- -- /* -- * wsdebug_wait - This function can be used to delay or stop execution of vim. -- * It's normally used to delay startup while attaching a -- * debugger to a running process. Since workshop starts gvim -- * from a background process this is the only way to debug -- * startup problems. -- */ -- -- void wsdebug_wait( -- u_int wait_flags, /* tells what to do */ -- char *wait_var, /* wait environment variable */ -- u_int wait_secs) /* how many seconds to wait */ -- { -- -- init_homedir(); /* not inited yet */ -- #ifdef USE_WDDUMP -- WDDump(0, 0, 0); -- #endif -- -- /* for debugging purposes only */ -- if (wait_flags & WT_ENV && wait_var && getenv(wait_var) != NULL) { -- sleep(atoi(getenv(wait_var))); -- } else if (wait_flags & WT_WAIT && lookup("~/.gvimwait")) { -- sleep(wait_secs > 0 && wait_secs < 120 ? wait_secs : 20); -- } else if (wait_flags & WT_STOP && lookup("~/.gvimstop")) { -- int w = 1; -- while (w) { -- ; -- } -- } -- } /* end wsdebug_wait */ -- -- -- void -- wsdebug_log_init( -- char *log_var, /* env var with log file */ -- char *level_var) /* env var with ws_debug level */ -- { -- char *file; /* possible ws_debug output file */ -- char *cp; /* ws_dlevel pointer */ -- -- if (log_var && (file = getenv(log_var)) != NULL) -- { -- char buf[BUFSIZ]; -- -- vim_snprintf(buf, sizeof(buf), "date > %s", file); -- system(buf); -- ws_debug = fopen(file, "a"); -- if (level_var && (cp = getenv(level_var)) != NULL) { -- ws_dlevel = strtoul(cp, NULL, 0); -- } else { -- ws_dlevel = WS_TRACE; /* default level */ -- } -- #ifdef USE_WS_ERRORHANDLER -- XSetErrorHandler(errorHandler); -- #endif -- } -- -- } /* end wsdebug_log_init */ -- -- -- -- -- void -- wstrace( -- char *fmt, -- ...) -- { -- va_list ap; -- -- if (ws_debug!= NULL && (ws_dlevel & (WS_TRACE | WS_TRACE_VERBOSE))) { -- va_start(ap, fmt); -- vfprintf(ws_debug, fmt, ap); -- va_end(ap); -- fflush(ws_debug); -- } -- -- } /* end wstrace */ -- -- -- void -- wsdebug( -- char *fmt, -- ...) -- { -- va_list ap; -- -- if (ws_debug != NULL) { -- va_start(ap, fmt); -- vfprintf(ws_debug, fmt, ap); -- va_end(ap); -- fflush(ws_debug); -- } -- -- } /* end wsdebug */ -- -- -- static int -- lookup( -- char *file) -- { -- char buf[BUFSIZ]; -- -- expand_env((char_u *) file, (char_u *) buf, BUFSIZ); -- return (access(buf, F_OK) == 0); -- -- } /* end lookup */ -- -- #ifdef USE_WS_ERRORHANDLER -- static int -- errorHandler( -- Display *dpy, -- XErrorEvent *err) -- { -- char msg[256]; -- char buf[256]; -- -- XGetErrorText(dpy, err->error_code, msg, sizeof(msg)); -- wsdebug("\n\nWSDEBUG Vim: X Error of failed request: %s\n", msg); -- -- sprintf(buf, "%d", err->request_code); -- XGetErrorDatabaseText(dpy, -- "XRequest", buf, "Unknown", msg, sizeof(msg)); -- wsdebug("\tMajor opcode of failed request: %d (%s)\n", -- err->request_code, msg); -- if (err->request_code > 128) { -- wsdebug("\tMinor opcode of failed request: %d\n", -- err->minor_code); -- } -- -- return 0; -- } -- #endif -- -- -- -- #endif /* WSDEBUG */ ---- 0 ---- -*** ../vim-8.1.0762/src/wsdebug.h 2016-08-29 22:42:21.000000000 +0200 ---- src/wsdebug.h 1970-01-01 01:00:00.000000000 +0100 -*************** -*** 1,81 **** -- /* vi:set ts=8 sw=8 noet: -- * -- * VIM - Vi IMproved by Bram Moolenaar -- * Visual Workshop integration by Gordon Prieur -- * -- * Do ":help uganda" in Vim to read copying and usage conditions. -- * Do ":help credits" in Vim to see a list of people who contributed. -- */ -- -- -- #ifndef WSDEBUG_H -- #define WSDEBUG_H -- -- #ifdef WSDEBUG -- -- #ifndef ASSERT -- #define ASSERT(c) \ -- if (!(c)) { \ -- fprintf(stderr, "Assertion failed: line %d, file %s\n", \ -- __LINE__, __FILE__); \ -- fflush(stderr); \ -- abort(); \ -- } -- #endif -- -- #define WS_TRACE 0x00000001 -- #define WS_TRACE_VERBOSE 0x00000002 -- #define WS_TRACE_COLONCMD 0x00000004 -- #define WS_DEBUG_ALL 0xffffffff -- -- #define WSDLEVEL(flags) (ws_debug != NULL && (ws_dlevel & (flags))) -- -- #ifdef USE_WDDUMP -- #include "wdump.h" -- #endif -- -- #define WSDEBUG_TRACE 1 -- //#define WSDEBUG_SENSE 2 -- -- typedef enum { -- WT_ENV = 1, /* look for env var if set */ -- WT_WAIT, /* look for ~/.gvimwait if set */ -- WT_STOP /* look for ~/.gvimstop if set */ -- } WtWait; -- -- -- void wsdebug(char *, ...); -- void wstrace(char *, ...); -- -- -- extern FILE *ws_debug; -- extern u_int ws_dlevel; /* ws_debug verbosity level */ -- -- # else /* not WSDEBUG */ -- -- #ifndef ASSERT -- # define ASSERT(c) -- #endif -- -- /* -- * The following 2 stubs are needed because a macro cannot be used because of -- * the variable number of arguments. -- */ -- -- void -- wsdebug( -- char *fmt, -- ...) -- { -- } -- -- -- void -- wstrace( -- char *fmt, -- ...) -- { -- } -- -- #endif /* WSDEBUG */ -- #endif /* WSDEBUG_H */ ---- 0 ---- -*** ../vim-8.1.0762/src/ex_cmdidxs.h 2019-01-08 22:02:36.044297306 +0100 ---- src/ex_cmdidxs.h 2019-01-17 15:31:43.054158710 +0100 -*************** -*** 28,36 **** - /* u */ 481, - /* v */ 492, - /* w */ 510, -! /* x */ 525, -! /* y */ 534, -! /* z */ 535 - }; - - /* ---- 28,36 ---- - /* u */ 481, - /* v */ 492, - /* w */ 510, -! /* x */ 524, -! /* y */ 533, -! /* z */ 534 - }; - - /* -*************** -*** 63,72 **** - /* t */ { 2, 0, 19, 0, 22, 24, 0, 25, 0, 26, 0, 27, 31, 34, 36, 37, 0, 38, 40, 0, 41, 0, 0, 0, 0, 0 }, - /* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - /* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 }, -! /* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 12, 0, 13, 14, 0, 0, 0, 0 }, - /* x */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 }, - /* y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - }; - -! static const int command_count = 548; ---- 63,72 ---- - /* t */ { 2, 0, 19, 0, 22, 24, 0, 25, 0, 26, 0, 27, 31, 34, 36, 37, 0, 38, 40, 0, 41, 0, 0, 0, 0, 0 }, - /* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - /* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 }, -! /* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 0, 0, 12, 13, 0, 0, 0, 0 }, - /* x */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0 }, - /* y */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - }; - -! static const int command_count = 547; -*** ../vim-8.1.0762/src/version.c 2019-01-17 14:31:10.190919265 +0100 ---- src/version.c 2019-01-17 15:39:12.143436999 +0100 -*************** -*** 797,798 **** ---- 793,796 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 763, - /**/ - --- -You are Dead. Do you wish to restart, load, or quit? - - /// 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 /// |