forked from aniani/vim
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Problem: A lot of code is shared between vim.exe and gvim.exe. Solution: Optionally put the shared code in vim.dll. (Ken Takata, closes #4287)
This commit is contained in:
parent
ab4cece605
commit
afde13b62b
2
.gitignore
vendored
2
.gitignore
vendored
@ -33,6 +33,8 @@ src/auto/pathdef.c
|
||||
*.suo
|
||||
*.res
|
||||
*.RES
|
||||
vim*.dll
|
||||
vim*.lib
|
||||
src/if_perl.c
|
||||
src/pathdef.c
|
||||
src/Obj*/pathdef.c
|
||||
|
1
Filelist
1
Filelist
@ -454,6 +454,7 @@ SRC_DOS = \
|
||||
src/iscygpty.h \
|
||||
src/iid_ole.c \
|
||||
src/os_dos.h \
|
||||
src/os_w32dll.c \
|
||||
src/os_w32exe.c \
|
||||
src/os_win32.c \
|
||||
src/os_mswin.c \
|
||||
|
@ -322,6 +322,9 @@ Section "$(str_section_exe)" id_section_exe
|
||||
|
||||
SetOutPath $0
|
||||
File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
|
||||
!if /FileExists "${VIMSRC}\vim${BIT}.dll"
|
||||
File ${VIMSRC}\vim${BIT}.dll
|
||||
!endif
|
||||
File /oname=install.exe ${VIMSRC}\installw32.exe
|
||||
File /oname=uninstal.exe ${VIMSRC}\uninstalw32.exe
|
||||
File ${VIMSRC}\vimrun.exe
|
||||
|
@ -1,4 +1,4 @@
|
||||
*gui_w32.txt* For Vim version 8.1. Last change: 2017 Oct 27
|
||||
*gui_w32.txt* For Vim version 8.1. Last change: 2019 Apr 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -31,6 +31,17 @@ The GUI will always run in the Windows subsystem. Mostly shells automatically
|
||||
return with a command prompt after starting gvim. If not, you should use the
|
||||
"start" command: >
|
||||
start gvim [options] file ..
|
||||
< *E988*
|
||||
The console version with the |-g| option may also start the GUI by executing
|
||||
gvim.exe: >
|
||||
vim -g [options] file ..
|
||||
To make this work, gvim.exe must exist in the same directory as the vim.exe,
|
||||
and this feature must be enabled at compile time.
|
||||
|
||||
One may also use `:gui` from the console version. However, this is an
|
||||
experimental feature and this feature must be enabled at compile time.
|
||||
It uses a session file to recreate the current state of the console Vim in the
|
||||
GUI Vim.
|
||||
|
||||
Note: All fonts (bold, italic) must be of the same size!!! If you don't do
|
||||
this, text will disappear or mess up the display. Vim does not check the font
|
||||
|
@ -36,7 +36,7 @@ FEATURES=HUGE
|
||||
DEBUG=no
|
||||
|
||||
# set to yes to create a mapfile
|
||||
# MAP=yes
|
||||
#MAP=yes
|
||||
|
||||
# set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
|
||||
OPTIMIZE=MAXSPEED
|
||||
@ -44,6 +44,11 @@ OPTIMIZE=MAXSPEED
|
||||
# set to yes to make gvim, no for vim
|
||||
GUI=yes
|
||||
|
||||
# set to yes to enable the DLL support (EXPERIMENTAL).
|
||||
# Creates vim{32,64}.dll, and stub gvim.exe and vim.exe.
|
||||
# "GUI" should be also set to "yes".
|
||||
#VIMDLL=yes
|
||||
|
||||
# set to no if you do not want to use DirectWrite (DirectX)
|
||||
# MinGW-w64 is needed, and ARCH should be set to i686 or x86-64.
|
||||
DIRECTX=yes
|
||||
@ -687,7 +692,7 @@ else # SPEED
|
||||
CFLAGS += -O2
|
||||
endif
|
||||
endif
|
||||
CFLAGS += -s
|
||||
LFLAGS += -s
|
||||
endif
|
||||
|
||||
LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
|
||||
@ -739,7 +744,6 @@ OBJ = \
|
||||
$(OUTDIR)/ops.o \
|
||||
$(OUTDIR)/option.o \
|
||||
$(OUTDIR)/os_mswin.o \
|
||||
$(OUTDIR)/os_w32exe.o \
|
||||
$(OUTDIR)/os_win32.o \
|
||||
$(OUTDIR)/pathdef.o \
|
||||
$(OUTDIR)/popupmnu.o \
|
||||
@ -760,10 +764,17 @@ OBJ = \
|
||||
$(OUTDIR)/usercmd.o \
|
||||
$(OUTDIR)/userfunc.o \
|
||||
$(OUTDIR)/version.o \
|
||||
$(OUTDIR)/vimrc.o \
|
||||
$(OUTDIR)/winclip.o \
|
||||
$(OUTDIR)/window.o
|
||||
|
||||
ifeq ($(VIMDLL),yes)
|
||||
OBJ += $(OUTDIR)/os_w32dll.o $(OUTDIR)/vimrcd.o
|
||||
EXEOBJC = $(OUTDIR)/os_w32exec.o $(OUTDIR)/vimrcc.o
|
||||
EXEOBJG = $(OUTDIR)/os_w32exeg.o $(OUTDIR)/vimrcg.o
|
||||
else
|
||||
OBJ += $(OUTDIR)/os_w32exe.o $(OUTDIR)/vimrc.o
|
||||
endif
|
||||
|
||||
ifdef PERL
|
||||
OBJ += $(OUTDIR)/if_perl.o
|
||||
endif
|
||||
@ -870,16 +881,36 @@ endif
|
||||
|
||||
LFLAGS += -municode
|
||||
|
||||
ifeq ($(GUI),yes)
|
||||
ifeq ($(VIMDLL),yes)
|
||||
VIMEXE := vim$(DEBUG_SUFFIX).exe
|
||||
GVIMEXE := gvim$(DEBUG_SUFFIX).exe
|
||||
ifeq ($(ARCH),x86-64)
|
||||
VIMDLLBASE := vim64$(DEBUG_SUFFIX)
|
||||
else
|
||||
VIMDLLBASE := vim32$(DEBUG_SUFFIX)
|
||||
endif
|
||||
TARGET = $(VIMDLLBASE).dll
|
||||
LFLAGS += -shared
|
||||
EXELFLAGS += -municode
|
||||
ifneq ($(DEBUG),yes)
|
||||
EXELFLAGS += -s
|
||||
endif
|
||||
DEFINES += $(DEF_GUI) -DVIMDLL
|
||||
OBJ += $(GUIOBJ) $(CUIOBJ)
|
||||
OUTDIR = dobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
|
||||
MAIN_TARGET = $(GVIMEXE) $(VIMEXE) $(VIMDLLBASE).dll
|
||||
else ifeq ($(GUI),yes)
|
||||
TARGET := gvim$(DEBUG_SUFFIX).exe
|
||||
DEFINES += $(DEF_GUI)
|
||||
OBJ += $(GUIOBJ)
|
||||
LFLAGS += -mwindows
|
||||
OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
|
||||
MAIN_TARGET = $(TARGET)
|
||||
else
|
||||
OBJ += $(CUIOBJ)
|
||||
TARGET := vim$(DEBUG_SUFFIX).exe
|
||||
OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
|
||||
MAIN_TARGET = $(TARGET)
|
||||
endif
|
||||
|
||||
ifdef GETTEXT
|
||||
@ -955,7 +986,7 @@ ifeq (yes, $(MAP))
|
||||
LFLAGS += -Wl,-Map=$(TARGET).map
|
||||
endif
|
||||
|
||||
all: $(TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll
|
||||
all: $(MAIN_TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll
|
||||
|
||||
vimrun.exe: vimrun.c
|
||||
$(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
|
||||
@ -966,8 +997,19 @@ install.exe: dosinst.c
|
||||
uninstal.exe: uninstal.c
|
||||
$(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
|
||||
|
||||
ifeq ($(VIMDLL),yes)
|
||||
$(TARGET): $(OUTDIR) $(OBJ)
|
||||
$(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid -lgdi32 $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
|
||||
|
||||
$(GVIMEXE): $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
|
||||
$(CC) -L. $(EXELFLAGS) -mwindows -o $@ $(EXEOBJG) -l$(VIMDLLBASE)
|
||||
|
||||
$(VIMEXE): $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
|
||||
$(CC) -L. $(EXELFLAGS) -o $@ $(EXEOBJC) -l$(VIMDLLBASE)
|
||||
else
|
||||
$(TARGET): $(OUTDIR) $(OBJ)
|
||||
$(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
|
||||
endif
|
||||
|
||||
upx: exes
|
||||
upx gvim.exe
|
||||
@ -996,7 +1038,7 @@ clean:
|
||||
-$(DEL) $(OUTDIR)$(DIRSLASH)*.o
|
||||
-$(DEL) $(OUTDIR)$(DIRSLASH)*.res
|
||||
-rmdir $(OUTDIR)
|
||||
-$(DEL) $(TARGET) vimrun.exe install.exe uninstal.exe
|
||||
-$(DEL) $(MAIN_TARGET) vimrun.exe install.exe uninstal.exe
|
||||
-$(DEL) pathdef.c
|
||||
ifdef PERL
|
||||
-$(DEL) if_perl.c
|
||||
@ -1025,74 +1067,95 @@ $(OUTDIR)/if_python3.o: if_python3.c if_py_both.h $(INCL)
|
||||
$(OUTDIR)/%.o : %.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
|
||||
ifeq ($(VIMDLL),yes)
|
||||
$(OUTDIR)/vimrcc.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h vim.ico
|
||||
$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) -UFEAT_GUI_MSWIN \
|
||||
--input-format=rc --output-format=coff -i vim.rc -o $@
|
||||
|
||||
$(OUTDIR)/vimrcg.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h vim.ico
|
||||
$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
|
||||
--input-format=rc --output-format=coff -i vim.rc -o $@
|
||||
|
||||
$(OUTDIR)/vimrcd.o: vim.rc version.h gui_w32_rc.h \
|
||||
tools.bmp tearoff.bmp vim.ico vim_error.ico \
|
||||
vim_alert.ico vim_info.ico vim_quest.ico
|
||||
$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) -DRCDLL -DVIMDLLBASE=\\\"$(VIMDLLBASE)\\\" \
|
||||
--input-format=rc --output-format=coff -i vim.rc -o $@
|
||||
else
|
||||
$(OUTDIR)/vimrc.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
|
||||
tools.bmp tearoff.bmp vim.ico vim_error.ico \
|
||||
vim_alert.ico vim_info.ico vim_quest.ico
|
||||
$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
|
||||
--input-format=rc --output-format=coff -i vim.rc -o $@
|
||||
endif
|
||||
|
||||
$(OUTDIR):
|
||||
$(MKDIR) $(OUTDIR)
|
||||
|
||||
$(OUTDIR)/gui_dwrite.o: gui_dwrite.cpp $(INCL) gui_dwrite.h
|
||||
$(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
|
||||
$(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $@
|
||||
|
||||
$(OUTDIR)/gui.o: gui.c $(INCL) $(GUI_INCL)
|
||||
$(CC) -c $(CFLAGS) gui.c -o $(OUTDIR)/gui.o
|
||||
$(CC) -c $(CFLAGS) gui.c -o $@
|
||||
|
||||
$(OUTDIR)/beval.o: beval.c $(INCL) $(GUI_INCL)
|
||||
$(CC) -c $(CFLAGS) beval.c -o $(OUTDIR)/beval.o
|
||||
$(CC) -c $(CFLAGS) beval.c -o $@
|
||||
|
||||
$(OUTDIR)/gui_beval.o: gui_beval.c $(INCL) $(GUI_INCL)
|
||||
$(CC) -c $(CFLAGS) gui_beval.c -o $(OUTDIR)/gui_beval.o
|
||||
$(CC) -c $(CFLAGS) gui_beval.c -o $@
|
||||
|
||||
$(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL)
|
||||
$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
|
||||
$(CC) -c $(CFLAGS) gui_w32.c -o $@
|
||||
|
||||
$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
|
||||
$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
|
||||
$(CC) -c $(CFLAGS) if_cscope.c -o $@
|
||||
|
||||
$(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP)
|
||||
$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
|
||||
$(CC) -c $(CFLAGS) if_mzsch.c -o $@
|
||||
|
||||
mzscheme_base.c:
|
||||
$(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
|
||||
|
||||
# Remove -D__IID_DEFINED__ for newer versions of the w32api
|
||||
$(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) if_ole.h
|
||||
$(CC) $(CFLAGS) $(CXXFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
|
||||
$(CC) -c $(CFLAGS) $(CXXFLAGS) if_ole.cpp -o $@
|
||||
|
||||
auto/if_perl.c: if_perl.xs typemap
|
||||
$(XSUBPP) -prototypes -typemap \
|
||||
$(PERLTYPEMAP) if_perl.xs -output $@
|
||||
|
||||
$(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) auto/if_perl.c -o $(OUTDIR)/if_perl.o
|
||||
$(CC) -c $(CFLAGS) auto/if_perl.c -o $@
|
||||
|
||||
|
||||
$(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
|
||||
ifeq (16, $(RUBY))
|
||||
$(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
|
||||
$(CC) $(CFLAGS) -U_WIN32 -c -o $@ if_ruby.c
|
||||
endif
|
||||
|
||||
$(OUTDIR)/iscygpty.o: iscygpty.c $(CUI_INCL)
|
||||
$(CC) -c $(CFLAGS) iscygpty.c -o $(OUTDIR)/iscygpty.o -U_WIN32_WINNT -D_WIN32_WINNT=0x0600 -DUSE_DYNFILEID -DENABLE_STUB_IMPL
|
||||
|
||||
$(OUTDIR)/main.o: main.c $(INCL) $(CUI_INCL)
|
||||
$(CC) -c $(CFLAGS) main.c -o $(OUTDIR)/main.o
|
||||
$(CC) -c $(CFLAGS) main.c -o $@
|
||||
|
||||
$(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
|
||||
$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
|
||||
$(CC) -c $(CFLAGS) netbeans.c -o $@
|
||||
|
||||
$(OUTDIR)/os_w32exec.o: os_w32exe.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) -UFEAT_GUI_MSWIN os_w32exe.c -o $@
|
||||
|
||||
$(OUTDIR)/os_w32exeg.o: os_w32exe.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) os_w32exe.c -o $@
|
||||
|
||||
$(OUTDIR)/os_win32.o: os_win32.c $(INCL) $(MZSCHEME_INCL)
|
||||
$(CC) -c $(CFLAGS) os_win32.c -o $(OUTDIR)/os_win32.o
|
||||
$(CC) -c $(CFLAGS) os_win32.c -o $@
|
||||
|
||||
$(OUTDIR)/regexp.o: regexp.c regexp_nfa.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
|
||||
$(CC) -c $(CFLAGS) regexp.c -o $@
|
||||
|
||||
$(OUTDIR)/terminal.o: terminal.c $(INCL) $(TERM_DEPS)
|
||||
$(CC) -c $(CFLAGS) terminal.c -o $(OUTDIR)/terminal.o
|
||||
|
||||
$(OUTDIR)/textprop.o: textprop.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) textprop.c -o $(OUTDIR)/textprop.o
|
||||
$(CC) -c $(CFLAGS) terminal.c -o $@
|
||||
|
||||
|
||||
CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \
|
||||
@ -1100,50 +1163,13 @@ CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \
|
||||
-DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
|
||||
-DWCWIDTH_FUNCTION=utf_uint2cells
|
||||
|
||||
$(OUTDIR)/encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/encoding.c -o $@
|
||||
$(OUTDIR)/%.o : libvterm/src/%.c $(TERM_DEPS)
|
||||
$(CCCTERM) $< -o $@
|
||||
|
||||
$(OUTDIR)/keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/keyboard.c -o $@
|
||||
|
||||
$(OUTDIR)/mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/mouse.c -o $@
|
||||
$(OUTDIR)/%.o : xdiff/%.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OUTDIR)/parser.o: libvterm/src/parser.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/parser.c -o $@
|
||||
|
||||
$(OUTDIR)/pen.o: libvterm/src/pen.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/pen.c -o $@
|
||||
|
||||
$(OUTDIR)/termscreen.o: libvterm/src/termscreen.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/termscreen.c -o $@
|
||||
|
||||
$(OUTDIR)/state.o: libvterm/src/state.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/state.c -o $@
|
||||
|
||||
$(OUTDIR)/unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/unicode.c -o $@
|
||||
|
||||
$(OUTDIR)/vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
|
||||
$(CCCTERM) libvterm/src/vterm.c -o $@
|
||||
|
||||
$(OUTDIR)/xdiffi.o: xdiff/xdiffi.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) xdiff/xdiffi.c -o $(OUTDIR)/xdiffi.o
|
||||
|
||||
$(OUTDIR)/xemit.o: xdiff/xemit.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) xdiff/xemit.c -o $(OUTDIR)/xemit.o
|
||||
|
||||
$(OUTDIR)/xprepare.o: xdiff/xprepare.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) xdiff/xprepare.c -o $(OUTDIR)/xprepare.o
|
||||
|
||||
$(OUTDIR)/xutils.o: xdiff/xutils.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) xdiff/xutils.c -o $(OUTDIR)/xutils.o
|
||||
|
||||
$(OUTDIR)/xhistogram.o: xdiff/xhistogram.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) xdiff/xhistogram.c -o $(OUTDIR)/xhistogram.o
|
||||
|
||||
$(OUTDIR)/xpatience.o: xdiff/xpatience.c $(XDIFF_DEPS)
|
||||
$(CC) -c $(CFLAGS) xdiff/xpatience.c -o $(OUTDIR)/xpatience.o
|
||||
|
||||
pathdef.c: $(INCL)
|
||||
ifneq (sh.exe, $(SHELL))
|
||||
|
164
src/Make_mvc.mak
164
src/Make_mvc.mak
@ -40,6 +40,12 @@
|
||||
#
|
||||
# Terminal support: TERMINAL=yes (default is yes)
|
||||
#
|
||||
# DLL support (EXPERIMENTAL): VIMDLL=yes (default is no)
|
||||
# Creates vim{32,64}.dll, and stub gvim.exe and vim.exe.
|
||||
# The shared codes between the GUI and the console are built into
|
||||
# the DLL. This reduces the total file size and memory usage.
|
||||
# Also supports `vim -g` and the `:gui` command.
|
||||
#
|
||||
# Lua interface:
|
||||
# LUA=[Path to Lua directory]
|
||||
# DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
|
||||
@ -178,6 +184,10 @@
|
||||
|
||||
TARGETOS = WINNT
|
||||
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
GUI = yes
|
||||
!endif
|
||||
|
||||
!ifndef DIRECTX
|
||||
DIRECTX = $(GUI)
|
||||
!endif
|
||||
@ -185,7 +195,9 @@ DIRECTX = $(GUI)
|
||||
# Select one of eight object code directories, depends on GUI, OLE, DEBUG and
|
||||
# interfaces.
|
||||
# If you change something else, do "make clean" first!
|
||||
!if "$(GUI)" == "yes"
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
OBJDIR = .\ObjD
|
||||
!elseif "$(GUI)" == "yes"
|
||||
OBJDIR = .\ObjG
|
||||
!else
|
||||
OBJDIR = .\ObjC
|
||||
@ -410,7 +422,7 @@ CHANNEL = $(GUI)
|
||||
!endif
|
||||
!endif
|
||||
|
||||
# GUI sepcific features.
|
||||
# GUI specific features.
|
||||
!if "$(GUI)" == "yes"
|
||||
# Only allow NETBEANS for a GUI build and CHANNEL.
|
||||
!if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes"
|
||||
@ -461,7 +473,7 @@ XPM = no
|
||||
XPM_OBJ = $(OBJDIR)/xpm_w32.obj
|
||||
XPM_DEFS = -DFEAT_XPM_W32
|
||||
!if $(MSVC_MAJOR) >= 14
|
||||
# VC14 cannot use a library built by VC12 or eariler, because VC14 uses
|
||||
# VC14 cannot use a library built by VC12 or earlier, because VC14 uses
|
||||
# Universal CRT.
|
||||
XPM_LIB = $(XPM)\lib-vc14\libXpm.lib
|
||||
!else
|
||||
@ -566,7 +578,7 @@ CPUARG =
|
||||
# VC<11 generates fp87 code by default
|
||||
! if $(MSVC_MAJOR) < 11
|
||||
CPUARG =
|
||||
# VC>=11 needs explicit insturctions to generate fp87 code
|
||||
# VC>=11 needs explicit instructions to generate fp87 code
|
||||
! else
|
||||
CPUARG = /arch:IA32
|
||||
! endif
|
||||
@ -612,6 +624,17 @@ CPUARG = /arch:AVX2
|
||||
# Pass CPUARG to GvimExt, to avoid using version-dependent defaults
|
||||
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
|
||||
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
VIMDLLBASE = vim
|
||||
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
|
||||
VIMDLLBASE = $(VIMDLLBASE)32
|
||||
! else
|
||||
VIMDLLBASE = $(VIMDLLBASE)64
|
||||
! endif
|
||||
! if "$(DEBUG)" == "yes"
|
||||
VIMDLLBASE = $(VIMDLLBASE)d
|
||||
! endif
|
||||
!endif
|
||||
|
||||
LIBC =
|
||||
DEBUGINFO = /Zi
|
||||
@ -747,7 +770,6 @@ OBJ = \
|
||||
$(OUTDIR)\ops.obj \
|
||||
$(OUTDIR)\option.obj \
|
||||
$(OUTDIR)\os_mswin.obj \
|
||||
$(OUTDIR)\os_w32exe.obj \
|
||||
$(OUTDIR)\os_win32.obj \
|
||||
$(OUTDIR)\pathdef.obj \
|
||||
$(OUTDIR)\popupmnu.obj \
|
||||
@ -769,7 +791,15 @@ OBJ = \
|
||||
$(OUTDIR)\userfunc.obj \
|
||||
$(OUTDIR)\winclip.obj \
|
||||
$(OUTDIR)\window.obj \
|
||||
$(OUTDIR)\vim.res
|
||||
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
OBJ = $(OBJ) $(OUTDIR)\os_w32dll.obj $(OUTDIR)\vimd.res
|
||||
EXEOBJC = $(OUTDIR)\os_w32exec.obj $(OUTDIR)\vimc.res
|
||||
EXEOBJG = $(OUTDIR)\os_w32exeg.obj $(OUTDIR)\vimg.res
|
||||
CFLAGS = $(CFLAGS) -DVIMDLL
|
||||
!else
|
||||
OBJ = $(OBJ) $(OUTDIR)\os_w32exe.obj $(OUTDIR)\vim.res
|
||||
!endif
|
||||
|
||||
!if "$(OLE)" == "yes"
|
||||
CFLAGS = $(CFLAGS) -DFEAT_OLE
|
||||
@ -800,7 +830,15 @@ OBJ = $(OBJ) $(OUTDIR)\dimm_i.obj $(OUTDIR)\glbl_ime.obj
|
||||
SUBSYSTEM = windows
|
||||
CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN
|
||||
RCFLAGS = $(RCFLAGS) -DFEAT_GUI_MSWIN
|
||||
! if "$(VIMDLL)" == "yes"
|
||||
SUBSYSTEM_CON = console
|
||||
GVIM = g$(VIM)
|
||||
CUI_INCL = iscygpty.h
|
||||
CUI_OBJ = $(OUTDIR)\iscygpty.obj
|
||||
RCFLAGS = $(RCFLAGS) -DVIMDLL
|
||||
! else
|
||||
VIM = g$(VIM)
|
||||
! endif
|
||||
GUI_INCL = \
|
||||
gui.h
|
||||
GUI_OBJ = \
|
||||
@ -839,6 +877,9 @@ XDIFF_DEPS = \
|
||||
!if "$(SUBSYSTEM_VER)" != ""
|
||||
SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
|
||||
SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER)
|
||||
! if "$(VIMDLL)" != "yes"
|
||||
SUBSYSTEM_CON = $(SUBSYSTEM_CON),$(SUBSYSTEM_VER)
|
||||
! endif
|
||||
# Pass SUBSYSTEM_VER to GvimExt and other tools
|
||||
MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
|
||||
MAKEFLAGS_TOOLS = $(MAKEFLAGS_TOOLS) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
|
||||
@ -1174,7 +1215,11 @@ CFLAGS = $(CFLAGS) -DFEAT_$(FEATURES)
|
||||
# debug more conveniently (able to look at variables which are in registers)
|
||||
#
|
||||
CFLAGS = $(CFLAGS) /Fd$(OUTDIR)/ $(DEBUGINFO)
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
LINK_PDB = /PDB:$(VIMDLLBASE).pdb -debug
|
||||
!else
|
||||
LINK_PDB = /PDB:$(VIM).pdb -debug
|
||||
!endif
|
||||
|
||||
#
|
||||
# End extra feature include
|
||||
@ -1186,7 +1231,7 @@ CFLAGS_OUTDIR=$(CFLAGS) /Fo$(OUTDIR)/
|
||||
|
||||
# Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
|
||||
# added.
|
||||
conflags = /nologo /subsystem:$(SUBSYSTEM) /opt:ref
|
||||
conflags = /nologo /opt:ref
|
||||
|
||||
PATHDEF_SRC = $(OUTDIR)\pathdef.c
|
||||
|
||||
@ -1219,7 +1264,13 @@ LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
|
||||
LINKARGS1 = $(LINKARGS1) /HIGHENTROPYVA:NO
|
||||
!endif
|
||||
|
||||
all: $(VIM).exe \
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
MAIN_TARGET = $(GVIM).exe $(VIM).exe $(VIMDLLBASE).dll
|
||||
!else
|
||||
MAIN_TARGET = $(VIM).exe
|
||||
!endif
|
||||
|
||||
all: $(MAIN_TARGET) \
|
||||
vimrun.exe \
|
||||
install.exe \
|
||||
uninstal.exe \
|
||||
@ -1227,17 +1278,41 @@ all: $(VIM).exe \
|
||||
tee/tee.exe \
|
||||
GvimExt/gvimext.dll
|
||||
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
|
||||
$(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
|
||||
$(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
|
||||
$(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
|
||||
version.c version.h
|
||||
$(CC) $(CFLAGS_OUTDIR) version.c
|
||||
$(link) $(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
|
||||
$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
|
||||
$(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
|
||||
$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
|
||||
|
||||
$(GVIM).exe: $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
|
||||
$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC)
|
||||
if exist $(GVIM).exe.manifest mt.exe -nologo -manifest $(GVIM).exe.manifest -updateresource:$(GVIM).exe;1
|
||||
|
||||
$(VIM).exe: $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
|
||||
$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC)
|
||||
if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
|
||||
|
||||
!else
|
||||
|
||||
$(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
|
||||
$(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
|
||||
$(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
|
||||
version.c version.h
|
||||
$(CC) $(CFLAGS_OUTDIR) version.c
|
||||
$(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
|
||||
$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
|
||||
$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
|
||||
$(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
|
||||
$(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
|
||||
if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
|
||||
|
||||
!endif
|
||||
|
||||
$(VIM): $(VIM).exe
|
||||
|
||||
$(OUTDIR):
|
||||
@ -1287,6 +1362,15 @@ clean:
|
||||
- if exist $(VIM).pdb del $(VIM).pdb
|
||||
- if exist $(VIM).map del $(VIM).map
|
||||
- if exist $(VIM).ncb del $(VIM).ncb
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
- if exist $(GVIM).exe del $(GVIM).exe
|
||||
- if exist $(GVIM).map del $(GVIM).map
|
||||
- if exist $(VIMDLLBASE).dll del $(VIMDLLBASE).dll
|
||||
- if exist $(VIMDLLBASE).lib del $(VIMDLLBASE).lib
|
||||
- if exist $(VIMDLLBASE).exp del $(VIMDLLBASE).exp
|
||||
- if exist $(VIMDLLBASE).pdb del $(VIMDLLBASE).pdb
|
||||
- if exist $(VIMDLLBASE).map del $(VIMDLLBASE).map
|
||||
!endif
|
||||
- if exist vimrun.exe del vimrun.exe
|
||||
- if exist install.exe del install.exe
|
||||
- if exist uninstal.exe del uninstal.exe
|
||||
@ -1334,21 +1418,15 @@ $(NEW_TESTS):
|
||||
###########################################################################
|
||||
|
||||
# Create a default rule for transforming .c files to .obj files in $(OUTDIR)
|
||||
# Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
|
||||
!IF "$(_NMAKE_VER)" == ""
|
||||
.c{$(OUTDIR)/}.obj:
|
||||
!ELSE
|
||||
.c{$(OUTDIR)/}.obj::
|
||||
!ENDIF
|
||||
$(CC) $(CFLAGS_OUTDIR) $<
|
||||
|
||||
# Create a default rule for xdiff.
|
||||
{xdiff/}.c{$(OUTDIR)/}.obj::
|
||||
$(CC) $(CFLAGS_OUTDIR) $<
|
||||
|
||||
# Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
|
||||
# Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
|
||||
!IF "$(_NMAKE_VER)" == ""
|
||||
.cpp{$(OUTDIR)/}.obj:
|
||||
!ELSE
|
||||
.cpp{$(OUTDIR)/}.obj::
|
||||
!ENDIF
|
||||
$(CC) $(CFLAGS_OUTDIR) $<
|
||||
|
||||
$(OUTDIR)/arabic.obj: $(OUTDIR) arabic.c $(INCL)
|
||||
@ -1376,22 +1454,16 @@ $(OUTDIR)/dict.obj: $(OUTDIR) dict.c $(INCL)
|
||||
$(OUTDIR)/diff.obj: $(OUTDIR) diff.c $(INCL)
|
||||
|
||||
$(OUTDIR)/xdiffi.obj: $(OUTDIR) xdiff/xdiffi.c $(XDIFF_DEPS)
|
||||
$(CC) $(CFLAGS_OUTDIR) xdiff/xdiffi.c
|
||||
|
||||
$(OUTDIR)/xemit.obj: $(OUTDIR) xdiff/xemit.c $(XDIFF_DEPS)
|
||||
$(CC) $(CFLAGS_OUTDIR) xdiff/xemit.c
|
||||
|
||||
$(OUTDIR)/xprepare.obj: $(OUTDIR) xdiff/xprepare.c $(XDIFF_DEPS)
|
||||
$(CC) $(CFLAGS_OUTDIR) xdiff/xprepare.c
|
||||
|
||||
$(OUTDIR)/xutils.obj: $(OUTDIR) xdiff/xutils.c $(XDIFF_DEPS)
|
||||
$(CC) $(CFLAGS_OUTDIR) xdiff/xutils.c
|
||||
|
||||
$(OUTDIR)/xhistogram.obj: $(OUTDIR) xdiff/xhistogram.c $(XDIFF_DEPS)
|
||||
$(CC) $(CFLAGS_OUTDIR) xdiff/xhistogram.c
|
||||
|
||||
$(OUTDIR)/xpatience.obj: $(OUTDIR) xdiff/xpatience.c $(XDIFF_DEPS)
|
||||
$(CC) $(CFLAGS_OUTDIR) xdiff/xpatience.c
|
||||
|
||||
$(OUTDIR)/digraph.obj: $(OUTDIR) digraph.c $(INCL)
|
||||
|
||||
@ -1516,8 +1588,16 @@ $(OUTDIR)/winclip.obj: $(OUTDIR) winclip.c $(INCL)
|
||||
|
||||
$(OUTDIR)/os_win32.obj: $(OUTDIR) os_win32.c $(INCL) $(MZSCHEME_INCL)
|
||||
|
||||
$(OUTDIR)/os_w32dll.obj: $(OUTDIR) os_w32dll.c
|
||||
|
||||
$(OUTDIR)/os_w32exe.obj: $(OUTDIR) os_w32exe.c $(INCL)
|
||||
|
||||
$(OUTDIR)/os_w32exec.obj: $(OUTDIR) os_w32exe.c $(INCL)
|
||||
$(CC) $(CFLAGS:-DFEAT_GUI_MSWIN=) /Fo$@ os_w32exe.c
|
||||
|
||||
$(OUTDIR)/os_w32exeg.obj: $(OUTDIR) os_w32exe.c $(INCL)
|
||||
$(CC) $(CFLAGS) /Fo$@ os_w32exe.c
|
||||
|
||||
$(OUTDIR)/pathdef.obj: $(OUTDIR) $(PATHDEF_SRC) $(INCL)
|
||||
$(CC) $(CFLAGS_OUTDIR) $(PATHDEF_SRC)
|
||||
|
||||
@ -1560,10 +1640,25 @@ $(OUTDIR)/window.obj: $(OUTDIR) window.c $(INCL)
|
||||
$(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c
|
||||
$(CC) $(CFLAGS_OUTDIR) $(XPM_INC) xpm_w32.c
|
||||
|
||||
$(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h tools.bmp \
|
||||
tearoff.bmp vim.ico vim_error.ico \
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
$(OUTDIR)/vimc.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
|
||||
vim.ico
|
||||
$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS:-DFEAT_GUI_MSWIN=) vim.rc
|
||||
|
||||
$(OUTDIR)/vimg.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
|
||||
vim.ico
|
||||
$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc
|
||||
|
||||
$(OUTDIR)/vimd.res: $(OUTDIR) vim.rc version.h gui_w32_rc.h \
|
||||
tools.bmp tearoff.bmp vim.ico vim_error.ico \
|
||||
vim_alert.ico vim_info.ico vim_quest.ico
|
||||
$(RC) /nologo /l 0x409 /Fo$(OUTDIR)/vim.res $(RCFLAGS) vim.rc
|
||||
$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) -DRCDLL -DVIMDLLBASE=\"$(VIMDLLBASE)\" vim.rc
|
||||
!else
|
||||
$(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
|
||||
tools.bmp tearoff.bmp vim.ico vim_error.ico \
|
||||
vim_alert.ico vim_info.ico vim_quest.ico
|
||||
$(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc
|
||||
!endif
|
||||
|
||||
iid_ole.c if_ole.h vim.tlb: if_ole.idl
|
||||
midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
|
||||
@ -1583,32 +1678,27 @@ CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \
|
||||
-DWCWIDTH_FUNCTION=utf_uint2cells \
|
||||
-D_CRT_SECURE_NO_WARNINGS
|
||||
|
||||
# Create a default rule for libvterm.
|
||||
{libvterm/src/}.c{$(OUTDIR)/}.obj::
|
||||
$(CCCTERM) -Fo$(OUTDIR)/ $<
|
||||
|
||||
$(OUTDIR)/encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/encoding.c
|
||||
|
||||
$(OUTDIR)/keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/keyboard.c
|
||||
|
||||
$(OUTDIR)/mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/mouse.c
|
||||
|
||||
$(OUTDIR)/parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/parser.c
|
||||
|
||||
$(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/pen.c
|
||||
|
||||
$(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/termscreen.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/termscreen.c
|
||||
|
||||
$(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/state.c
|
||||
|
||||
$(OUTDIR)/unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/unicode.c
|
||||
|
||||
$(OUTDIR)/vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
|
||||
$(CCCTERM) -Fo$@ libvterm/src/vterm.c
|
||||
|
||||
|
||||
# $CFLAGS may contain backslashes and double quotes, escape them both.
|
||||
|
@ -5319,7 +5319,7 @@ job_still_useful(job_T *job)
|
||||
return job_need_end_check(job) || job_channel_still_useful(job);
|
||||
}
|
||||
|
||||
#if defined(GUI_MAY_FORK) || defined(PROTO)
|
||||
#if defined(GUI_MAY_FORK) || defined(GUI_MAY_SPAWN) || defined(PROTO)
|
||||
/*
|
||||
* Return TRUE when there is any running job that we care about.
|
||||
*/
|
||||
|
@ -4201,11 +4201,13 @@ f_foreground(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
||||
{
|
||||
#ifdef FEAT_GUI
|
||||
if (gui.in_use)
|
||||
{
|
||||
gui_mch_set_foreground();
|
||||
#else
|
||||
# ifdef MSWIN
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
win32_set_foreground();
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1537,7 +1537,7 @@ do_shell(
|
||||
int flags) /* may be SHELL_DOOUT when output is redirected */
|
||||
{
|
||||
buf_T *buf;
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
int save_nwr;
|
||||
#endif
|
||||
#ifdef MSWIN
|
||||
@ -1636,32 +1636,37 @@ do_shell(
|
||||
* Otherwise there is probably text on the screen that the user wants
|
||||
* to read before redrawing, so call wait_return().
|
||||
*/
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
if (cmd == NULL
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
{
|
||||
if (cmd == NULL
|
||||
# ifdef MSWIN
|
||||
|| (keep_termcap && !need_wait_return)
|
||||
|| (keep_termcap && !need_wait_return)
|
||||
# endif
|
||||
)
|
||||
{
|
||||
if (msg_silent == 0)
|
||||
redraw_later_clear();
|
||||
need_wait_return = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* If we switch screens when starttermcap() is called, we really
|
||||
* want to wait for "hit return to continue".
|
||||
*/
|
||||
save_nwr = no_wait_return;
|
||||
if (swapping_screen())
|
||||
no_wait_return = FALSE;
|
||||
)
|
||||
{
|
||||
if (msg_silent == 0)
|
||||
redraw_later_clear();
|
||||
need_wait_return = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* If we switch screens when starttermcap() is called, we
|
||||
* really want to wait for "hit return to continue".
|
||||
*/
|
||||
save_nwr = no_wait_return;
|
||||
if (swapping_screen())
|
||||
no_wait_return = FALSE;
|
||||
# ifdef AMIGA
|
||||
wait_return(term_console ? -1 : msg_silent == 0); /* see below */
|
||||
wait_return(term_console ? -1 : msg_silent == 0); // see below
|
||||
# else
|
||||
wait_return(msg_silent == 0);
|
||||
wait_return(msg_silent == 0);
|
||||
# endif
|
||||
no_wait_return = save_nwr;
|
||||
no_wait_return = save_nwr;
|
||||
}
|
||||
}
|
||||
#endif /* FEAT_GUI_MSWIN */
|
||||
|
||||
|
@ -7756,7 +7756,10 @@ ex_winpos(exarg_T *eap)
|
||||
if (*arg == NUL)
|
||||
{
|
||||
# if defined(FEAT_GUI) || defined(MSWIN)
|
||||
# ifdef FEAT_GUI
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use ? gui_mch_get_winpos(&x, &y) != FAIL :
|
||||
mch_get_winpos(&x, &y) != FAIL)
|
||||
# elif defined(FEAT_GUI)
|
||||
if (gui.in_use && gui_mch_get_winpos(&x, &y) != FAIL)
|
||||
# else
|
||||
if (mch_get_winpos(&x, &y) != FAIL)
|
||||
@ -7789,13 +7792,12 @@ ex_winpos(exarg_T *eap)
|
||||
gui_win_x = x;
|
||||
gui_win_y = y;
|
||||
}
|
||||
# ifdef HAVE_TGETENT
|
||||
# if defined(HAVE_TGETENT) || defined(VIMDLL)
|
||||
else
|
||||
# endif
|
||||
# else
|
||||
# ifdef MSWIN
|
||||
# endif
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
mch_set_winpos(x, y);
|
||||
# endif
|
||||
# endif
|
||||
# ifdef HAVE_TGETENT
|
||||
if (*T_CWP)
|
||||
@ -8239,8 +8241,11 @@ ex_redraw(exarg_T *eap)
|
||||
if (need_maketitle)
|
||||
maketitle();
|
||||
#endif
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
resize_console_buf();
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
resize_console_buf();
|
||||
#endif
|
||||
RedrawingDisabled = r;
|
||||
p_lz = p;
|
||||
|
@ -712,7 +712,8 @@
|
||||
* there is no terminal version, and on Windows we can't figure out how to
|
||||
* fork one off with :gui.
|
||||
*/
|
||||
#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_DARWIN))
|
||||
#if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) \
|
||||
|| (defined(FEAT_GUI_MAC) && !defined(MACOS_X_DARWIN))
|
||||
# define ALWAYS_USE_GUI
|
||||
#endif
|
||||
|
||||
@ -1138,8 +1139,8 @@
|
||||
* mouse shape Adjust the shape of the mouse pointer to the mode.
|
||||
*/
|
||||
#ifdef FEAT_NORMAL
|
||||
/* MS-DOS console and Win32 console can change cursor shape */
|
||||
# if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
// Win32 console can change cursor shape
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# define MCH_CURSOR_SHAPE
|
||||
# endif
|
||||
# if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) \
|
||||
@ -1263,7 +1264,8 @@
|
||||
* +balloon_eval_term Allow balloon expression evaluation in the terminal.
|
||||
*/
|
||||
#if defined(FEAT_HUGE) && defined(FEAT_TIMERS) && \
|
||||
(defined(UNIX) || defined(VMS) || (defined(MSWIN) && !defined(FEAT_GUI_MSWIN)))
|
||||
(defined(UNIX) || defined(VMS) || \
|
||||
(defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))))
|
||||
# define FEAT_BEVAL_TERM
|
||||
#endif
|
||||
|
||||
@ -1317,6 +1319,6 @@
|
||||
/*
|
||||
* +vtp: Win32 virtual console.
|
||||
*/
|
||||
#if !defined(FEAT_GUI) && defined(MSWIN)
|
||||
#if (!defined(FEAT_GUI) || defined(VIMDLL)) && defined(MSWIN)
|
||||
# define FEAT_VTP
|
||||
#endif
|
||||
|
@ -792,7 +792,10 @@ readfile(
|
||||
if (!is_not_a_term())
|
||||
{
|
||||
#ifndef ALWAYS_USE_GUI
|
||||
mch_msg(_("Vim: Reading from stdin...\n"));
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
mch_msg(_("Vim: Reading from stdin...\n"));
|
||||
#endif
|
||||
#ifdef FEAT_GUI
|
||||
/* Also write a message in the GUI window, if there is one. */
|
||||
|
@ -1626,7 +1626,11 @@ vgetc(void)
|
||||
#if defined(FEAT_GUI_MSWIN) && defined(FEAT_MENU) && defined(FEAT_TEAROFF)
|
||||
// Handle K_TEAROFF here, the caller of vgetc() doesn't need to
|
||||
// know that a menu was torn off
|
||||
if (c == K_TEAROFF)
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
gui.in_use &&
|
||||
# endif
|
||||
c == K_TEAROFF)
|
||||
{
|
||||
char_u name[200];
|
||||
int i;
|
||||
@ -3113,6 +3117,7 @@ fix_input_buffer(char_u *buf, int len)
|
||||
p += 2;
|
||||
i -= 2;
|
||||
}
|
||||
# ifndef MSWIN
|
||||
/* When the GUI is not used CSI needs to be escaped. */
|
||||
else if (!gui.in_use && p[0] == CSI)
|
||||
{
|
||||
@ -3122,12 +3127,16 @@ fix_input_buffer(char_u *buf, int len)
|
||||
*p = (int)KE_CSI;
|
||||
len += 2;
|
||||
}
|
||||
# endif
|
||||
else
|
||||
#endif
|
||||
if (p[0] == NUL || (p[0] == K_SPECIAL
|
||||
/* timeout may generate K_CURSORHOLD */
|
||||
&& (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
&& !gui.in_use
|
||||
# endif
|
||||
/* Win32 console passes modifiers */
|
||||
&& (i < 2 || p[1] != KS_MODIFIER)
|
||||
#endif
|
||||
@ -5232,20 +5241,21 @@ check_map(
|
||||
|
||||
#if defined(MSWIN) || defined(MACOS_X)
|
||||
|
||||
#define VIS_SEL (VISUAL+SELECTMODE) /* abbreviation */
|
||||
# define VIS_SEL (VISUAL+SELECTMODE) /* abbreviation */
|
||||
|
||||
/*
|
||||
* Default mappings for some often used keys.
|
||||
*/
|
||||
static struct initmap
|
||||
struct initmap
|
||||
{
|
||||
char_u *arg;
|
||||
int mode;
|
||||
} initmappings[] =
|
||||
};
|
||||
|
||||
# ifdef FEAT_GUI_MSWIN
|
||||
/* Use the Windows (CUA) keybindings. (GUI) */
|
||||
static struct initmap initmappings[] =
|
||||
{
|
||||
#if defined(MSWIN)
|
||||
/* Use the Windows (CUA) keybindings. */
|
||||
# ifdef FEAT_GUI
|
||||
/* paste, copy and cut */
|
||||
{(char_u *)"<S-Insert> \"*P", NORMAL},
|
||||
{(char_u *)"<S-Insert> \"-d\"*P", VIS_SEL},
|
||||
@ -5255,7 +5265,13 @@ static struct initmap
|
||||
{(char_u *)"<C-Del> \"*d", VIS_SEL},
|
||||
{(char_u *)"<C-X> \"*d", VIS_SEL},
|
||||
/* Missing: CTRL-C (cancel) and CTRL-V (block selection) */
|
||||
# else
|
||||
};
|
||||
# endif
|
||||
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
/* Use the Windows (CUA) keybindings. (Console) */
|
||||
static struct initmap cinitmappings[] =
|
||||
{
|
||||
{(char_u *)"\316w <C-Home>", NORMAL+VIS_SEL},
|
||||
{(char_u *)"\316w <C-Home>", INSERT+CMDLINE},
|
||||
{(char_u *)"\316u <C-End>", NORMAL+VIS_SEL},
|
||||
@ -5278,10 +5294,12 @@ static struct initmap
|
||||
{(char_u *)"\316\327 d", VIS_SEL}, /* SHIFT-Del is d */
|
||||
{(char_u *)"\316\330 d", VIS_SEL}, /* CTRL-Del is d */
|
||||
# endif
|
||||
};
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(MACOS_X)
|
||||
# if defined(MACOS_X)
|
||||
static struct initmap initmappings[] =
|
||||
{
|
||||
/* Use the Standard MacOS binding. */
|
||||
/* paste, copy and cut */
|
||||
{(char_u *)"<D-v> \"*P", NORMAL},
|
||||
@ -5290,8 +5308,8 @@ static struct initmap
|
||||
{(char_u *)"<D-c> \"*y", VIS_SEL},
|
||||
{(char_u *)"<D-x> \"*d", VIS_SEL},
|
||||
{(char_u *)"<Backspace> \"-d", VIS_SEL},
|
||||
#endif
|
||||
};
|
||||
# endif
|
||||
|
||||
# undef VIS_SEL
|
||||
#endif
|
||||
@ -5305,8 +5323,20 @@ init_mappings(void)
|
||||
#if defined(MSWIN) || defined(MACOS_X)
|
||||
int i;
|
||||
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.starting)
|
||||
# endif
|
||||
{
|
||||
for (i = 0;
|
||||
i < (int)(sizeof(cinitmappings) / sizeof(struct initmap)); ++i)
|
||||
add_map(cinitmappings[i].arg, cinitmappings[i].mode);
|
||||
}
|
||||
# endif
|
||||
# if defined(FEAT_GUI_MSWIN) || defined(MACOS_X)
|
||||
for (i = 0; i < (int)(sizeof(initmappings) / sizeof(struct initmap)); ++i)
|
||||
add_map(initmappings[i].arg, initmappings[i].mode);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1442,7 +1442,7 @@ EXTERN char e_nesting[] INIT(= N_("E22: Scripts nested too deep"));
|
||||
EXTERN char e_noalt[] INIT(= N_("E23: No alternate file"));
|
||||
EXTERN char e_noabbr[] INIT(= N_("E24: No such abbreviation"));
|
||||
EXTERN char e_nobang[] INIT(= N_("E477: No ! allowed"));
|
||||
#ifndef FEAT_GUI
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
EXTERN char e_nogvim[] INIT(= N_("E25: GUI cannot be used: Not enabled at compile time"));
|
||||
#endif
|
||||
#ifndef FEAT_RIGHTLEFT
|
||||
@ -1645,6 +1645,7 @@ EXTERN int *eval_lavars_used INIT(= NULL);
|
||||
|
||||
#ifdef MSWIN
|
||||
EXTERN int ctrl_break_was_pressed INIT(= FALSE);
|
||||
EXTERN HINSTANCE g_hinst INIT(= NULL);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_TEXT_PROP
|
||||
|
41
src/gui.c
41
src/gui.c
@ -65,10 +65,13 @@ static int disable_flush = 0; /* If > 0, gui_mch_flush() is disabled. */
|
||||
* recursive call.
|
||||
*/
|
||||
void
|
||||
gui_start(void)
|
||||
gui_start(char_u *arg UNUSED)
|
||||
{
|
||||
char_u *old_term;
|
||||
static int recursive = 0;
|
||||
#ifdef GUI_MAY_SPAWN
|
||||
char *msg = NULL;
|
||||
#endif
|
||||
|
||||
old_term = vim_strsave(T_NAME);
|
||||
|
||||
@ -97,6 +100,22 @@ gui_start(void)
|
||||
gui_do_fork();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#ifdef GUI_MAY_SPAWN
|
||||
if (gui.dospawn
|
||||
# ifdef EXPERIMENTAL_GUI_CMD
|
||||
&& gui.dofork
|
||||
# endif
|
||||
&& !vim_strchr(p_go, GO_FORG)
|
||||
&& !anyBufIsChanged()
|
||||
# ifdef FEAT_JOB_CHANNEL
|
||||
&& !job_any_running()
|
||||
# endif
|
||||
)
|
||||
{
|
||||
msg = gui_mch_do_spawn(arg);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
#ifdef FEAT_GUI_GTK
|
||||
@ -124,6 +143,10 @@ gui_start(void)
|
||||
settmode(TMODE_RAW); /* restart RAW mode */
|
||||
#ifdef FEAT_TITLE
|
||||
set_title_defaults(); /* set 'title' and 'icon' again */
|
||||
#endif
|
||||
#if defined(GUI_MAY_SPAWN) && defined(EXPERIMENTAL_GUI_CMD)
|
||||
if (msg)
|
||||
emsg(msg);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -431,7 +454,7 @@ gui_init_check(void)
|
||||
gui.scrollbar_width = gui.scrollbar_height = SB_DEFAULT_WIDTH;
|
||||
gui.prev_wrap = -1;
|
||||
|
||||
#ifdef ALWAYS_USE_GUI
|
||||
#if defined(ALWAYS_USE_GUI) || defined(VIMDLL)
|
||||
result = OK;
|
||||
#else
|
||||
# ifdef FEAT_GUI_GTK
|
||||
@ -4948,12 +4971,22 @@ ex_gui(exarg_T *eap)
|
||||
}
|
||||
if (!gui.in_use)
|
||||
{
|
||||
#if defined(VIMDLL) && !defined(EXPERIMENTAL_GUI_CMD)
|
||||
emsg(_(e_nogvim));
|
||||
return;
|
||||
#else
|
||||
/* Clear the command. Needed for when forking+exiting, to avoid part
|
||||
* of the argument ending up after the shell prompt. */
|
||||
msg_clr_eos_force();
|
||||
gui_start();
|
||||
#ifdef FEAT_JOB_CHANNEL
|
||||
# ifdef GUI_MAY_SPAWN
|
||||
if (!ends_excmd(*eap->arg))
|
||||
gui_start(eap->arg);
|
||||
else
|
||||
# endif
|
||||
gui_start(NULL);
|
||||
# ifdef FEAT_JOB_CHANNEL
|
||||
channel_gui_register_all();
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
if (!ends_excmd(*eap->arg))
|
||||
|
13
src/gui.h
13
src/gui.h
@ -237,6 +237,16 @@ typedef long guicolor_T; /* handle for a GUI color; for X11 this should
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef VIMDLL
|
||||
// Use spawn when GUI is starting.
|
||||
# define GUI_MAY_SPAWN
|
||||
|
||||
// Uncomment the next definition if you want to use the `:gui` command on
|
||||
// Windows. It uses `:mksession` to inherit the session from vim.exe to
|
||||
// gvim.exe. So, it doesn't work perfectly. (EXPERIMENTAL)
|
||||
//# define EXPERIMENTAL_GUI_CMD
|
||||
#endif
|
||||
|
||||
typedef struct Gui
|
||||
{
|
||||
int in_focus; /* Vim has input focus */
|
||||
@ -245,6 +255,9 @@ typedef struct Gui
|
||||
int shell_created; /* Has the shell been created yet? */
|
||||
int dying; /* Is vim dying? Then output to terminal */
|
||||
int dofork; /* Use fork() when GUI is starting */
|
||||
#ifdef GUI_MAY_SPAWN
|
||||
int dospawn; /* Use spawn() when GUI is starting */
|
||||
#endif
|
||||
int dragged_sb; /* Which scrollbar being dragged, if any? */
|
||||
win_T *dragged_wp; /* Which WIN's sb being dragged, if any? */
|
||||
int pointer_hidden; /* Is the mouse pointer hidden? */
|
||||
|
@ -2314,75 +2314,6 @@ sm_client_check_changed_any(GnomeClient *client UNUSED,
|
||||
gnome_interaction_key_return(key, shutdown_cancelled);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate a script that can be used to restore the current editing session.
|
||||
* Save the value of v:this_session before running :mksession in order to make
|
||||
* automagic session save fully transparent. Return TRUE on success.
|
||||
*/
|
||||
static int
|
||||
write_session_file(char_u *filename)
|
||||
{
|
||||
char_u *escaped_filename;
|
||||
char *mksession_cmdline;
|
||||
unsigned int save_ssop_flags;
|
||||
int failed;
|
||||
|
||||
/*
|
||||
* Build an ex command line to create a script that restores the current
|
||||
* session if executed. Escape the filename to avoid nasty surprises.
|
||||
*/
|
||||
escaped_filename = vim_strsave_escaped(filename, escape_chars);
|
||||
if (escaped_filename == NULL)
|
||||
return FALSE;
|
||||
mksession_cmdline = g_strconcat("mksession ", (char *)escaped_filename,
|
||||
NULL);
|
||||
vim_free(escaped_filename);
|
||||
|
||||
/*
|
||||
* Use a reasonable hardcoded set of 'sessionoptions' flags to avoid
|
||||
* unpredictable effects when the session is saved automatically. Also,
|
||||
* we definitely need SSOP_GLOBALS to be able to restore v:this_session.
|
||||
* Don't use SSOP_BUFFERS to prevent the buffer list from becoming
|
||||
* enormously large if the GNOME session feature is used regularly.
|
||||
*/
|
||||
save_ssop_flags = ssop_flags;
|
||||
ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS
|
||||
|SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES);
|
||||
|
||||
do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session");
|
||||
failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL);
|
||||
do_cmdline_cmd((char_u *)"let v:this_session = Save_VV_this_session");
|
||||
do_unlet((char_u *)"Save_VV_this_session", TRUE);
|
||||
|
||||
ssop_flags = save_ssop_flags;
|
||||
g_free(mksession_cmdline);
|
||||
|
||||
/*
|
||||
* Reopen the file and append a command to restore v:this_session,
|
||||
* as if this save never happened. This is to avoid conflicts with
|
||||
* the user's own sessions. FIXME: It's probably less hackish to add
|
||||
* a "stealth" flag to 'sessionoptions' -- gotta ask Bram.
|
||||
*/
|
||||
if (!failed)
|
||||
{
|
||||
FILE *fd;
|
||||
|
||||
fd = open_exfile(filename, TRUE, APPENDBIN);
|
||||
|
||||
failed = (fd == NULL
|
||||
|| put_line(fd, "let v:this_session = Save_VV_this_session") == FAIL
|
||||
|| put_line(fd, "unlet Save_VV_this_session") == FAIL);
|
||||
|
||||
if (fd != NULL && fclose(fd) != 0)
|
||||
failed = TRUE;
|
||||
|
||||
if (failed)
|
||||
mch_remove(filename);
|
||||
}
|
||||
|
||||
return !failed;
|
||||
}
|
||||
|
||||
/*
|
||||
* "save_yourself" signal handler. Initiate an interaction to ask the user
|
||||
* for confirmation if necessary. Save the current editing session and tell
|
||||
|
180
src/gui_w32.c
180
src/gui_w32.c
@ -320,7 +320,6 @@ static int s_findrep_is_find; // TRUE for find dialog, FALSE
|
||||
// for find/replace dialog
|
||||
#endif
|
||||
|
||||
static HINSTANCE s_hinst = NULL;
|
||||
#if !defined(FEAT_GUI)
|
||||
static
|
||||
#endif
|
||||
@ -1424,7 +1423,7 @@ gui_mch_create_scrollbar(
|
||||
10, /* Any value will do for now */
|
||||
10, /* Any value will do for now */
|
||||
s_hwnd, NULL,
|
||||
s_hinst, NULL);
|
||||
g_hinst, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2237,15 +2236,6 @@ gui_mch_draw_menubar(void)
|
||||
}
|
||||
#endif /*FEAT_MENU*/
|
||||
|
||||
#ifndef PROTO
|
||||
void
|
||||
_cdecl
|
||||
SaveInst(HINSTANCE hInst)
|
||||
{
|
||||
s_hinst = hInst;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Return the RGB value of a pixel as a long.
|
||||
*/
|
||||
@ -4839,6 +4829,141 @@ ole_error(char *arg)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(GUI_MAY_SPAWN) || defined(PROTO)
|
||||
static char *
|
||||
gvim_error(void)
|
||||
{
|
||||
char *msg = _("E988: GUI cannot be used. Cannot execute gvim.exe.");
|
||||
|
||||
if (starting)
|
||||
{
|
||||
mch_errmsg(msg);
|
||||
mch_errmsg("\n");
|
||||
mch_exit(2);
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
char *
|
||||
gui_mch_do_spawn(char_u *arg)
|
||||
{
|
||||
int len;
|
||||
# if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
|
||||
char_u *session = NULL;
|
||||
LPWSTR tofree1 = NULL;
|
||||
# endif
|
||||
WCHAR name[MAX_PATH];
|
||||
LPWSTR cmd, newcmd = NULL, p, warg, tofree2 = NULL;
|
||||
STARTUPINFOW si = {sizeof(si)};
|
||||
PROCESS_INFORMATION pi;
|
||||
|
||||
if (!GetModuleFileNameW(g_hinst, name, MAX_PATH))
|
||||
goto error;
|
||||
p = wcsrchr(name, L'\\');
|
||||
if (p == NULL)
|
||||
goto error;
|
||||
// Replace the executable name from vim(d).exe to gvim(d).exe.
|
||||
# ifdef DEBUG
|
||||
wcscpy(p + 1, L"gvimd.exe");
|
||||
# else
|
||||
wcscpy(p + 1, L"gvim.exe");
|
||||
# endif
|
||||
|
||||
# if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
|
||||
if (starting)
|
||||
# endif
|
||||
{
|
||||
// Pass the command line to the new process.
|
||||
p = GetCommandLineW();
|
||||
// Skip 1st argument.
|
||||
while (*p && *p != L' ' && *p != L'\t')
|
||||
{
|
||||
if (*p == L'"')
|
||||
{
|
||||
while (*p && *p != L'"')
|
||||
++p;
|
||||
if (*p)
|
||||
++p;
|
||||
}
|
||||
else
|
||||
++p;
|
||||
}
|
||||
cmd = p;
|
||||
}
|
||||
# if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
|
||||
else
|
||||
{
|
||||
// Create a session file and pass it to the new process.
|
||||
LPWSTR wsession;
|
||||
char_u *savebg;
|
||||
int ret;
|
||||
|
||||
session = vim_tempname('s', FALSE);
|
||||
if (session == NULL)
|
||||
goto error;
|
||||
savebg = p_bg;
|
||||
p_bg = vim_strsave((char_u *)"light"); // Set 'bg' to "light".
|
||||
ret = write_session_file(session);
|
||||
vim_free(p_bg);
|
||||
p_bg = savebg;
|
||||
if (!ret)
|
||||
goto error;
|
||||
wsession = enc_to_utf16(session, NULL);
|
||||
if (wsession == NULL)
|
||||
goto error;
|
||||
len = (int)wcslen(wsession) * 2 + 27 + 1;
|
||||
cmd = (LPWSTR)alloc(len * (int)sizeof(WCHAR));
|
||||
if (cmd == NULL)
|
||||
{
|
||||
vim_free(wsession);
|
||||
goto error;
|
||||
}
|
||||
tofree1 = cmd;
|
||||
_snwprintf(cmd, len, L" -S \"%s\" -c \"call delete('%s')\"",
|
||||
wsession, wsession);
|
||||
vim_free(wsession);
|
||||
}
|
||||
# endif
|
||||
|
||||
// Check additional arguments to the `:gui` command.
|
||||
if (arg != NULL)
|
||||
{
|
||||
warg = enc_to_utf16(arg, NULL);
|
||||
if (warg == NULL)
|
||||
goto error;
|
||||
tofree2 = warg;
|
||||
}
|
||||
else
|
||||
warg = L"";
|
||||
|
||||
// Set up the new command line.
|
||||
len = (int)wcslen(name) + (int)wcslen(cmd) + (int)wcslen(warg) + 4;
|
||||
newcmd = (LPWSTR)alloc(len * (int)sizeof(WCHAR));
|
||||
if (newcmd == NULL)
|
||||
goto error;
|
||||
_snwprintf(newcmd, len, L"\"%s\"%s %s", name, cmd, warg);
|
||||
|
||||
// Spawn a new GUI process.
|
||||
if (!CreateProcessW(NULL, newcmd, NULL, NULL, TRUE, 0,
|
||||
NULL, NULL, &si, &pi))
|
||||
goto error;
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
mch_exit(0);
|
||||
|
||||
error:
|
||||
# if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
|
||||
if (session)
|
||||
mch_remove(session);
|
||||
vim_free(session);
|
||||
vim_free(tofree1);
|
||||
# endif
|
||||
vim_free(newcmd);
|
||||
vim_free(tofree2);
|
||||
return gvim_error();
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Parse the GUI related command-line arguments. Any arguments used are
|
||||
* deleted from argv, and *argc is decremented accordingly. This is called
|
||||
@ -4957,7 +5082,7 @@ gui_mch_init(void)
|
||||
* Load the tearoff bitmap
|
||||
*/
|
||||
#ifdef FEAT_TEAROFF
|
||||
s_htearbitmap = LoadBitmap(s_hinst, "IDB_TEAROFF");
|
||||
s_htearbitmap = LoadBitmap(g_hinst, "IDB_TEAROFF");
|
||||
#endif
|
||||
|
||||
gui.scrollbar_width = GetSystemMetrics(SM_CXVSCROLL);
|
||||
@ -4971,13 +5096,13 @@ gui_mch_init(void)
|
||||
|
||||
/* First try using the wide version, so that we can use any title.
|
||||
* Otherwise only characters in the active codepage will work. */
|
||||
if (GetClassInfoW(s_hinst, szVimWndClassW, &wndclassw) == 0)
|
||||
if (GetClassInfoW(g_hinst, szVimWndClassW, &wndclassw) == 0)
|
||||
{
|
||||
wndclassw.style = CS_DBLCLKS;
|
||||
wndclassw.lpfnWndProc = _WndProc;
|
||||
wndclassw.cbClsExtra = 0;
|
||||
wndclassw.cbWndExtra = 0;
|
||||
wndclassw.hInstance = s_hinst;
|
||||
wndclassw.hInstance = g_hinst;
|
||||
wndclassw.hIcon = LoadIcon(wndclassw.hInstance, "IDR_VIM");
|
||||
wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wndclassw.hbrBackground = s_brush;
|
||||
@ -5011,7 +5136,7 @@ gui_mch_init(void)
|
||||
100, // Any value will do
|
||||
100, // Any value will do
|
||||
vim_parent_hwnd, NULL,
|
||||
s_hinst, NULL);
|
||||
g_hinst, NULL);
|
||||
#ifdef HAVE_TRY_EXCEPT
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
@ -5043,7 +5168,7 @@ gui_mch_init(void)
|
||||
100, /* Any value will do */
|
||||
100, /* Any value will do */
|
||||
NULL, NULL,
|
||||
s_hinst, NULL);
|
||||
g_hinst, NULL);
|
||||
if (s_hwnd != NULL && win_socket_id != 0)
|
||||
{
|
||||
SetParent(s_hwnd, (HWND)win_socket_id);
|
||||
@ -5062,13 +5187,13 @@ gui_mch_init(void)
|
||||
#endif
|
||||
|
||||
/* Create the text area window */
|
||||
if (GetClassInfoW(s_hinst, szTextAreaClassW, &wndclassw) == 0)
|
||||
if (GetClassInfoW(g_hinst, szTextAreaClassW, &wndclassw) == 0)
|
||||
{
|
||||
wndclassw.style = CS_OWNDC;
|
||||
wndclassw.lpfnWndProc = _TextAreaWndProc;
|
||||
wndclassw.cbClsExtra = 0;
|
||||
wndclassw.cbWndExtra = 0;
|
||||
wndclassw.hInstance = s_hinst;
|
||||
wndclassw.hInstance = g_hinst;
|
||||
wndclassw.hIcon = NULL;
|
||||
wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wndclassw.hbrBackground = NULL;
|
||||
@ -5086,7 +5211,7 @@ gui_mch_init(void)
|
||||
100, // Any value will do for now
|
||||
100, // Any value will do for now
|
||||
s_hwnd, NULL,
|
||||
s_hinst, NULL);
|
||||
g_hinst, NULL);
|
||||
|
||||
if (s_textArea == NULL)
|
||||
return FAIL;
|
||||
@ -6640,8 +6765,11 @@ gui_mch_dialog(
|
||||
|
||||
#ifndef NO_CONSOLE
|
||||
/* Don't output anything in silent mode ("ex -s") */
|
||||
if (silent_mode)
|
||||
return dfltbutton; /* return default option */
|
||||
# ifdef VIMDLL
|
||||
if (!(gui.in_use || gui.starting))
|
||||
# endif
|
||||
if (silent_mode)
|
||||
return dfltbutton; /* return default option */
|
||||
#endif
|
||||
|
||||
if (s_hwnd == NULL)
|
||||
@ -7050,7 +7178,7 @@ gui_mch_dialog(
|
||||
|
||||
/* show the dialog box modally and get a return value */
|
||||
nchar = (int)DialogBoxIndirect(
|
||||
s_hinst,
|
||||
g_hinst,
|
||||
(LPDLGTEMPLATE)pdlgtemplate,
|
||||
s_hwnd,
|
||||
(DLGPROC)dialog_callback);
|
||||
@ -7644,7 +7772,7 @@ gui_mch_tearoff(
|
||||
|
||||
/* show modelessly */
|
||||
the_menu->tearoff_handle = CreateDialogIndirectParam(
|
||||
s_hinst,
|
||||
g_hinst,
|
||||
(LPDLGTEMPLATE)pdlgtemplate,
|
||||
s_hwnd,
|
||||
(DLGPROC)tearoff_callback,
|
||||
@ -7689,7 +7817,7 @@ initialise_toolbar(void)
|
||||
WS_CHILD | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT,
|
||||
4000, //any old big number
|
||||
31, //number of images in initial bitmap
|
||||
s_hinst,
|
||||
g_hinst,
|
||||
IDR_TOOLBAR1, // id of initial bitmap
|
||||
NULL,
|
||||
0, // initial number of buttons
|
||||
@ -7790,7 +7918,7 @@ initialise_tabline(void)
|
||||
s_tabhwnd = CreateWindow(WC_TABCONTROL, "Vim tabline",
|
||||
WS_CHILD|TCS_FOCUSNEVER|TCS_TOOLTIPS,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
CW_USEDEFAULT, s_hwnd, NULL, s_hinst, NULL);
|
||||
CW_USEDEFAULT, s_hwnd, NULL, g_hinst, NULL);
|
||||
s_tabline_wndproc = SubclassWindow(s_tabhwnd, tabline_wndproc);
|
||||
|
||||
gui.tabline_height = TABLINE_HEIGHT;
|
||||
@ -8245,7 +8373,7 @@ make_tooltip(BalloonEval *beval, char *text, POINT pt)
|
||||
beval->balloon = CreateWindowExW(WS_EX_TOPMOST, TOOLTIPS_CLASSW,
|
||||
NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
beval->target, NULL, s_hinst, NULL);
|
||||
beval->target, NULL, g_hinst, NULL);
|
||||
|
||||
SetWindowPos(beval->balloon, HWND_TOPMOST, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
|
||||
|
@ -822,7 +822,7 @@ static EventLoopTimerRef timer_id = NULL;
|
||||
static EventLoopTimerUPP timerUPP;
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN /* Win32 console and Unix */
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) /* Win32 console and Unix */
|
||||
void
|
||||
mzvim_check_threads(void)
|
||||
{
|
||||
@ -1775,9 +1775,11 @@ get_option(void *data, int argc, Scheme_Object **argv)
|
||||
case -2:
|
||||
MZ_GC_UNREG();
|
||||
raise_vim_exn(_("hidden option"));
|
||||
/*NOTREACHED*/
|
||||
case -3:
|
||||
MZ_GC_UNREG();
|
||||
raise_vim_exn(_("unknown option"));
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
/* unreachable */
|
||||
return scheme_void;
|
||||
|
49
src/main.c
49
src/main.c
@ -19,7 +19,7 @@
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# include "iscygpty.h"
|
||||
#endif
|
||||
|
||||
@ -95,6 +95,9 @@ static char_u *start_dir = NULL; /* current working dir on startup */
|
||||
|
||||
static int has_dash_c_arg = FALSE;
|
||||
|
||||
# ifdef VIMDLL
|
||||
__declspec(dllexport)
|
||||
# endif
|
||||
int
|
||||
# ifdef MSWIN
|
||||
# ifdef __BORLANDC__
|
||||
@ -174,6 +177,11 @@ main
|
||||
#endif
|
||||
common_init(¶ms);
|
||||
|
||||
#ifdef VIMDLL
|
||||
// Check if the current executable file is for the GUI subsystem.
|
||||
gui.starting = mch_is_gui_executable();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_CLIENTSERVER
|
||||
/*
|
||||
* Do the client-server stuff, unless "--servername ''" was used.
|
||||
@ -292,7 +300,8 @@ main
|
||||
* For GTK we can't be sure, but when started from the desktop it doesn't
|
||||
* make sense to try using a terminal.
|
||||
*/
|
||||
#if defined(ALWAYS_USE_GUI) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)
|
||||
#if defined(ALWAYS_USE_GUI) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) \
|
||||
|| defined(VIMDLL)
|
||||
if (gui.starting
|
||||
# ifdef FEAT_GUI_GTK
|
||||
&& !isatty(2)
|
||||
@ -542,7 +551,7 @@ vim_main2(void)
|
||||
putchar('\n');
|
||||
#endif
|
||||
|
||||
gui_start(); /* will set full_screen to TRUE */
|
||||
gui_start(NULL); /* will set full_screen to TRUE */
|
||||
TIME_MSG("starting GUI");
|
||||
|
||||
/* When running "evim" or "gvim -y" we need the menus, exit if we
|
||||
@ -851,8 +860,11 @@ vim_main2(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
mch_set_winsize_now(); /* Allow winsize changes from now on */
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
mch_set_winsize_now(); /* Allow winsize changes from now on */
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_GUI)
|
||||
@ -1760,8 +1772,16 @@ parse_command_name(mparm_T *parmp)
|
||||
main_start_gui();
|
||||
#ifdef FEAT_GUI
|
||||
++initstr;
|
||||
#endif
|
||||
#ifdef GUI_MAY_SPAWN
|
||||
gui.dospawn = FALSE; // No need to spawn a new process.
|
||||
#endif
|
||||
}
|
||||
#ifdef GUI_MAY_SPAWN
|
||||
else
|
||||
gui.dospawn = TRUE; // Not "gvim". Need to spawn gvim.exe.
|
||||
#endif
|
||||
|
||||
|
||||
if (STRNICMP(initstr, "view", 4) == 0)
|
||||
{
|
||||
@ -2181,7 +2201,7 @@ command_line_scan(mparm_T *parmp)
|
||||
|
||||
case 'v': /* "-v" Vi-mode (as if called "vi") */
|
||||
exmode_active = 0;
|
||||
#ifdef FEAT_GUI
|
||||
#if defined(FEAT_GUI) && !defined(VIMDLL)
|
||||
gui.starting = FALSE; /* don't start GUI */
|
||||
#endif
|
||||
break;
|
||||
@ -2558,8 +2578,12 @@ check_tty(mparm_T *parmp)
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
if (is_cygpty_used())
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
!gui.starting &&
|
||||
# endif
|
||||
is_cygpty_used())
|
||||
{
|
||||
# if defined(HAVE_BIND_TEXTDOMAIN_CODESET) \
|
||||
&& defined(FEAT_GETTEXT)
|
||||
@ -3440,8 +3464,13 @@ usage(void)
|
||||
main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
|
||||
#endif
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
|
||||
main_msg(_("--windowid <HWND>\tOpen Vim inside another win32 widget"));
|
||||
# ifdef VIMDLL
|
||||
if (gui.starting)
|
||||
# endif
|
||||
{
|
||||
main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
|
||||
main_msg(_("--windowid <HWND>\tOpen Vim inside another win32 widget"));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_GUI_GNOME
|
||||
|
@ -4392,7 +4392,7 @@ enc_alias_search(char_u *name)
|
||||
# include <langinfo.h>
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
/*
|
||||
* Get the canonicalized encoding from the specified locale string "locale"
|
||||
* or from the environment variables LC_ALL, LC_CTYPE and LANG.
|
||||
|
@ -4798,7 +4798,7 @@ findswapname(
|
||||
// the messages displayed in the Vim window when
|
||||
// loading a session from the .gvimrc file.
|
||||
if (gui.starting && !gui.in_use)
|
||||
gui_start();
|
||||
gui_start(NULL);
|
||||
#endif
|
||||
// Show info about the existing swap file.
|
||||
attention_message(buf, fname);
|
||||
|
116
src/message.c
116
src/message.c
@ -2563,8 +2563,12 @@ t_puts(
|
||||
msg_use_printf(void)
|
||||
{
|
||||
return (!msg_check_screen()
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
|| (!gui.in_use && !termcap_active)
|
||||
# else
|
||||
|| !termcap_active
|
||||
# endif
|
||||
#endif
|
||||
|| (swapping_screen() && !termcap_active)
|
||||
);
|
||||
@ -2940,15 +2944,10 @@ do_more_prompt(int typed_char)
|
||||
# undef mch_msg
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Give an error message. To be used when the screen hasn't been initialized
|
||||
* yet. When stderr can't be used, collect error messages until the GUI has
|
||||
* started and they can be displayed in a message box.
|
||||
*/
|
||||
void
|
||||
mch_errmsg(char *str)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
static void
|
||||
mch_errmsg_c(char *str)
|
||||
{
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
int len = (int)STRLEN(str);
|
||||
DWORD nwrite = 0;
|
||||
DWORD mode = 0;
|
||||
@ -2966,34 +2965,57 @@ mch_errmsg(char *str)
|
||||
{
|
||||
fprintf(stderr, "%s", str);
|
||||
}
|
||||
#else
|
||||
int len;
|
||||
}
|
||||
#endif
|
||||
|
||||
# if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
|
||||
/*
|
||||
* Give an error message. To be used when the screen hasn't been initialized
|
||||
* yet. When stderr can't be used, collect error messages until the GUI has
|
||||
* started and they can be displayed in a message box.
|
||||
*/
|
||||
void
|
||||
mch_errmsg(char *str)
|
||||
{
|
||||
#if !defined(MSWIN) || defined(FEAT_GUI_MSWIN)
|
||||
int len;
|
||||
#endif
|
||||
|
||||
#if (defined(UNIX) || defined(FEAT_GUI)) && (!defined(ALWAYS_USE_GUI) || !defined(VIMDLL))
|
||||
/* On Unix use stderr if it's a tty.
|
||||
* When not going to start the GUI also use stderr.
|
||||
* On Mac, when started from Finder, stderr is the console. */
|
||||
if (
|
||||
# ifdef UNIX
|
||||
# ifdef MACOS_X
|
||||
# ifdef UNIX
|
||||
# ifdef MACOS_X
|
||||
(isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
|
||||
# else
|
||||
# else
|
||||
isatty(2)
|
||||
# endif
|
||||
# ifdef FEAT_GUI
|
||||
||
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FEAT_GUI
|
||||
!(gui.in_use || gui.starting)
|
||||
||
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FEAT_GUI
|
||||
!(gui.in_use || gui.starting)
|
||||
# endif
|
||||
)
|
||||
{
|
||||
fprintf(stderr, "%s", str);
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!(gui.in_use || gui.starting))
|
||||
# endif
|
||||
{
|
||||
mch_errmsg_c(str);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(MSWIN) || defined(FEAT_GUI_MSWIN)
|
||||
/* avoid a delay for a message that isn't there */
|
||||
emsg_on_display = FALSE;
|
||||
|
||||
@ -3028,15 +3050,10 @@ mch_errmsg(char *str)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Give a message. To be used when the screen hasn't been initialized yet.
|
||||
* When there is no tty, collect messages until the GUI has started and they
|
||||
* can be displayed in a message box.
|
||||
*/
|
||||
void
|
||||
mch_msg(char *str)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
static void
|
||||
mch_msg_c(char *str)
|
||||
{
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
int len = (int)STRLEN(str);
|
||||
DWORD nwrite = 0;
|
||||
DWORD mode;
|
||||
@ -3055,32 +3072,53 @@ mch_msg(char *str)
|
||||
{
|
||||
printf("%s", str);
|
||||
}
|
||||
#else
|
||||
# if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Give a message. To be used when the screen hasn't been initialized yet.
|
||||
* When there is no tty, collect messages until the GUI has started and they
|
||||
* can be displayed in a message box.
|
||||
*/
|
||||
void
|
||||
mch_msg(char *str)
|
||||
{
|
||||
#if (defined(UNIX) || defined(FEAT_GUI)) && (!defined(ALWAYS_USE_GUI) || !defined(VIMDLL))
|
||||
/* On Unix use stdout if we have a tty. This allows "vim -h | more" and
|
||||
* uses mch_errmsg() when started from the desktop.
|
||||
* When not going to start the GUI also use stdout.
|
||||
* On Mac, when started from Finder, stderr is the console. */
|
||||
if (
|
||||
# ifdef UNIX
|
||||
# ifdef MACOS_X
|
||||
# ifdef UNIX
|
||||
# ifdef MACOS_X
|
||||
(isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
|
||||
# else
|
||||
# else
|
||||
isatty(2)
|
||||
# endif
|
||||
# ifdef FEAT_GUI
|
||||
||
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FEAT_GUI
|
||||
!(gui.in_use || gui.starting)
|
||||
||
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FEAT_GUI
|
||||
!(gui.in_use || gui.starting)
|
||||
# endif
|
||||
)
|
||||
{
|
||||
printf("%s", str);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!(gui.in_use || gui.starting))
|
||||
# endif
|
||||
{
|
||||
mch_msg_c(str);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if !defined(MSWIN) || defined(FEAT_GUI_MSWIN)
|
||||
mch_errmsg(str);
|
||||
#endif
|
||||
}
|
||||
|
77
src/misc2.c
77
src/misc2.c
@ -4650,3 +4650,80 @@ build_argv_from_list(list_T *l, char ***argv, int *argc)
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_SESSION) || defined(PROTO)
|
||||
/*
|
||||
* Generate a script that can be used to restore the current editing session.
|
||||
* Save the value of v:this_session before running :mksession in order to make
|
||||
* automagic session save fully transparent. Return TRUE on success.
|
||||
*/
|
||||
int
|
||||
write_session_file(char_u *filename)
|
||||
{
|
||||
char_u *escaped_filename;
|
||||
char *mksession_cmdline;
|
||||
unsigned int save_ssop_flags;
|
||||
int failed;
|
||||
|
||||
/*
|
||||
* Build an ex command line to create a script that restores the current
|
||||
* session if executed. Escape the filename to avoid nasty surprises.
|
||||
*/
|
||||
escaped_filename = vim_strsave_escaped(filename, escape_chars);
|
||||
if (escaped_filename == NULL)
|
||||
return FALSE;
|
||||
mksession_cmdline = (char *)alloc(10 + (int)STRLEN(escaped_filename) + 1);
|
||||
if (mksession_cmdline == NULL)
|
||||
{
|
||||
vim_free(escaped_filename);
|
||||
return FALSE;
|
||||
}
|
||||
strcpy(mksession_cmdline, "mksession ");
|
||||
STRCAT(mksession_cmdline, escaped_filename);
|
||||
vim_free(escaped_filename);
|
||||
|
||||
/*
|
||||
* Use a reasonable hardcoded set of 'sessionoptions' flags to avoid
|
||||
* unpredictable effects when the session is saved automatically. Also,
|
||||
* we definitely need SSOP_GLOBALS to be able to restore v:this_session.
|
||||
* Don't use SSOP_BUFFERS to prevent the buffer list from becoming
|
||||
* enormously large if the GNOME session feature is used regularly.
|
||||
*/
|
||||
save_ssop_flags = ssop_flags;
|
||||
ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS
|
||||
|SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES);
|
||||
|
||||
do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session");
|
||||
failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL);
|
||||
do_cmdline_cmd((char_u *)"let v:this_session = Save_VV_this_session");
|
||||
do_unlet((char_u *)"Save_VV_this_session", TRUE);
|
||||
|
||||
ssop_flags = save_ssop_flags;
|
||||
vim_free(mksession_cmdline);
|
||||
|
||||
/*
|
||||
* Reopen the file and append a command to restore v:this_session,
|
||||
* as if this save never happened. This is to avoid conflicts with
|
||||
* the user's own sessions. FIXME: It's probably less hackish to add
|
||||
* a "stealth" flag to 'sessionoptions' -- gotta ask Bram.
|
||||
*/
|
||||
if (!failed)
|
||||
{
|
||||
FILE *fd;
|
||||
|
||||
fd = open_exfile(filename, TRUE, APPENDBIN);
|
||||
|
||||
failed = (fd == NULL
|
||||
|| put_line(fd, "let v:this_session = Save_VV_this_session") == FAIL
|
||||
|| put_line(fd, "unlet Save_VV_this_session") == FAIL);
|
||||
|
||||
if (fd != NULL && fclose(fd) != 0)
|
||||
failed = TRUE;
|
||||
|
||||
if (failed)
|
||||
mch_remove(filename);
|
||||
}
|
||||
|
||||
return !failed;
|
||||
}
|
||||
#endif
|
||||
|
@ -5394,8 +5394,11 @@ nv_clear(cmdarg_T *cap)
|
||||
# endif
|
||||
#endif
|
||||
redraw_later(CLEAR);
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
resize_console_buf();
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
resize_console_buf();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
23
src/option.c
23
src/option.c
@ -3321,9 +3321,7 @@ set_init_1(int clean_arg)
|
||||
if (((p = mch_getenv((char_u *)"SHELL")) != NULL && *p != NUL)
|
||||
#if defined(MSWIN)
|
||||
|| ((p = mch_getenv((char_u *)"COMSPEC")) != NULL && *p != NUL)
|
||||
# ifdef MSWIN
|
||||
|| ((p = (char_u *)default_shell()) != NULL && *p != NUL)
|
||||
# endif
|
||||
#endif
|
||||
)
|
||||
set_string_default_esc("sh", p, TRUE);
|
||||
@ -3673,10 +3671,14 @@ set_init_1(int clean_arg)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
/* Win32 console: When GetACP() returns a different value from
|
||||
* GetConsoleCP() set 'termencoding'. */
|
||||
if (GetACP() != GetConsoleCP())
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
(!gui.in_use && !gui.starting) &&
|
||||
# endif
|
||||
GetACP() != GetConsoleCP())
|
||||
{
|
||||
char buf[50];
|
||||
|
||||
@ -6856,11 +6858,14 @@ did_set_string_option(
|
||||
{
|
||||
out_str(T_ME);
|
||||
redraw_later(CLEAR);
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
/* Since t_me has been set, this probably means that the user
|
||||
* wants to use this as default colors. Need to reset default
|
||||
* background/foreground colors. */
|
||||
mch_set_normal_colors();
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use && !gui.starting)
|
||||
# endif
|
||||
mch_set_normal_colors();
|
||||
#endif
|
||||
}
|
||||
if (varp == &T_BE && termcap_active)
|
||||
@ -8838,7 +8843,11 @@ set_bool_option(
|
||||
{
|
||||
# ifdef FEAT_VTP
|
||||
/* Do not turn on 'tgc' when 24-bit colors are not supported. */
|
||||
if (!has_vtp_working())
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
!gui.in_use && !gui.starting &&
|
||||
# endif
|
||||
!has_vtp_working())
|
||||
{
|
||||
p_tgc = 0;
|
||||
return N_("E954: 24-bit colors are not supported on this environment");
|
||||
|
169
src/os_mswin.c
169
src/os_mswin.c
@ -129,7 +129,7 @@ typedef void VOID;
|
||||
FILE* fdDump = NULL;
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
extern char g_szOrigTitle[];
|
||||
#endif
|
||||
|
||||
@ -195,6 +195,17 @@ int _stricoll(char *a, char *b)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef PROTO
|
||||
/*
|
||||
* Save the instance handle of the exe/dll.
|
||||
*/
|
||||
void
|
||||
SaveInst(HINSTANCE hInst)
|
||||
{
|
||||
g_hinst = hInst;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_GUI_MSWIN) || defined(PROTO)
|
||||
/*
|
||||
* GUI version of mch_exit().
|
||||
@ -202,7 +213,7 @@ int _stricoll(char *a, char *b)
|
||||
* Careful: mch_exit() may be called before mch_init()!
|
||||
*/
|
||||
void
|
||||
mch_exit(int r)
|
||||
mch_exit_g(int r)
|
||||
{
|
||||
exiting = TRUE;
|
||||
|
||||
@ -262,8 +273,12 @@ mch_early_init(void)
|
||||
mch_input_isatty(void)
|
||||
{
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
return OK; /* GUI always has a tty */
|
||||
#else
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
# endif
|
||||
return TRUE; /* GUI always has a tty */
|
||||
#endif
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
if (isatty(read_cmd_fd))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
@ -280,8 +295,15 @@ mch_settitle(
|
||||
char_u *icon)
|
||||
{
|
||||
# ifdef FEAT_GUI_MSWIN
|
||||
gui_mch_settitle(title, icon);
|
||||
# else
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
# endif
|
||||
{
|
||||
gui_mch_settitle(title, icon);
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
# if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
if (title != NULL)
|
||||
{
|
||||
WCHAR *wp = enc_to_utf16(title, NULL);
|
||||
@ -307,8 +329,11 @@ mch_settitle(
|
||||
void
|
||||
mch_restore_title(int which UNUSED)
|
||||
{
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
SetConsoleTitle(g_szOrigTitle);
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
SetConsoleTitle(g_szOrigTitle);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -554,7 +579,7 @@ vim_stat(const char *name, stat_T *stp)
|
||||
return n;
|
||||
}
|
||||
|
||||
#if defined(FEAT_GUI_MSWIN) || defined(PROTO)
|
||||
#if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(PROTO)
|
||||
void
|
||||
mch_settmode(int tmode UNUSED)
|
||||
{
|
||||
@ -596,45 +621,48 @@ mch_suspend(void)
|
||||
|
||||
#if defined(USE_MCH_ERRMSG) || defined(PROTO)
|
||||
|
||||
#ifdef display_errors
|
||||
# undef display_errors
|
||||
#endif
|
||||
# ifdef display_errors
|
||||
# undef display_errors
|
||||
# endif
|
||||
|
||||
#ifdef FEAT_GUI
|
||||
/*
|
||||
* Display the saved error message(s).
|
||||
*/
|
||||
void
|
||||
display_errors(void)
|
||||
{
|
||||
# ifdef FEAT_GUI
|
||||
char *p;
|
||||
|
||||
if (error_ga.ga_data != NULL)
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use || gui.starting)
|
||||
# endif
|
||||
{
|
||||
/* avoid putting up a message box with blanks only */
|
||||
for (p = (char *)error_ga.ga_data; *p; ++p)
|
||||
if (!isspace(*p))
|
||||
{
|
||||
(void)gui_mch_dialog(
|
||||
if (error_ga.ga_data != NULL)
|
||||
{
|
||||
/* avoid putting up a message box with blanks only */
|
||||
for (p = (char *)error_ga.ga_data; *p; ++p)
|
||||
if (!isspace(*p))
|
||||
{
|
||||
(void)gui_mch_dialog(
|
||||
gui.starting ? VIM_INFO :
|
||||
VIM_ERROR,
|
||||
gui.starting ? (char_u *)_("Message") :
|
||||
(char_u *)_("Error"),
|
||||
(char_u *)p, (char_u *)_("&Ok"),
|
||||
1, NULL, FALSE);
|
||||
break;
|
||||
}
|
||||
ga_clear(&error_ga);
|
||||
break;
|
||||
}
|
||||
ga_clear(&error_ga);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
#else
|
||||
void
|
||||
display_errors(void)
|
||||
{
|
||||
# endif
|
||||
# if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
FlushFileBuffers(GetStdHandle(STD_ERROR_HANDLE));
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
@ -717,7 +745,7 @@ mch_chdir(char *path)
|
||||
}
|
||||
|
||||
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
#if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
|
||||
/*
|
||||
* return non-zero if a character is available
|
||||
*/
|
||||
@ -955,7 +983,7 @@ Trace(
|
||||
|
||||
#endif //_DEBUG
|
||||
|
||||
#if !defined(FEAT_GUI) || defined(PROTO)
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL) || defined(PROTO)
|
||||
# ifdef FEAT_TITLE
|
||||
extern HWND g_hWnd; /* This is in os_win32.c. */
|
||||
# endif
|
||||
@ -1121,8 +1149,11 @@ PrintDlgProc(
|
||||
VIM_CLEAR(prt_name);
|
||||
}
|
||||
EnableMenuItem(GetSystemMenu(hDlg, FALSE), SC_CLOSE, MF_GRAYED);
|
||||
#ifndef FEAT_GUI
|
||||
BringWindowToTop(s_hwnd);
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
BringWindowToTop(s_hwnd);
|
||||
#endif
|
||||
return TRUE;
|
||||
|
||||
@ -1155,7 +1186,7 @@ AbortProc(HDC hdcPrn UNUSED, int iCode UNUSED)
|
||||
return !*bUserAbort;
|
||||
}
|
||||
|
||||
#ifndef FEAT_GUI
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
|
||||
static UINT_PTR CALLBACK
|
||||
PrintHookProc(
|
||||
@ -1349,8 +1380,11 @@ mch_print_init(prt_settings_T *psettings, char_u *jobname, int forceit)
|
||||
bUserAbort = &(psettings->user_abort);
|
||||
vim_memset(&prt_dlg, 0, sizeof(PRINTDLGW));
|
||||
prt_dlg.lStructSize = sizeof(PRINTDLGW);
|
||||
#ifndef FEAT_GUI
|
||||
GetConsoleHwnd(); /* get value of s_hwnd */
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
GetConsoleHwnd(); /* get value of s_hwnd */
|
||||
#endif
|
||||
prt_dlg.hwndOwner = s_hwnd;
|
||||
prt_dlg.Flags = PD_NOPAGENUMS | PD_NOSELECTION | PD_RETURNDC;
|
||||
@ -1359,12 +1393,17 @@ mch_print_init(prt_settings_T *psettings, char_u *jobname, int forceit)
|
||||
prt_dlg.hDevMode = stored_dm;
|
||||
prt_dlg.hDevNames = stored_devn;
|
||||
prt_dlg.lCustData = stored_nCopies; // work around bug in print dialog
|
||||
#ifndef FEAT_GUI
|
||||
/*
|
||||
* Use hook to prevent console window being sent to back
|
||||
*/
|
||||
prt_dlg.lpfnPrintHook = PrintHookProc;
|
||||
prt_dlg.Flags |= PD_ENABLEPRINTHOOK;
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
{
|
||||
/*
|
||||
* Use hook to prevent console window being sent to back
|
||||
*/
|
||||
prt_dlg.lpfnPrintHook = PrintHookProc;
|
||||
prt_dlg.Flags |= PD_ENABLEPRINTHOOK;
|
||||
}
|
||||
#endif
|
||||
prt_dlg.Flags |= stored_nFlags;
|
||||
}
|
||||
@ -1374,8 +1413,12 @@ mch_print_init(prt_settings_T *psettings, char_u *jobname, int forceit)
|
||||
* never show dialog if we are running over telnet
|
||||
*/
|
||||
if (forceit
|
||||
#ifndef FEAT_GUI
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
|| (!gui.in_use && !term_console)
|
||||
# else
|
||||
|| !term_console
|
||||
# endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
@ -1548,7 +1591,7 @@ mch_print_begin(prt_settings_T *psettings)
|
||||
char szBuffer[300];
|
||||
WCHAR *wp;
|
||||
|
||||
hDlgPrint = CreateDialog(GetModuleHandle(NULL), TEXT("PrintDlgBox"),
|
||||
hDlgPrint = CreateDialog(g_hinst, TEXT("PrintDlgBox"),
|
||||
prt_dlg.hwndOwner, PrintDlgProc);
|
||||
SetAbortProc(prt_dlg.hDC, AbortProc);
|
||||
wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
|
||||
@ -1568,7 +1611,10 @@ mch_print_begin(prt_settings_T *psettings)
|
||||
|
||||
#ifdef FEAT_GUI
|
||||
/* Give focus back to main window (when using MDI). */
|
||||
SetFocus(s_hwnd);
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
# endif
|
||||
SetFocus(s_hwnd);
|
||||
#endif
|
||||
|
||||
return (ret > 0);
|
||||
@ -1927,16 +1973,14 @@ mch_resolve_path(char_u *fname, int reparse_point)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (defined(FEAT_EVAL) && !defined(FEAT_GUI)) || defined(PROTO)
|
||||
#if (defined(FEAT_EVAL) && (!defined(FEAT_GUI) || defined(VIMDLL))) || defined(PROTO)
|
||||
/*
|
||||
* Bring ourselves to the foreground. Does work if the OS doesn't allow it.
|
||||
*/
|
||||
void
|
||||
win32_set_foreground(void)
|
||||
{
|
||||
# ifndef FEAT_GUI
|
||||
GetConsoleHwnd(); /* get value of s_hwnd */
|
||||
# endif
|
||||
if (s_hwnd != 0)
|
||||
SetForegroundWindow(s_hwnd);
|
||||
}
|
||||
@ -2078,8 +2122,11 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
# ifdef FEAT_GUI
|
||||
/* Wake up the main GUI loop. */
|
||||
if (s_hwnd != 0)
|
||||
PostMessage(s_hwnd, WM_NULL, 0, 0);
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
# endif
|
||||
if (s_hwnd != 0)
|
||||
PostMessage(s_hwnd, WM_NULL, 0, 0);
|
||||
# endif
|
||||
return 1;
|
||||
|
||||
@ -2145,8 +2192,11 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
/* When the message window is activated (brought to the foreground),
|
||||
* this actually applies to the text window. */
|
||||
#ifndef FEAT_GUI
|
||||
GetConsoleHwnd(); /* get value of s_hwnd */
|
||||
#if !defined(FEAT_GUI) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
GetConsoleHwnd(); /* get value of s_hwnd */
|
||||
#endif
|
||||
if (s_hwnd != 0)
|
||||
{
|
||||
@ -2166,7 +2216,6 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
serverInitMessaging(void)
|
||||
{
|
||||
WNDCLASS wndclass;
|
||||
HINSTANCE s_hinst;
|
||||
|
||||
/* Clean up on exit */
|
||||
atexit(CleanUpMessaging);
|
||||
@ -2174,12 +2223,11 @@ serverInitMessaging(void)
|
||||
/* Register a window class - we only really care
|
||||
* about the window procedure
|
||||
*/
|
||||
s_hinst = (HINSTANCE)GetModuleHandle(0);
|
||||
wndclass.style = 0;
|
||||
wndclass.lpfnWndProc = Messaging_WndProc;
|
||||
wndclass.cbClsExtra = 0;
|
||||
wndclass.cbWndExtra = 0;
|
||||
wndclass.hInstance = s_hinst;
|
||||
wndclass.hInstance = g_hinst;
|
||||
wndclass.hIcon = NULL;
|
||||
wndclass.hCursor = NULL;
|
||||
wndclass.hbrBackground = NULL;
|
||||
@ -2194,7 +2242,7 @@ serverInitMessaging(void)
|
||||
WS_POPUPWINDOW | WS_CAPTION,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
100, 100, NULL, NULL,
|
||||
s_hinst, NULL);
|
||||
g_hinst, NULL);
|
||||
}
|
||||
|
||||
/* Used by serverSendToVim() to find an alternate server name. */
|
||||
@ -2744,12 +2792,11 @@ static const LOGFONTW s_lfDefault =
|
||||
L"Fixedsys" /* see _ReadVimIni */
|
||||
};
|
||||
|
||||
/* Initialise the "current height" to -12 (same as s_lfDefault) just
|
||||
* in case the user specifies a font in "guifont" with no size before a font
|
||||
* with an explicit size has been set. This defaults the size to this value
|
||||
* (-12 equates to roughly 9pt).
|
||||
*/
|
||||
int current_font_height = -12; /* also used in gui_w48.c */
|
||||
// Initialise the "current height" to -12 (same as s_lfDefault) just
|
||||
// in case the user specifies a font in "guifont" with no size before a font
|
||||
// with an explicit size has been set. This defaults the size to this value
|
||||
// (-12 equates to roughly 9pt).
|
||||
int current_font_height = -12; // also used in gui_w32.c
|
||||
|
||||
/* Convert a string representing a point size into pixels. The string should
|
||||
* be a positive decimal number, with an optional decimal point (eg, "12", or
|
||||
|
27
src/os_w32dll.c
Normal file
27
src/os_w32dll.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* vi:set ts=8 sts=4 sw=4 noet:
|
||||
*
|
||||
* VIM - Vi IMproved by Bram Moolenaar
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
/*
|
||||
* Windows GUI: main program (DLL) entry point:
|
||||
*
|
||||
* Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code.
|
||||
* Adapted by Ken Takata.
|
||||
*/
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
|
||||
void SaveInst(HINSTANCE hInst);
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||
{
|
||||
if (fdwReason == DLL_PROCESS_ATTACH)
|
||||
SaveInst(hinstDLL);
|
||||
return TRUE;
|
||||
}
|
@ -22,8 +22,11 @@
|
||||
#endif
|
||||
|
||||
// cproto doesn't create a prototype for VimMain()
|
||||
#ifdef VIMDLL
|
||||
__declspec(dllimport)
|
||||
#endif
|
||||
int _cdecl VimMain(int argc, char **argv);
|
||||
#ifdef FEAT_GUI
|
||||
#ifndef VIMDLL
|
||||
void _cdecl SaveInst(HINSTANCE hInst);
|
||||
#endif
|
||||
|
||||
@ -40,8 +43,12 @@ wWinMain(
|
||||
wmain(int argc UNUSED, wchar_t **argv UNUSED)
|
||||
# endif
|
||||
{
|
||||
# ifdef FEAT_GUI
|
||||
# ifndef VIMDLL
|
||||
# ifdef FEAT_GUI
|
||||
SaveInst(hInstance);
|
||||
# else
|
||||
SaveInst(GetModuleHandleW(NULL));
|
||||
# endif
|
||||
# endif
|
||||
VimMain(0, NULL);
|
||||
|
||||
|
256
src/os_win32.c
256
src/os_win32.c
@ -151,7 +151,7 @@ typedef int LPSECURITY_ATTRIBUTES;
|
||||
# define wcsicmp(a, b) wcscmpi((a), (b))
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
/* Win32 Console handles for input and output */
|
||||
static HANDLE g_hConIn = INVALID_HANDLE_VALUE;
|
||||
static HANDLE g_hConOut = INVALID_HANDLE_VALUE;
|
||||
@ -179,7 +179,8 @@ static void gotoxy(unsigned x, unsigned y);
|
||||
static void standout(void);
|
||||
static int s_cursor_visible = TRUE;
|
||||
static int did_create_conin = FALSE;
|
||||
#else
|
||||
#endif
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
static int s_dont_use_vimrun = TRUE;
|
||||
static int need_vimrun_warning = FALSE;
|
||||
static char *vimrun_path = "vimrun ";
|
||||
@ -193,7 +194,7 @@ static int conpty_working = 0;
|
||||
static int conpty_stable = 0;
|
||||
static void vtp_flag_init();
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
static int vtp_working = 0;
|
||||
static void vtp_init();
|
||||
static void vtp_exit();
|
||||
@ -227,7 +228,7 @@ static void reset_console_color_rgb(void);
|
||||
# define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
static int suppress_winsize = 1; /* don't fiddle with console */
|
||||
#endif
|
||||
|
||||
@ -235,7 +236,7 @@ static char_u *exe_path = NULL;
|
||||
|
||||
static BOOL win8_or_later = FALSE;
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
/* Dynamic loading for portability */
|
||||
typedef struct _DYN_CONSOLE_SCREEN_BUFFER_INFOEX
|
||||
{
|
||||
@ -284,7 +285,7 @@ get_build_number(void)
|
||||
return ver;
|
||||
}
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
/*
|
||||
* Version of ReadConsoleInput() that works with IME.
|
||||
* Works around problems on Windows 8.
|
||||
@ -496,6 +497,28 @@ vimLoadLib(char *name)
|
||||
return dll;
|
||||
}
|
||||
|
||||
#if defined(VIMDLL) || defined(PROTO)
|
||||
/*
|
||||
* Check if the current executable file is for the GUI subsystem.
|
||||
*/
|
||||
int
|
||||
mch_is_gui_executable(void)
|
||||
{
|
||||
PBYTE pImage = (PBYTE)GetModuleHandle(NULL);
|
||||
PIMAGE_DOS_HEADER pDOS = (PIMAGE_DOS_HEADER)pImage;
|
||||
PIMAGE_NT_HEADERS pPE;
|
||||
|
||||
if (pDOS->e_magic != IMAGE_DOS_SIGNATURE)
|
||||
return FALSE;
|
||||
pPE = (PIMAGE_NT_HEADERS)(pImage + pDOS->e_lfanew);
|
||||
if (pPE->Signature != IMAGE_NT_SIGNATURE)
|
||||
return FALSE;
|
||||
if (pPE->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DYNAMIC_ICONV) || defined(DYNAMIC_GETTEXT) || defined(PROTO)
|
||||
/*
|
||||
* Get related information about 'funcname' which is imported by 'hInst'.
|
||||
@ -816,7 +839,7 @@ PlatformId(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
|
||||
#define SHIFT (SHIFT_PRESSED)
|
||||
#define CTRL (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED)
|
||||
@ -1116,7 +1139,7 @@ decode_key_event(
|
||||
/*
|
||||
* For the GUI the mouse handling is in gui_w32.c.
|
||||
*/
|
||||
# ifdef FEAT_GUI_MSWIN
|
||||
# if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
|
||||
void
|
||||
mch_setmouse(int on UNUSED)
|
||||
{
|
||||
@ -1136,6 +1159,10 @@ mch_setmouse(int on)
|
||||
{
|
||||
DWORD cmodein;
|
||||
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return;
|
||||
# endif
|
||||
if (!g_fMouseAvail)
|
||||
return;
|
||||
|
||||
@ -1454,6 +1481,11 @@ mch_update_cursor(void)
|
||||
int idx;
|
||||
int thickness;
|
||||
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return;
|
||||
# endif
|
||||
|
||||
/*
|
||||
* How the cursor is drawn depends on the current mode.
|
||||
*/
|
||||
@ -1467,7 +1499,7 @@ mch_update_cursor(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN /* this isn't used for the GUI */
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
/*
|
||||
* Handle FOCUS_EVENT.
|
||||
*/
|
||||
@ -1677,13 +1709,16 @@ WaitForChar(long msec, int ignore_input)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
/*
|
||||
* return non-zero if a character is available
|
||||
*/
|
||||
int
|
||||
mch_char_avail(void)
|
||||
{
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return TRUE;
|
||||
# endif
|
||||
return WaitForChar(0L, FALSE);
|
||||
}
|
||||
|
||||
@ -1694,10 +1729,13 @@ mch_char_avail(void)
|
||||
int
|
||||
mch_check_messages(void)
|
||||
{
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return TRUE;
|
||||
# endif
|
||||
return WaitForChar(0L, TRUE);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Create the console input. Used when reading stdin doesn't work.
|
||||
@ -1779,7 +1817,7 @@ mch_inchar(
|
||||
long time UNUSED,
|
||||
int tb_change_cnt UNUSED)
|
||||
{
|
||||
#ifndef FEAT_GUI_MSWIN /* this isn't used for the GUI */
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
|
||||
int len;
|
||||
int c;
|
||||
@ -1787,6 +1825,11 @@ mch_inchar(
|
||||
static char_u typeahead[TYPEAHEADLEN]; /* previously typed bytes. */
|
||||
static int typeaheadlen = 0;
|
||||
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return 0;
|
||||
# endif
|
||||
|
||||
/* First use any typeahead that was kept because "buf" was too small. */
|
||||
if (typeaheadlen > 0)
|
||||
goto theend;
|
||||
@ -2092,8 +2135,8 @@ bad_param_handler(const wchar_t *expression,
|
||||
/*
|
||||
* GUI version of mch_init().
|
||||
*/
|
||||
void
|
||||
mch_init(void)
|
||||
static void
|
||||
mch_init_g(void)
|
||||
{
|
||||
#ifndef __MINGW32__
|
||||
extern int _fmode;
|
||||
@ -2160,7 +2203,9 @@ mch_init(void)
|
||||
}
|
||||
|
||||
|
||||
#else /* FEAT_GUI_MSWIN */
|
||||
#endif /* FEAT_GUI_MSWIN */
|
||||
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
|
||||
#define SRWIDTH(sr) ((sr).Right - (sr).Left + 1)
|
||||
#define SRHEIGHT(sr) ((sr).Bottom - (sr).Top + 1)
|
||||
@ -2442,11 +2487,6 @@ static ConsoleBuffer g_cbNonTermcap = { 0 };
|
||||
static ConsoleBuffer g_cbTermcap = { 0 };
|
||||
|
||||
#ifdef FEAT_TITLE
|
||||
#ifdef __BORLANDC__
|
||||
typedef HWND (__stdcall *GETCONSOLEWINDOWPROC)(VOID);
|
||||
#else
|
||||
typedef HWND (WINAPI *GETCONSOLEWINDOWPROC)(VOID);
|
||||
#endif
|
||||
char g_szOrigTitle[256] = { 0 };
|
||||
HWND g_hWnd = NULL; /* also used in os_mswin.c */
|
||||
static HICON g_hOrigIconSmall = NULL;
|
||||
@ -2563,8 +2603,8 @@ static DWORD g_cmodeout = 0;
|
||||
/*
|
||||
* non-GUI version of mch_init().
|
||||
*/
|
||||
void
|
||||
mch_init(void)
|
||||
static void
|
||||
mch_init_c(void)
|
||||
{
|
||||
#ifndef FEAT_RESTORE_ORIG_SCREEN
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
@ -2660,8 +2700,8 @@ mch_init(void)
|
||||
* Shut down and exit with status `r'
|
||||
* Careful: mch_exit() may be called before mch_init()!
|
||||
*/
|
||||
void
|
||||
mch_exit(int r)
|
||||
static void
|
||||
mch_exit_c(int r)
|
||||
{
|
||||
exiting = TRUE;
|
||||
|
||||
@ -2711,6 +2751,36 @@ mch_exit(int r)
|
||||
}
|
||||
#endif /* !FEAT_GUI_MSWIN */
|
||||
|
||||
void
|
||||
mch_init(void)
|
||||
{
|
||||
#ifdef VIMDLL
|
||||
if (gui.starting)
|
||||
mch_init_g();
|
||||
else
|
||||
mch_init_c();
|
||||
#elif defined(FEAT_GUI_MSWIN)
|
||||
mch_init_g();
|
||||
#else
|
||||
mch_init_c();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
mch_exit(int r)
|
||||
{
|
||||
#ifdef VIMDLL
|
||||
if (gui.starting || gui.in_use)
|
||||
mch_exit_g(r);
|
||||
else
|
||||
mch_exit_c(r);
|
||||
#elif defined(FEAT_GUI_MSWIN)
|
||||
mch_exit_g(r);
|
||||
#else
|
||||
mch_exit_c(r);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Do we have an interactive window?
|
||||
*/
|
||||
@ -2721,9 +2791,13 @@ mch_check_win(
|
||||
{
|
||||
get_exe_name();
|
||||
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
#if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
|
||||
return OK; /* GUI always has a tty */
|
||||
#else
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return OK;
|
||||
# endif
|
||||
if (isatty(1))
|
||||
return OK;
|
||||
return FAIL;
|
||||
@ -3446,7 +3520,7 @@ mch_free_acl(vim_acl_T acl)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
|
||||
/*
|
||||
* handler for ctrl-break, ctrl-c interrupts, and fatal events.
|
||||
@ -3516,6 +3590,10 @@ mch_settmode(int tmode)
|
||||
DWORD cmodeout;
|
||||
BOOL bEnableHandler;
|
||||
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return;
|
||||
# endif
|
||||
GetConsoleMode(g_hConIn, &cmodein);
|
||||
GetConsoleMode(g_hConOut, &cmodeout);
|
||||
if (tmode == TMODE_RAW)
|
||||
@ -3528,7 +3606,7 @@ mch_settmode(int tmode)
|
||||
#endif
|
||||
cmodeout &= ~(
|
||||
#ifdef FEAT_TERMGUICOLORS
|
||||
/* Do not turn off the ENABLE_PROCESSRD_OUTPUT flag when using
|
||||
/* Do not turn off the ENABLE_PROCESSED_OUTPUT flag when using
|
||||
* VTP. */
|
||||
((vtp_working) ? 0 : ENABLE_PROCESSED_OUTPUT) |
|
||||
#else
|
||||
@ -3570,6 +3648,10 @@ mch_get_shellsize(void)
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return OK;
|
||||
# endif
|
||||
if (!g_fTermcapMode && g_cbTermcap.IsValid)
|
||||
{
|
||||
/*
|
||||
@ -3717,6 +3799,10 @@ mch_set_shellsize(void)
|
||||
{
|
||||
COORD coordScreen;
|
||||
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return;
|
||||
# endif
|
||||
/* Don't change window size while still starting up */
|
||||
if (suppress_winsize != 0)
|
||||
{
|
||||
@ -3744,6 +3830,10 @@ mch_set_shellsize(void)
|
||||
void
|
||||
mch_new_shellsize(void)
|
||||
{
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return;
|
||||
# endif
|
||||
set_scroll_region(0, 0, Columns - 1, Rows - 1);
|
||||
}
|
||||
|
||||
@ -4369,7 +4459,7 @@ mch_system_piped(char *cmd, int options)
|
||||
}
|
||||
|
||||
static int
|
||||
mch_system(char *cmd, int options)
|
||||
mch_system_g(char *cmd, int options)
|
||||
{
|
||||
/* if we can pipe and the shelltemp option is off */
|
||||
if (!p_stmp)
|
||||
@ -4377,10 +4467,11 @@ mch_system(char *cmd, int options)
|
||||
else
|
||||
return mch_system_classic(cmd, options);
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
static int
|
||||
mch_system(char *cmd, int options)
|
||||
mch_system_c(char *cmd, int options)
|
||||
{
|
||||
int ret;
|
||||
WCHAR *wcmd;
|
||||
@ -4396,6 +4487,21 @@ mch_system(char *cmd, int options)
|
||||
|
||||
#endif
|
||||
|
||||
static int
|
||||
mch_system(char *cmd, int options)
|
||||
{
|
||||
#ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return mch_system_g(cmd, options);
|
||||
else
|
||||
return mch_system_c(cmd, options);
|
||||
#elif defined(FEAT_GUI_MSWIN)
|
||||
return mch_system_g(cmd, options);
|
||||
#else
|
||||
return mch_system_c(cmd, options);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
|
||||
/*
|
||||
* Use a terminal window to run a shell command in.
|
||||
@ -4527,7 +4633,11 @@ mch_call_shell(
|
||||
#endif
|
||||
#if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
|
||||
/* TODO: make the terminal window work with input or output redirected. */
|
||||
if (vim_strchr(p_go, GO_TERMINAL) != NULL
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
gui.in_use &&
|
||||
# endif
|
||||
vim_strchr(p_go, GO_TERMINAL) != NULL
|
||||
&& (options & (SHELL_FILTER|SHELL_DOOUT|SHELL_WRITE|SHELL_READ)) == 0)
|
||||
{
|
||||
/* Use a terminal window to run the command in. */
|
||||
@ -4679,7 +4789,10 @@ mch_call_shell(
|
||||
{
|
||||
x = -1;
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
emsg(_("E371: Command not found"));
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
# endif
|
||||
emsg(_("E371: Command not found"));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -4699,7 +4812,7 @@ mch_call_shell(
|
||||
{
|
||||
cmdlen = (
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
(!p_stmp ? 0 : STRLEN(vimrun_path)) +
|
||||
(gui.in_use ? (!p_stmp ? 0 : STRLEN(vimrun_path)) : 0) +
|
||||
#endif
|
||||
STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
|
||||
|
||||
@ -4707,7 +4820,11 @@ mch_call_shell(
|
||||
if (newcmd != NULL)
|
||||
{
|
||||
#if defined(FEAT_GUI_MSWIN)
|
||||
if (need_vimrun_warning)
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
gui.in_use &&
|
||||
# endif
|
||||
need_vimrun_warning)
|
||||
{
|
||||
char *msg = _("VIMRUN.EXE not found in your $PATH.\n"
|
||||
"External commands will not pause after completion.\n"
|
||||
@ -4722,7 +4839,11 @@ mch_call_shell(
|
||||
vim_free(wtitle);
|
||||
need_vimrun_warning = FALSE;
|
||||
}
|
||||
if (!s_dont_use_vimrun && p_stmp)
|
||||
if (
|
||||
# ifdef VIMDLL
|
||||
gui.in_use &&
|
||||
# endif
|
||||
!s_dont_use_vimrun && p_stmp)
|
||||
/* Use vimrun to execute the command. It opens a console
|
||||
* window, which can be closed without killing Vim. */
|
||||
vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
|
||||
@ -4746,7 +4867,8 @@ mch_call_shell(
|
||||
/* Print the return value, unless "vimrun" was used. */
|
||||
if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
|
||||
#if defined(FEAT_GUI_MSWIN)
|
||||
&& ((options & SHELL_DOOUT) || s_dont_use_vimrun || !p_stmp)
|
||||
&& (gui.in_use ?
|
||||
((options & SHELL_DOOUT) || s_dont_use_vimrun || !p_stmp) : 1)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
@ -5278,7 +5400,7 @@ mch_clear_job(job_T *job)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
|
||||
/*
|
||||
* Start termcap mode
|
||||
@ -5397,7 +5519,7 @@ termcap_mode_end(void)
|
||||
#endif /* FEAT_GUI_MSWIN */
|
||||
|
||||
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
#if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
|
||||
void
|
||||
mch_write(
|
||||
char_u *s UNUSED,
|
||||
@ -5694,7 +5816,7 @@ gotoxy(
|
||||
|
||||
/*
|
||||
* Set the current text attribute = (foreground | background)
|
||||
* See ../doc/os_win32.txt for the numbers.
|
||||
* See ../runtime/doc/os_win32.txt for the numbers.
|
||||
*/
|
||||
static void
|
||||
textattr(WORD wAttr)
|
||||
@ -5924,6 +6046,11 @@ mch_write(
|
||||
char_u *s,
|
||||
int len)
|
||||
{
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
return;
|
||||
# endif
|
||||
|
||||
s[len] = NUL;
|
||||
|
||||
if (!term_console)
|
||||
@ -6222,9 +6349,16 @@ mch_delay(
|
||||
long msec,
|
||||
int ignoreinput UNUSED)
|
||||
{
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
#if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
|
||||
Sleep((int)msec); /* never wait for input */
|
||||
#else /* Console */
|
||||
# ifdef VIMDLL
|
||||
if (gui.in_use)
|
||||
{
|
||||
Sleep((int)msec); /* never wait for input */
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
if (ignoreinput)
|
||||
# ifdef FEAT_MZSCHEME
|
||||
if (mzthreads_allowed() && p_mzq > 0 && msec > p_mzq)
|
||||
@ -6286,13 +6420,16 @@ mch_remove(char_u *name)
|
||||
void
|
||||
mch_breakcheck(int force)
|
||||
{
|
||||
#ifndef FEAT_GUI_MSWIN /* never used */
|
||||
if (g_fCtrlCPressed || g_fCBrkPressed)
|
||||
{
|
||||
ctrl_break_was_pressed = g_fCBrkPressed;
|
||||
g_fCtrlCPressed = g_fCBrkPressed = FALSE;
|
||||
got_int = TRUE;
|
||||
}
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
if (g_fCtrlCPressed || g_fCBrkPressed)
|
||||
{
|
||||
ctrl_break_was_pressed = g_fCBrkPressed;
|
||||
g_fCtrlCPressed = g_fCBrkPressed = FALSE;
|
||||
got_int = TRUE;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -6308,7 +6445,7 @@ mch_total_mem(int special UNUSED)
|
||||
MEMORYSTATUSEX ms;
|
||||
|
||||
/* Need to use GlobalMemoryStatusEx() when there is more memory than
|
||||
* what fits in 32 bits. But it's not always available. */
|
||||
* what fits in 32 bits. */
|
||||
ms.dwLength = sizeof(MEMORYSTATUSEX);
|
||||
GlobalMemoryStatusEx(&ms);
|
||||
if (ms.ullAvailVirtual < ms.ullTotalPhys)
|
||||
@ -7098,17 +7235,22 @@ mch_setenv(char *var, char *value, int x)
|
||||
vtp_flag_init(void)
|
||||
{
|
||||
DWORD ver = get_build_number();
|
||||
#ifndef FEAT_GUI_MSWIN
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
|
||||
DWORD mode;
|
||||
HANDLE out;
|
||||
|
||||
out = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
{
|
||||
out = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
vtp_working = (ver >= VTP_FIRST_SUPPORT_BUILD) ? 1 : 0;
|
||||
GetConsoleMode(out, &mode);
|
||||
mode |= (ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
|
||||
if (SetConsoleMode(out, mode) == 0)
|
||||
vtp_working = 0;
|
||||
vtp_working = (ver >= VTP_FIRST_SUPPORT_BUILD) ? 1 : 0;
|
||||
GetConsoleMode(out, &mode);
|
||||
mode |= (ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
|
||||
if (SetConsoleMode(out, mode) == 0)
|
||||
vtp_working = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ver >= CONPTY_FIRST_SUPPORT_BUILD)
|
||||
@ -7118,7 +7260,7 @@ vtp_flag_init(void)
|
||||
|
||||
}
|
||||
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(PROTO)
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) || defined(PROTO)
|
||||
|
||||
static void
|
||||
vtp_init(void)
|
||||
@ -7343,7 +7485,7 @@ is_conpty_stable(void)
|
||||
return conpty_stable;
|
||||
}
|
||||
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(PROTO)
|
||||
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) || defined(PROTO)
|
||||
void
|
||||
resize_console_buf(void)
|
||||
{
|
||||
|
@ -78,7 +78,7 @@
|
||||
|
||||
#define HAVE_PUTENV /* at least Bcc 5.2 and MSC have it */
|
||||
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
#if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
|
||||
# define NO_CONSOLE /* don't included console-only code */
|
||||
#endif
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* gui.c */
|
||||
void gui_start(void);
|
||||
void gui_start(char_u *arg);
|
||||
void gui_prepare(int *argc, char **argv);
|
||||
int gui_init_check(void);
|
||||
void gui_init(void);
|
||||
|
@ -61,6 +61,7 @@ void mch_set_mouse_shape(int shape);
|
||||
char_u *gui_mch_browse(int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter);
|
||||
char_u *gui_mch_browsedir(char_u *title, char_u *initdir);
|
||||
void gui_mch_set_parent(char *title);
|
||||
char *gui_mch_do_spawn(char_u *arg);
|
||||
void gui_mch_prepare(int *argc, char **argv);
|
||||
int gui_mch_init(void);
|
||||
void gui_mch_set_shellsize(int width, int height, int min_width, int min_height, int base_width, int base_height, int direction);
|
||||
|
@ -108,4 +108,5 @@ void parse_queued_messages(void);
|
||||
int mch_parse_cmd(char_u *cmd, int use_shcf, char ***argv, int *argc);
|
||||
int build_argv_from_string(char_u *cmd, char ***argv, int *argc);
|
||||
int build_argv_from_list(list_T *l, char ***argv, int *argc);
|
||||
int write_session_file(char_u *filename);
|
||||
/* vim: set ft=c : */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* os_mswin.c */
|
||||
void mch_exit(int r);
|
||||
void mch_exit_g(int r);
|
||||
void mch_early_init(void);
|
||||
int mch_input_isatty(void);
|
||||
void mch_settitle(char_u *title, char_u *icon);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* os_win32.c */
|
||||
HINSTANCE vimLoadLib(char *name);
|
||||
int mch_is_gui_executable(void);
|
||||
HINSTANCE find_imported_module_by_funcname(HINSTANCE hInst, const char *funcname);
|
||||
void *get_dll_import_func(HINSTANCE hInst, const char *funcname);
|
||||
int dyn_libintl_init(void);
|
||||
|
@ -8280,6 +8280,13 @@ restore_cterm_colors(void)
|
||||
* background/foreground colors. */
|
||||
mch_set_normal_colors();
|
||||
#else
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
{
|
||||
mch_set_normal_colors();
|
||||
return;
|
||||
}
|
||||
# endif
|
||||
cterm_normal_fg_color = 0;
|
||||
cterm_normal_fg_bold = 0;
|
||||
cterm_normal_bg_color = 0;
|
||||
@ -9823,7 +9830,7 @@ syn_id2colors(int hl_id, guicolor_T *fgp, guicolor_T *bgp)
|
||||
#endif
|
||||
|
||||
#if (defined(MSWIN) \
|
||||
&& !defined(FEAT_GUI_MSWIN) \
|
||||
&& (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL)) \
|
||||
&& defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
|
||||
void
|
||||
syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
|
||||
|
45
src/term.c
45
src/term.c
@ -4094,7 +4094,12 @@ add_termcode(char_u *name, char_u *string, int flags)
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI)
|
||||
s = vim_strnsave(string, (int)STRLEN(string) + 1);
|
||||
#else
|
||||
s = vim_strsave(string);
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
s = vim_strnsave(string, (int)STRLEN(string) + 1);
|
||||
else
|
||||
# endif
|
||||
s = vim_strsave(string);
|
||||
#endif
|
||||
if (s == NULL)
|
||||
return;
|
||||
@ -4106,11 +4111,16 @@ add_termcode(char_u *name, char_u *string, int flags)
|
||||
s[0] = term_7to8bit(string);
|
||||
}
|
||||
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI)
|
||||
if (s[0] == K_NUL)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
{
|
||||
STRMOVE(s + 1, s);
|
||||
s[1] = 3;
|
||||
if (s[0] == K_NUL)
|
||||
{
|
||||
STRMOVE(s + 1, s);
|
||||
s[1] = 3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -6712,7 +6722,7 @@ translate_mapping(
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (defined(MSWIN) && !defined(FEAT_GUI)) || defined(PROTO)
|
||||
#if (defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))) || defined(PROTO)
|
||||
static char ksme_str[20];
|
||||
static char ksmr_str[20];
|
||||
static char ksmd_str[20];
|
||||
@ -6902,6 +6912,19 @@ hex_digit(int c)
|
||||
return 0x1ffffff;
|
||||
}
|
||||
|
||||
# ifdef VIMDLL
|
||||
static guicolor_T
|
||||
gui_adjust_rgb(guicolor_T c)
|
||||
{
|
||||
if (gui.in_use)
|
||||
return c;
|
||||
else
|
||||
return ((c & 0xff) << 16) | (c & 0x00ff00) | ((c >> 16) & 0xff);
|
||||
}
|
||||
# else
|
||||
# define gui_adjust_rgb(c) (c)
|
||||
# endif
|
||||
|
||||
guicolor_T
|
||||
gui_get_color_cmn(char_u *name)
|
||||
{
|
||||
@ -6973,13 +6996,13 @@ gui_get_color_cmn(char_u *name)
|
||||
((hex_digit(name[5]) << 4) + hex_digit(name[6])));
|
||||
if (color > 0xffffff)
|
||||
return INVALCOLOR;
|
||||
return color;
|
||||
return gui_adjust_rgb(color);
|
||||
}
|
||||
|
||||
/* Check if the name is one of the colors we know */
|
||||
for (i = 0; i < (int)(sizeof(rgb_table) / sizeof(rgb_table[0])); i++)
|
||||
if (STRICMP(name, rgb_table[i].color_name) == 0)
|
||||
return rgb_table[i].color;
|
||||
return gui_adjust_rgb(rgb_table[i].color);
|
||||
|
||||
/*
|
||||
* Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
|
||||
@ -7060,7 +7083,7 @@ gui_get_color_cmn(char_u *name)
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
if (STRICMP(name, colornames_table[i].color_name) == 0)
|
||||
return colornames_table[i].color;
|
||||
return gui_adjust_rgb(colornames_table[i].color);
|
||||
|
||||
return INVALCOLOR;
|
||||
}
|
||||
@ -7072,11 +7095,11 @@ gui_get_rgb_color_cmn(int r, int g, int b)
|
||||
|
||||
if (color > 0xffffff)
|
||||
return INVALCOLOR;
|
||||
return color;
|
||||
return gui_adjust_rgb(color);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (defined(MSWIN) && !defined(FEAT_GUI_MSWIN)) || defined(FEAT_TERMINAL) \
|
||||
#if (defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))) || defined(FEAT_TERMINAL) \
|
||||
|| defined(PROTO)
|
||||
static int cube_value[] = {
|
||||
0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF
|
||||
|
@ -3553,7 +3553,7 @@ init_default_colors(term_T *term)
|
||||
}
|
||||
else
|
||||
{
|
||||
#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
#if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
int tmp;
|
||||
#endif
|
||||
|
||||
@ -3561,10 +3561,15 @@ init_default_colors(term_T *term)
|
||||
if (cterm_normal_fg_color > 0)
|
||||
{
|
||||
cterm_color2vterm(cterm_normal_fg_color - 1, fg);
|
||||
# if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
tmp = fg->red;
|
||||
fg->red = fg->blue;
|
||||
fg->blue = tmp;
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
{
|
||||
tmp = fg->red;
|
||||
fg->red = fg->blue;
|
||||
fg->blue = tmp;
|
||||
}
|
||||
# endif
|
||||
}
|
||||
# ifdef FEAT_TERMRESPONSE
|
||||
@ -3575,10 +3580,15 @@ init_default_colors(term_T *term)
|
||||
if (cterm_normal_bg_color > 0)
|
||||
{
|
||||
cterm_color2vterm(cterm_normal_bg_color - 1, bg);
|
||||
# if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
|
||||
tmp = bg->red;
|
||||
bg->red = bg->blue;
|
||||
bg->blue = tmp;
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
|
||||
# ifdef VIMDLL
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
{
|
||||
tmp = fg->red;
|
||||
fg->red = fg->blue;
|
||||
fg->blue = tmp;
|
||||
}
|
||||
# endif
|
||||
}
|
||||
# ifdef FEAT_TERMRESPONSE
|
||||
@ -3887,7 +3897,7 @@ parse_csi(
|
||||
#endif
|
||||
{
|
||||
// We roughly estimate the position of the terminal window inside
|
||||
// the Vim window by assuing a 10 x 7 character cell.
|
||||
// the Vim window by assuming a 10 x 7 character cell.
|
||||
x += wp->w_wincol * 7;
|
||||
y += W_WINROW(wp) * 10;
|
||||
}
|
||||
|
2
src/ui.c
2
src/ui.c
@ -643,7 +643,7 @@ ui_get_winpos(int *x, int *y, varnumber_T timeout)
|
||||
if (gui.in_use)
|
||||
return gui_mch_get_winpos(x, y);
|
||||
# endif
|
||||
# if defined(MSWIN) && !defined(FEAT_GUI)
|
||||
# if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
|
||||
return mch_get_winpos(x, y);
|
||||
# else
|
||||
# if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
|
||||
|
@ -767,6 +767,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1230,
|
||||
/**/
|
||||
1229,
|
||||
/**/
|
||||
@ -3420,10 +3422,18 @@ list_version(void)
|
||||
msg(longVersion);
|
||||
#ifdef MSWIN
|
||||
# ifdef FEAT_GUI_MSWIN
|
||||
# ifdef _WIN64
|
||||
msg_puts(_("\nMS-Windows 64-bit GUI version"));
|
||||
# ifdef VIMDLL
|
||||
# ifdef _WIN64
|
||||
msg_puts(_("\nMS-Windows 64-bit GUI/console version"));
|
||||
# else
|
||||
msg_puts(_("\nMS-Windows 32-bit GUI/console version"));
|
||||
# endif
|
||||
# else
|
||||
# ifdef _WIN64
|
||||
msg_puts(_("\nMS-Windows 64-bit GUI version"));
|
||||
# else
|
||||
msg_puts(_("\nMS-Windows 32-bit GUI version"));
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FEAT_OLE
|
||||
msg_puts(_(" with OLE support"));
|
||||
|
20
src/vim.rc
20
src/vim.rc
@ -23,7 +23,7 @@
|
||||
//
|
||||
IDR_VIM ICON "vim.ico"
|
||||
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
#if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(RCDLL)
|
||||
IDR_VIM_ERROR ICON "vim_error.ico"
|
||||
IDR_VIM_ALERT ICON "vim_alert.ico"
|
||||
IDR_VIM_INFO ICON "vim_info.ico"
|
||||
@ -34,7 +34,9 @@ IDR_VIM_QUESTION ICON "vim_quest.ico"
|
||||
//
|
||||
IDB_TEAROFF BITMAP DISCARDABLE "tearoff.bmp"
|
||||
IDR_TOOLBAR1 BITMAP DISCARDABLE "tools.bmp"
|
||||
#endif // FEAT_GUI_MSWIN
|
||||
|
||||
#ifndef RCDLL
|
||||
//
|
||||
// WinXP theme support
|
||||
//
|
||||
@ -46,7 +48,7 @@ IDR_TOOLBAR1 BITMAP DISCARDABLE "tools.bmp"
|
||||
#endif
|
||||
|
||||
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gvim.exe.mnf"
|
||||
#endif // FEAT_GUI_MSWIN
|
||||
#endif // RCDLL
|
||||
|
||||
//
|
||||
// Type Library
|
||||
@ -79,7 +81,11 @@ VS_VERSION_INFO VERSIONINFO
|
||||
#endif
|
||||
|
||||
FILEOS VOS__WINDOWS32
|
||||
#ifdef RCDLL
|
||||
FILETYPE VFT_DLL
|
||||
#else
|
||||
FILETYPE VFT_APP
|
||||
#endif
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
@ -93,7 +99,13 @@ BEGIN
|
||||
VALUE "InternalName", "VIM\0"
|
||||
VALUE "LegalCopyright", "Copyright \251 1996\0"
|
||||
VALUE "LegalTrademarks", "Vim\0"
|
||||
VALUE "OriginalFilename", "VIM.EXE\0"
|
||||
#ifdef VIMDLLBASE
|
||||
VALUE "OriginalFilename", VIMDLLBASE ".dll\0"
|
||||
#elif defined(FEAT_GUI_MSWIN)
|
||||
VALUE "OriginalFilename", "gvim.exe\0"
|
||||
#else
|
||||
VALUE "OriginalFilename", "vim.exe\0"
|
||||
#endif
|
||||
VALUE "ProductName", "Vim\0"
|
||||
VALUE "ProductVersion", VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR "\0"
|
||||
END
|
||||
@ -104,6 +116,7 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
#if !defined(VIMDLL) || defined(RCDLL)
|
||||
/*
|
||||
* Printing Status Dialog (should only be used when FEAT_PRINTER is defined)
|
||||
*/
|
||||
@ -121,3 +134,4 @@ BEGIN
|
||||
CTEXT "Initializing...",IDC_PROGRESS,24,38,157,9
|
||||
GROUPBOX "",IDC_BOX1,19,9,170,47
|
||||
END
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user