mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-20 10:23:57 +00:00
Merge from trunk after cygw32 commit, and resolve conflicts.
This commit is contained in:
commit
7014794467
@ -1,3 +1,12 @@
|
||||
2012-10-08 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* configure.ac: Add --with-w32 as a window system option. Limit
|
||||
it to Cygwin for now. Integrate w32 into the refactored window
|
||||
system configuration and set TERM_HEADER to w32term.h when w32 is
|
||||
configured.
|
||||
|
||||
(CYGWIN_OBJ): Add cygw32.o.
|
||||
|
||||
2012-10-07 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.ac: Check that OSX is 10.4 or newer.
|
||||
|
@ -753,6 +753,8 @@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
|
||||
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
|
||||
VERSION = @VERSION@
|
||||
VMLIMIT_OBJ = @VMLIMIT_OBJ@
|
||||
W32_LIBS = @W32_LIBS@
|
||||
W32_OBJ = @W32_OBJ@
|
||||
WARN_CFLAGS = @WARN_CFLAGS@
|
||||
WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
|
||||
WERROR_CFLAGS = @WERROR_CFLAGS@
|
||||
|
@ -692,6 +692,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
Mac OS X. */
|
||||
#undef HAVE_NS
|
||||
|
||||
/* Define to use native Windows GUI. */
|
||||
#undef HAVE_NTGUI
|
||||
|
||||
/* Define to 1 if libotf has OTF_get_variation_glyphs. */
|
||||
#undef HAVE_OTF_GET_VARIATION_GLYPHS
|
||||
|
||||
|
160
autogen/configure
vendored
160
autogen/configure
vendored
@ -1204,6 +1204,8 @@ LIB_PTHREAD
|
||||
VMLIMIT_OBJ
|
||||
GMALLOC_OBJ
|
||||
HAVE_XSERVER
|
||||
W32_LIBS
|
||||
W32_OBJ
|
||||
LIB_STANDARD
|
||||
NS_OBJC_OBJ
|
||||
NS_OBJ
|
||||
@ -1362,6 +1364,7 @@ with_toolkit_scroll_bars
|
||||
with_xaw3d
|
||||
with_xim
|
||||
with_ns
|
||||
with_w32
|
||||
with_gpm
|
||||
with_dbus
|
||||
with_gconf
|
||||
@ -2081,6 +2084,7 @@ Optional Packages:
|
||||
--without-xaw3d don't use Xaw3d
|
||||
--without-xim don't use X11 XIM
|
||||
--with-ns use NeXTstep (Cocoa or GNUstep) windowing system
|
||||
--with-w32 use native Windows GUI
|
||||
--without-gpm don't use -lgpm for mouse support on a GNU/Linux
|
||||
console
|
||||
--without-dbus don't compile with D-Bus support
|
||||
@ -4093,6 +4097,14 @@ else
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-w32 was given.
|
||||
if test "${with_w32+set}" = set; then :
|
||||
withval=$with_w32;
|
||||
else
|
||||
with_w32=no
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Check whether --with-gpm was given.
|
||||
if test "${with_gpm+set}" = set; then :
|
||||
@ -9568,6 +9580,7 @@ $as_echo "#define NS_HAVE_NSINTEGER 1" >>confdefs.h
|
||||
fi
|
||||
|
||||
|
||||
|
||||
INSTALL_ARCH_INDEP_EXTRA=install-etc
|
||||
ns_self_contained=no
|
||||
NS_OBJ=
|
||||
@ -9603,6 +9616,38 @@ CPPFLAGS="$tmp_CPPFLAGS"
|
||||
|
||||
|
||||
|
||||
HAVE_W32=no
|
||||
W32_OBJ=
|
||||
W32_LIBS=
|
||||
if test "${with_w32}" != no; then
|
||||
if test "${opsys}" != "cygwin"; then
|
||||
as_fn_error "Using w32 with an autotools build is only supported for Cygwin." "$LINENO" 5
|
||||
fi
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_windows_h" = x""yes; then :
|
||||
HAVE_W32=yes
|
||||
else
|
||||
as_fn_error "\`--with-w32' was specified, but windows.h
|
||||
cannot be found." "$LINENO" 5
|
||||
fi
|
||||
|
||||
|
||||
|
||||
$as_echo "#define HAVE_NTGUI 1" >>confdefs.h
|
||||
|
||||
W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
|
||||
W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o"
|
||||
W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
|
||||
W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
window_system=w32
|
||||
with_xft=no
|
||||
fi
|
||||
|
||||
## $window_system is now set to the window system we will
|
||||
## ultimately use.
|
||||
|
||||
@ -9635,6 +9680,9 @@ case "${window_system}" in
|
||||
nextstep )
|
||||
term_header=nsterm.h
|
||||
;;
|
||||
w32 )
|
||||
term_header=w32term.h
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -n "${term_header}"; then
|
||||
@ -11700,6 +11748,10 @@ if test "${with_toolkit_scroll_bars}" != "no"; then
|
||||
elif test "${HAVE_NS}" = "yes"; then
|
||||
$as_echo "#define USE_TOOLKIT_SCROLL_BARS 1" >>confdefs.h
|
||||
|
||||
USE_TOOLKIT_SCROLL_BARS=yes
|
||||
elif test "${HAVE_W32}" = "yes"; then
|
||||
$as_echo "#define USE_TOOLKIT_SCROLL_BARS 1" >>confdefs.h
|
||||
|
||||
USE_TOOLKIT_SCROLL_BARS=yes
|
||||
fi
|
||||
fi
|
||||
@ -12262,6 +12314,99 @@ fi
|
||||
### Use -lXpm if available, unless `--with-xpm=no'.
|
||||
HAVE_XPM=no
|
||||
LIBXPM=
|
||||
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_xpm}" != "no"; then
|
||||
SAVE_CPPFLAGS="$CPPFLAGS"
|
||||
SAVE_LDFLAGS="$LDFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS -I/usr/include/noX"
|
||||
LDFLAGS="$LDFLAGS -L/usr/lib/noX"
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "X11/xpm.h" "ac_cv_header_X11_xpm_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_X11_xpm_h" = x""yes; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmReadFileToImage in -lXpm" >&5
|
||||
$as_echo_n "checking for XpmReadFileToImage in -lXpm... " >&6; }
|
||||
if test "${ac_cv_lib_Xpm_XpmReadFileToImage+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lXpm $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char XpmReadFileToImage ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return XpmReadFileToImage ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_Xpm_XpmReadFileToImage=yes
|
||||
else
|
||||
ac_cv_lib_Xpm_XpmReadFileToImage=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xpm_XpmReadFileToImage" >&5
|
||||
$as_echo "$ac_cv_lib_Xpm_XpmReadFileToImage" >&6; }
|
||||
if test "x$ac_cv_lib_Xpm_XpmReadFileToImage" = x""yes; then :
|
||||
HAVE_XPM=yes
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmReturnAllocPixels preprocessor define" >&5
|
||||
$as_echo_n "checking for XpmReturnAllocPixels preprocessor define... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include "X11/xpm.h"
|
||||
#ifndef XpmReturnAllocPixels
|
||||
no_return_alloc_pixels
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "no_return_alloc_pixels" >/dev/null 2>&1; then :
|
||||
HAVE_XPM=no
|
||||
else
|
||||
HAVE_XPM=yes
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
REAL_CPPFLAGS="$REAL_CPPFLAGS -I/usr/include/noX"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
CPPFLAGS="$SAVE_CPPFLAGS"
|
||||
LDFLAGS="$SAVE_LDFLAGS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
|
||||
$as_echo "#define HAVE_XPM 1" >>confdefs.h
|
||||
|
||||
LIBXPM=-lXpm
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${with_xpm}" != "no"; then
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "X11/xpm.h" "ac_cv_header_X11_xpm_h" "$ac_includes_default"
|
||||
@ -12348,10 +12493,11 @@ $as_echo "#define HAVE_XPM 1" >>confdefs.h
|
||||
fi
|
||||
|
||||
|
||||
|
||||
### Use -ljpeg if available, unless `--with-jpeg=no'.
|
||||
HAVE_JPEG=no
|
||||
LIBJPEG=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_jpeg}" != "no"; then
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "jerror.h" "ac_cv_header_jerror_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_jerror_h" = x""yes; then :
|
||||
@ -12430,7 +12576,7 @@ fi
|
||||
### Use -lpng if available, unless `--with-png=no'.
|
||||
HAVE_PNG=no
|
||||
LIBPNG=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_png}" != "no"; then
|
||||
# Debian unstable as of July 2003 has multiple libpngs, and puts png.h
|
||||
# in /usr/include/libpng.
|
||||
@ -12520,7 +12666,7 @@ fi
|
||||
### Use -ltiff if available, unless `--with-tiff=no'.
|
||||
HAVE_TIFF=no
|
||||
LIBTIFF=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_tiff}" != "no"; then
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_tiffio_h" = x""yes; then :
|
||||
@ -12584,7 +12730,8 @@ fi
|
||||
### Use -lgif or -lungif if available, unless `--with-gif=no'.
|
||||
HAVE_GIF=no
|
||||
LIBGIF=
|
||||
if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no"; then
|
||||
if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
|
||||
|| test "${HAVE_W32}" = "yes"; then
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_gif_lib_h" = x""yes; then :
|
||||
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
|
||||
@ -12805,6 +12952,9 @@ $as_echo "#define NS_IMPL_GNUSTEP 1" >>confdefs.h
|
||||
OTHER_FILES=ns-app
|
||||
fi
|
||||
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
HAVE_MENUS=yes
|
||||
fi
|
||||
|
||||
### Use session management (-lSM -lICE) if available
|
||||
HAVE_X_SM=no
|
||||
@ -16078,7 +16228,7 @@ fi
|
||||
|
||||
|
||||
if test "$opsys" = "cygwin"; then
|
||||
CYGWIN_OBJ="sheap.o"
|
||||
CYGWIN_OBJ="sheap.o cygw32.o"
|
||||
## Cygwin differs because of its unexec().
|
||||
PRE_ALLOC_OBJ=
|
||||
POST_ALLOC_OBJ=lastfile.o
|
||||
|
82
configure.ac
82
configure.ac
@ -177,6 +177,7 @@ OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Motif or Xaw3d scroll bars])
|
||||
OPTION_DEFAULT_ON([xaw3d],[don't use Xaw3d])
|
||||
OPTION_DEFAULT_ON([xim],[don't use X11 XIM])
|
||||
OPTION_DEFAULT_OFF([ns],[use NeXTstep (Cocoa or GNUstep) windowing system])
|
||||
OPTION_DEFAULT_OFF([w32], [use native Windows GUI])
|
||||
|
||||
OPTION_DEFAULT_ON([gpm],[don't use -lgpm for mouse support on a GNU/Linux console])
|
||||
OPTION_DEFAULT_ON([dbus],[don't compile with D-Bus support])
|
||||
@ -1534,6 +1535,7 @@ fail;
|
||||
AC_DEFINE(NS_HAVE_NSINTEGER, 1, [Define to 1 if `NSInteger' is defined.])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(TEMACS_LDFLAGS2)
|
||||
|
||||
INSTALL_ARCH_INDEP_EXTRA=install-etc
|
||||
@ -1574,6 +1576,30 @@ AC_SUBST(NS_OBJ)
|
||||
AC_SUBST(NS_OBJC_OBJ)
|
||||
AC_SUBST(LIB_STANDARD)
|
||||
|
||||
HAVE_W32=no
|
||||
W32_OBJ=
|
||||
W32_LIBS=
|
||||
if test "${with_w32}" != no; then
|
||||
if test "${opsys}" != "cygwin"; then
|
||||
AC_MSG_ERROR([Using w32 with an autotools build is only supported for Cygwin.])
|
||||
fi
|
||||
AC_CHECK_HEADER([windows.h], [HAVE_W32=yes],
|
||||
[AC_MSG_ERROR([`--with-w32' was specified, but windows.h
|
||||
cannot be found.])])
|
||||
AC_DEFINE(HAVE_NTGUI, 1, [Define to use native Windows GUI.])
|
||||
W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o"
|
||||
W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o"
|
||||
W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32"
|
||||
W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool"
|
||||
fi
|
||||
AC_SUBST(W32_OBJ)
|
||||
AC_SUBST(W32_LIBS)
|
||||
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
window_system=w32
|
||||
with_xft=no
|
||||
fi
|
||||
|
||||
## $window_system is now set to the window system we will
|
||||
## ultimately use.
|
||||
|
||||
@ -1610,6 +1636,9 @@ dnl use the toolkit if we have gtk, or X11R5 or newer.
|
||||
nextstep )
|
||||
term_header=nsterm.h
|
||||
;;
|
||||
w32 )
|
||||
term_header=w32term.h
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -n "${term_header}"; then
|
||||
@ -2310,6 +2339,9 @@ if test "${with_toolkit_scroll_bars}" != "no"; then
|
||||
elif test "${HAVE_NS}" = "yes"; then
|
||||
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
|
||||
USE_TOOLKIT_SCROLL_BARS=yes
|
||||
elif test "${HAVE_W32}" = "yes"; then
|
||||
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
|
||||
USE_TOOLKIT_SCROLL_BARS=yes
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -2476,6 +2508,41 @@ AC_SUBST(M17N_FLT_LIBS)
|
||||
### Use -lXpm if available, unless `--with-xpm=no'.
|
||||
HAVE_XPM=no
|
||||
LIBXPM=
|
||||
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_xpm}" != "no"; then
|
||||
SAVE_CPPFLAGS="$CPPFLAGS"
|
||||
SAVE_LDFLAGS="$LDFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS -I/usr/include/noX"
|
||||
LDFLAGS="$LDFLAGS -L/usr/lib/noX"
|
||||
AC_CHECK_HEADER(X11/xpm.h,
|
||||
[AC_CHECK_LIB(Xpm, XpmReadFileToImage, HAVE_XPM=yes)])
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
AC_MSG_CHECKING(for XpmReturnAllocPixels preprocessor define)
|
||||
AC_EGREP_CPP(no_return_alloc_pixels,
|
||||
[#include "X11/xpm.h"
|
||||
#ifndef XpmReturnAllocPixels
|
||||
no_return_alloc_pixels
|
||||
#endif
|
||||
], HAVE_XPM=no, HAVE_XPM=yes)
|
||||
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
REAL_CPPFLAGS="$REAL_CPPFLAGS -I/usr/include/noX"
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
CPPFLAGS="$SAVE_CPPFLAGS"
|
||||
LDFLAGS="$SAVE_LDFLAGS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${HAVE_XPM}" = "yes"; then
|
||||
AC_DEFINE(HAVE_XPM, 1, [Define to 1 if you have the Xpm libary (-lXpm).])
|
||||
LIBXPM=-lXpm
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${with_xpm}" != "no"; then
|
||||
AC_CHECK_HEADER(X11/xpm.h,
|
||||
@ -2502,12 +2569,13 @@ no_return_alloc_pixels
|
||||
LIBXPM=-lXpm
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(LIBXPM)
|
||||
|
||||
### Use -ljpeg if available, unless `--with-jpeg=no'.
|
||||
HAVE_JPEG=no
|
||||
LIBJPEG=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_jpeg}" != "no"; then
|
||||
dnl Checking for jpeglib.h can lose because of a redefinition of
|
||||
dnl HAVE_STDLIB_H.
|
||||
@ -2535,7 +2603,7 @@ AC_SUBST(LIBJPEG)
|
||||
### Use -lpng if available, unless `--with-png=no'.
|
||||
HAVE_PNG=no
|
||||
LIBPNG=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_png}" != "no"; then
|
||||
# Debian unstable as of July 2003 has multiple libpngs, and puts png.h
|
||||
# in /usr/include/libpng.
|
||||
@ -2568,7 +2636,7 @@ AC_SUBST(LIBPNG)
|
||||
### Use -ltiff if available, unless `--with-tiff=no'.
|
||||
HAVE_TIFF=no
|
||||
LIBTIFF=
|
||||
if test "${HAVE_X11}" = "yes"; then
|
||||
if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
if test "${with_tiff}" != "no"; then
|
||||
AC_CHECK_HEADER(tiffio.h,
|
||||
[tifflibs="-lz -lm"
|
||||
@ -2588,7 +2656,8 @@ AC_SUBST(LIBTIFF)
|
||||
### Use -lgif or -lungif if available, unless `--with-gif=no'.
|
||||
HAVE_GIF=no
|
||||
LIBGIF=
|
||||
if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no"; then
|
||||
if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
|
||||
|| test "${HAVE_W32}" = "yes"; then
|
||||
AC_CHECK_HEADER(gif_lib.h,
|
||||
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
|
||||
# Earlier versions can crash Emacs.
|
||||
@ -2670,6 +2739,9 @@ if test "${HAVE_NS}" = "yes"; then
|
||||
OTHER_FILES=ns-app
|
||||
fi
|
||||
|
||||
if test "${HAVE_W32}" = "yes"; then
|
||||
HAVE_MENUS=yes
|
||||
fi
|
||||
|
||||
### Use session management (-lSM -lICE) if available
|
||||
HAVE_X_SM=no
|
||||
@ -4205,7 +4277,7 @@ fi
|
||||
AC_SUBST(RALLOC_OBJ)
|
||||
|
||||
if test "$opsys" = "cygwin"; then
|
||||
CYGWIN_OBJ="sheap.o"
|
||||
CYGWIN_OBJ="sheap.o cygw32.o"
|
||||
## Cygwin differs because of its unexec().
|
||||
PRE_ALLOC_OBJ=
|
||||
POST_ALLOC_OBJ=lastfile.o
|
||||
|
@ -1,3 +1,9 @@
|
||||
2012-10-08 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* cal-xtra.texi (Calendar Customizing): Mention calendar-month-header.
|
||||
|
||||
* calendar.texi (Writing Calendar Files): Mention cal-html-holidays.
|
||||
|
||||
2012-10-06 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* calendar.texi (Writing Calendar Files): Tweak week descriptions.
|
||||
|
@ -41,6 +41,11 @@ To display text @emph{between} the months, for example week numbers,
|
||||
customize the variables @code{calendar-intermonth-header} and
|
||||
@code{calendar-intermonth-text} as described in their documentation.
|
||||
|
||||
@vindex calendar-month-header
|
||||
The variable @code{calendar-month-header} controls the text that
|
||||
appears above each month in the calendar. By default, it shows the
|
||||
month and year.
|
||||
|
||||
@vindex calendar-holiday-marker
|
||||
@vindex diary-entry-marker
|
||||
@vindex calendar-today-marker
|
||||
|
@ -349,11 +349,12 @@ calendar deletes or iconifies that frame depending on the value of
|
||||
|
||||
@cindex calendar and HTML
|
||||
The Calendar HTML commands produce files of HTML code that contain
|
||||
calendar and diary entries. Each file applies to one month, and has a
|
||||
name of the format @file{@var{yyyy}-@var{mm}.html}, where @var{yyyy} and
|
||||
@var{mm} are the four-digit year and two-digit month, respectively. The
|
||||
variable @code{cal-html-directory} specifies the default output
|
||||
directory for the HTML files.
|
||||
calendar, holiday, and diary entries. Each file applies to one month,
|
||||
and has a name of the format @file{@var{yyyy}-@var{mm}.html}, where
|
||||
@var{yyyy} and @var{mm} are the four-digit year and two-digit month,
|
||||
respectively. The variable @code{cal-html-directory} specifies the
|
||||
default output directory for the HTML files. To prevent holidays
|
||||
from being shown, customize @code{cal-html-holidays}.
|
||||
|
||||
@vindex cal-html-css-default
|
||||
Diary entries enclosed by @code{<} and @code{>} are interpreted as
|
||||
|
47
etc/NEWS
47
etc/NEWS
@ -23,18 +23,36 @@ so we will look at it and add it to the manual.
|
||||
|
||||
* Installation Changes in Emacs 24.3
|
||||
|
||||
---
|
||||
** The default toolkit has been changed to Gtk+ version 3.
|
||||
If you don't pass --with-x-toolkit to configure or if you pass
|
||||
--with-x-toolkit=gtk or --with-x-toolkit=yes, configure will try to build
|
||||
with Gtk+ version 3, and if that fails, try Gtk+ version 2.
|
||||
You can explicitly require a specific version by passing
|
||||
--with-x-toolkit=gtk2 or --with-x-toolkit=gtk3 to configure.
|
||||
|
||||
---
|
||||
** New configure option '--without-all' to disable additional features.
|
||||
This disables most of the features that are normally enabled by default.
|
||||
|
||||
---
|
||||
** New configure option '--enable-link-time-optimization' to utilize
|
||||
an appropriate feature provided by GCC since version 4.5.0.
|
||||
|
||||
---
|
||||
** New configure option '--enable-gcc-warnings', intended for developers.
|
||||
If building with GCC, this enables compile-time checks that warn about
|
||||
possibly-questionable C code. On a recent GNU system there should be
|
||||
no warnings; on older and on non-GNU systems the generated warnings
|
||||
may be useful.
|
||||
|
||||
---
|
||||
** The configuration option '--enable-use-lisp-union-type' has been
|
||||
renamed to '--enable-check-lisp-object-type', as the resulting
|
||||
Lisp_Object type no longer uses a union to implement the compile time
|
||||
check that this option enables.
|
||||
|
||||
---
|
||||
** The configure option '--disable-maintainer-mode' has been removed,
|
||||
as it was confusingly-named and rarely useful.
|
||||
|
||||
@ -60,18 +78,10 @@ directories to the search path. You must add them yourself if you want them.
|
||||
(from the bin and libexec directories, respectively). The former is
|
||||
no longer relevant, the latter is replaced by lisp (in vc-sccs.el).
|
||||
|
||||
** The configuration option '--enable-use-lisp-union-type' has been
|
||||
renamed to '--enable-check-lisp-object-type', as the resulting
|
||||
Lisp_Object type no longer uses a union to implement the compile time
|
||||
check that this option enables.
|
||||
|
||||
---
|
||||
** The default toolkit has been changed to Gtk+ version 3.
|
||||
If you don't pass --with-x-toolkit to configure or if you pass
|
||||
--with-x-toolkit=gtk or --with-x-toolkit=yes, configure will try to build
|
||||
with Gtk+ version 3, and if that fails, try Gtk+ version 2.
|
||||
You can explicitly require a specific version by passing
|
||||
--with-x-toolkit=gtk2 or --with-x-toolkit=gtk3 to configure.
|
||||
** The native Windows user interface is available for Cygwin. Passing
|
||||
--with-w32 will configure a Cygwin emacs to use the Windows user
|
||||
interface instead of the default, X11.
|
||||
|
||||
|
||||
* Startup Changes in Emacs 24.3
|
||||
@ -160,8 +170,6 @@ On encountering a fatal error, Emacs now outputs a textual description
|
||||
of the fatal signal, and a short backtrace on platforms like glibc
|
||||
that support backtraces.
|
||||
|
||||
** `message-log-max' now defaults to 1000, not 100.
|
||||
|
||||
---
|
||||
** If your Emacs was built from a bzr checkout, the new variable
|
||||
`emacs-bzr-version' contains information about the bzr revision used.
|
||||
@ -280,14 +288,16 @@ Use `Buffer-menu-name-width' and `Buffer-menu-size-width' instead.
|
||||
|
||||
** Calendar
|
||||
|
||||
+++
|
||||
*** You can customize the header text that appears above each calendar month.
|
||||
See the variable `calendar-month-header'.
|
||||
|
||||
+++
|
||||
*** New LaTeX calendar style, produced by `cal-tex-cursor-week2-summary'.
|
||||
|
||||
+++
|
||||
*** The calendars produced by cal-html include holidays.
|
||||
Customize cal-html-holidays to change this.
|
||||
Customize `cal-html-holidays' to change this.
|
||||
|
||||
** CL
|
||||
|
||||
@ -703,7 +713,7 @@ are deprecated and will be removed eventually.
|
||||
*** `compile-internal'
|
||||
*** `mode-line-inverse-video'
|
||||
*** `cvs-commit-buffer-require-final-newline'
|
||||
(use `'log-edit-require-final-newline'instead)
|
||||
(use `log-edit-require-final-newline' instead)
|
||||
*** `cvs-changelog-full-paragraphs'
|
||||
(use `log-edit-changelog-full-paragraphs' instead)
|
||||
*** `cvs-diff-ignore-marks', `cvs-diff-buffer-name'
|
||||
@ -832,7 +842,7 @@ macro-calls to be left for later expansion (as before), but will also
|
||||
result in a warning ("Eager macro-expansion skipped due to cycle")
|
||||
describing the cycle.
|
||||
|
||||
** Misc new functions:
|
||||
** Miscellaneous new functions:
|
||||
|
||||
*** `autoloadp'
|
||||
*** `autoload-do-load'.
|
||||
@ -877,6 +887,11 @@ is detected.
|
||||
Emacs now supports mouse highlight, help-echo (in the echo area), and
|
||||
mouse-autoselect-window.
|
||||
|
||||
** Two new functions are available in Cygwin builds of Emacs:
|
||||
cygwin-convert-path-from-windows and cygwin-convert-path-to-windows.
|
||||
These functions allow Lisp code to access the Cygwin file-name mapping
|
||||
machinery to convert between Cygwin and Windows-native file names.
|
||||
|
||||
** On MS-Windows Vista and later Emacs now supports symbolic links.
|
||||
|
||||
* Changes in Emacs 24.2
|
||||
|
@ -1,3 +1,20 @@
|
||||
2012-10-08 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* makefile.w32-in (obj): Add cygw32.o.
|
||||
|
||||
2012-10-08 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* emacsclient.c: Include windows.h when HAVE_NTGUI.
|
||||
(alt_display): New variable. We send the display held by this
|
||||
variable when the primary display is either unsupported or not
|
||||
present.
|
||||
(longopts): Allow display everywhere.
|
||||
(w32_set_user_model_id): Move lower in file, inside HAVE_NTGUI
|
||||
section.
|
||||
(decode_options): Use alt_display. Explain why.
|
||||
(main): Retry connection with alt_display if connection with main
|
||||
display fails.
|
||||
|
||||
2012-10-07 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* makefile.w32-in (obj): Add w32notify.o.
|
||||
|
@ -44,6 +44,10 @@ char *w32_getenv (char *);
|
||||
|
||||
#else /* !WINDOWSNT */
|
||||
|
||||
# ifdef HAVE_NTGUI
|
||||
# include <windows.h>
|
||||
# endif /* HAVE_NTGUI */
|
||||
|
||||
# include "syswait.h"
|
||||
|
||||
# ifdef HAVE_INET_SOCKETS
|
||||
@ -140,6 +144,9 @@ int current_frame = 1;
|
||||
/* The display on which Emacs should work. --display. */
|
||||
const char *display = NULL;
|
||||
|
||||
/* The alternate display we should try if Emacs does not support display. */
|
||||
const char *alt_display = NULL;
|
||||
|
||||
/* The parent window ID, if we are opening a frame via XEmbed. */
|
||||
char *parent_id = NULL;
|
||||
|
||||
@ -182,9 +189,7 @@ struct option longopts[] =
|
||||
{ "socket-name", required_argument, NULL, 's' },
|
||||
#endif
|
||||
{ "server-file", required_argument, NULL, 'f' },
|
||||
#ifndef WINDOWSNT
|
||||
{ "display", required_argument, NULL, 'd' },
|
||||
#endif
|
||||
{ "parent-id", required_argument, NULL, 'p' },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
@ -385,32 +390,6 @@ w32_getenv (char *envvar)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
w32_set_user_model_id (void)
|
||||
{
|
||||
HMODULE shell;
|
||||
HRESULT (WINAPI * set_user_model) (wchar_t * id);
|
||||
|
||||
/* On Windows 7 and later, we need to set the user model ID
|
||||
to associate emacsclient launched files with Emacs frames
|
||||
in the UI. */
|
||||
shell = LoadLibrary ("shell32.dll");
|
||||
if (shell)
|
||||
{
|
||||
set_user_model
|
||||
= (void *) GetProcAddress (shell,
|
||||
"SetCurrentProcessExplicitAppUserModelID");
|
||||
/* If the function is defined, then we are running on Windows 7
|
||||
or newer, and the UI uses this to group related windows
|
||||
together. Since emacs, runemacs, emacsclient are related, we
|
||||
want them grouped even though the executables are different,
|
||||
so we need to set a consistent ID between them. */
|
||||
if (set_user_model)
|
||||
set_user_model (L"GNU.Emacs");
|
||||
|
||||
FreeLibrary (shell);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
w32_window_app (void)
|
||||
@ -605,16 +584,29 @@ decode_options (int argc, char **argv)
|
||||
Without the -c option, we used to set `display' to $DISPLAY by
|
||||
default, but this changed the default behavior and is sometimes
|
||||
inconvenient. So we force users to use "--display $DISPLAY" if
|
||||
they want Emacs to connect to their current display. */
|
||||
they want Emacs to connect to their current display.
|
||||
|
||||
Some window systems have a notion of default display not
|
||||
reflected in the DISPLAY variable. If the user didn't give us an
|
||||
explicit display, try this platform-specific after trying the
|
||||
display in DISPLAY (if any). */
|
||||
if (!current_frame && !tty && !display)
|
||||
{
|
||||
display = egetenv ("DISPLAY");
|
||||
#ifdef NS_IMPL_COCOA
|
||||
/* Under Cocoa, we don't really use displays the same way as in X,
|
||||
so provide a dummy. */
|
||||
if (!display || strlen (display) == 0)
|
||||
display = "ns";
|
||||
/* Set these here so we use a default_display only when the user
|
||||
didn't give us an explicit display. */
|
||||
#if defined (NS_IMPL_COCOA)
|
||||
alt_display = "ns";
|
||||
#elif defined (HAVE_NTGUI)
|
||||
alt_display = "w32";
|
||||
#endif
|
||||
|
||||
display = egetenv ("DISPLAY");
|
||||
}
|
||||
|
||||
if (!display)
|
||||
{
|
||||
display = alt_display;
|
||||
alt_display = NULL;
|
||||
}
|
||||
|
||||
/* A null-string display is invalid. */
|
||||
@ -1415,10 +1407,37 @@ set_socket (int no_exit_if_error)
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
FARPROC set_fg; /* Pointer to AllowSetForegroundWindow. */
|
||||
FARPROC get_wc; /* Pointer to RealGetWindowClassA. */
|
||||
|
||||
void
|
||||
w32_set_user_model_id (void)
|
||||
{
|
||||
HMODULE shell;
|
||||
HRESULT (WINAPI * set_user_model) (wchar_t * id);
|
||||
|
||||
/* On Windows 7 and later, we need to set the user model ID
|
||||
to associate emacsclient launched files with Emacs frames
|
||||
in the UI. */
|
||||
shell = LoadLibrary ("shell32.dll");
|
||||
if (shell)
|
||||
{
|
||||
set_user_model
|
||||
= (void *) GetProcAddress (shell,
|
||||
"SetCurrentProcessExplicitAppUserModelID");
|
||||
/* If the function is defined, then we are running on Windows 7
|
||||
or newer, and the UI uses this to group related windows
|
||||
together. Since emacs, runemacs, emacsclient are related, we
|
||||
want them grouped even though the executables are different,
|
||||
so we need to set a consistent ID between them. */
|
||||
if (set_user_model)
|
||||
set_user_model (L"GNU.Emacs");
|
||||
|
||||
FreeLibrary (shell);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CALLBACK
|
||||
w32_find_emacs_process (HWND hWnd, LPARAM lParam)
|
||||
{
|
||||
@ -1467,7 +1486,7 @@ w32_give_focus (void)
|
||||
&& (get_wc = GetProcAddress (user32, "RealGetWindowClassA")))
|
||||
EnumWindows (w32_find_emacs_process, (LPARAM) 0);
|
||||
}
|
||||
#endif
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
/* Start the emacs daemon and try to connect to it. */
|
||||
|
||||
@ -1537,11 +1556,13 @@ main (int argc, char **argv)
|
||||
main_argv = argv;
|
||||
progname = argv[0];
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
/* On Windows 7 and later, we need to explicitly associate emacsclient
|
||||
with emacs so the UI behaves sensibly. */
|
||||
#ifdef HAVE_NTGUI
|
||||
/* On Windows 7 and later, we need to explicitly associate
|
||||
emacsclient with emacs so the UI behaves sensibly. This
|
||||
association does no harm if we're not actually connecting to an
|
||||
Emacs using a window display. */
|
||||
w32_set_user_model_id ();
|
||||
#endif
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
/* Process options. */
|
||||
decode_options (argc, argv);
|
||||
@ -1577,9 +1598,10 @@ main (int argc, char **argv)
|
||||
fail ();
|
||||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
if (display && !strcmp (display, "w32"))
|
||||
w32_give_focus ();
|
||||
#endif
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
/* Send over our environment and current directory. */
|
||||
if (!current_frame)
|
||||
@ -1748,46 +1770,56 @@ main (int argc, char **argv)
|
||||
if (end_p != NULL)
|
||||
*end_p++ = '\0';
|
||||
|
||||
if (strprefix ("-emacs-pid ", p))
|
||||
{
|
||||
/* -emacs-pid PID: The process id of the Emacs process. */
|
||||
emacs_pid = strtol (p + strlen ("-emacs-pid"), NULL, 10);
|
||||
}
|
||||
else if (strprefix ("-window-system-unsupported ", p))
|
||||
{
|
||||
/* -window-system-unsupported: Emacs was compiled without X
|
||||
support. Try again on the terminal. */
|
||||
nowait = 0;
|
||||
tty = 1;
|
||||
goto retry;
|
||||
}
|
||||
else if (strprefix ("-print ", p))
|
||||
{
|
||||
/* -print STRING: Print STRING on the terminal. */
|
||||
str = unquote_argument (p + strlen ("-print "));
|
||||
if (needlf)
|
||||
printf ("\n");
|
||||
printf ("%s", str);
|
||||
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
|
||||
}
|
||||
else if (strprefix ("-print-nonl ", p))
|
||||
{
|
||||
/* -print-nonl STRING: Print STRING on the terminal.
|
||||
Used to continue a preceding -print command. */
|
||||
str = unquote_argument (p + strlen ("-print-nonl "));
|
||||
printf ("%s", str);
|
||||
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
|
||||
}
|
||||
else if (strprefix ("-error ", p))
|
||||
{
|
||||
/* -error DESCRIPTION: Signal an error on the terminal. */
|
||||
str = unquote_argument (p + strlen ("-error "));
|
||||
if (needlf)
|
||||
printf ("\n");
|
||||
fprintf (stderr, "*ERROR*: %s", str);
|
||||
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
|
||||
exit_status = EXIT_FAILURE;
|
||||
}
|
||||
if (strprefix ("-emacs-pid ", p))
|
||||
{
|
||||
/* -emacs-pid PID: The process id of the Emacs process. */
|
||||
emacs_pid = strtol (p + strlen ("-emacs-pid"), NULL, 10);
|
||||
}
|
||||
else if (strprefix ("-window-system-unsupported ", p))
|
||||
{
|
||||
/* -window-system-unsupported: Emacs was compiled without support
|
||||
for whatever window system we tried. Try the alternate
|
||||
display, or, failing that, try the terminal. */
|
||||
if (alt_display)
|
||||
{
|
||||
display = alt_display;
|
||||
alt_display = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
nowait = 0;
|
||||
tty = 1;
|
||||
}
|
||||
|
||||
goto retry;
|
||||
}
|
||||
else if (strprefix ("-print ", p))
|
||||
{
|
||||
/* -print STRING: Print STRING on the terminal. */
|
||||
str = unquote_argument (p + strlen ("-print "));
|
||||
if (needlf)
|
||||
printf ("\n");
|
||||
printf ("%s", str);
|
||||
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
|
||||
}
|
||||
else if (strprefix ("-print-nonl ", p))
|
||||
{
|
||||
/* -print-nonl STRING: Print STRING on the terminal.
|
||||
Used to continue a preceding -print command. */
|
||||
str = unquote_argument (p + strlen ("-print-nonl "));
|
||||
printf ("%s", str);
|
||||
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
|
||||
}
|
||||
else if (strprefix ("-error ", p))
|
||||
{
|
||||
/* -error DESCRIPTION: Signal an error on the terminal. */
|
||||
str = unquote_argument (p + strlen ("-error "));
|
||||
if (needlf)
|
||||
printf ("\n");
|
||||
fprintf (stderr, "*ERROR*: %s", str);
|
||||
needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
|
||||
exit_status = EXIT_FAILURE;
|
||||
}
|
||||
#ifdef SIGSTOP
|
||||
else if (strprefix ("-suspend ", p))
|
||||
{
|
||||
|
@ -124,7 +124,7 @@ $(BLD)/profile.exe: $(PROFILEOBJS)
|
||||
obj = dosfns.o msdos.o \
|
||||
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
|
||||
fontset.o menu.o \
|
||||
w32.o w32console.o w32fns.o w32heap.o w32inevt.o \
|
||||
w32.o w32console.o w32fns.o w32heap.o w32inevt.o cygw32.o \
|
||||
w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \
|
||||
font.o w32font.o w32uniscribe.o w32notify.o \
|
||||
dispnew.o frame.o scroll.o xdisp.o window.o bidi.o \
|
||||
|
150
lisp/ChangeLog
150
lisp/ChangeLog
@ -1,3 +1,153 @@
|
||||
2012-10-08 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* cus-start.el (message-log-max): Set :version.
|
||||
|
||||
* calendar/calendar.el (calendar-intermonth-header): Doc fix.
|
||||
|
||||
2012-10-08 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* emacs-lisp/edebug.el (edebug-pop-to-buffer): Don't try to split
|
||||
the minibuffer window (Bug#10851).
|
||||
|
||||
2012-10-08 Fabián Ezequiel Gallina <fgallina@cuca>
|
||||
|
||||
Enhancements on forward-sexp movement.
|
||||
* progmodes/python.el (python-nav-beginning-of-statement)
|
||||
(python-nav-end-of-statement): Return point-marker.
|
||||
(python-nav-forward-sexp): lisp-like forward-sexp behavior.
|
||||
(python-info-current-symbol)
|
||||
(python-info-statement-starts-block-p): Rename from
|
||||
python-info-beginning-of-block-p.
|
||||
(python-info-statement-ends-block-p): Rename from
|
||||
python-info-end-of-block-p.
|
||||
(python-info-beginning-of-statement-p)
|
||||
(python-info-end-of-statement-p)
|
||||
(python-info-beginning-of-block-p, python-info-end-of-block-p):
|
||||
New functions.
|
||||
|
||||
2012-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* comint.el (comint-preinput-scroll-to-bottom): Preserve the
|
||||
frame-selected-windows.
|
||||
|
||||
2012-10-08 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* battery.el (battery-status-function): Check for
|
||||
w32-battery-status itself, not system-time windows-nt.
|
||||
|
||||
* frame.el: Require cl-lib.
|
||||
(display-format-alist): New variable mapping frame types to
|
||||
functions that initialize them.
|
||||
(window-system-for-display): New function: interprets
|
||||
display-format-alist.
|
||||
(make-frame-on-display): Remove existing display-selection logic
|
||||
and just forward to make-frame, which will now DTRT.
|
||||
(make-frame): Restructure to use window-system-for-display to
|
||||
figure out how to create a frame on a given display.
|
||||
(display-mouse-p): Look for frame-type w32, not a particular
|
||||
system-type.
|
||||
|
||||
* loadup.el: Load w32 lisp code when we have the w32 feature.
|
||||
|
||||
* mouse.el (mouse-yank-primarY): Look for frame-type w32, not
|
||||
system-type windows-nt.
|
||||
|
||||
* server.el (server-create-window-system-frame): Look for window
|
||||
type.
|
||||
(server-proces-filter): Only force a window system when windows-nt
|
||||
_and_ w32. Explain why.
|
||||
|
||||
* simple.el (normal-erase-is-backspace-mode): Add w32 to the list
|
||||
of window systems we configure for the mode.
|
||||
|
||||
* startup.el (command-line): Mark window system is initialized
|
||||
after we've done it.
|
||||
|
||||
* common-win.el (x-select-text): Look for w32, not windows-nt.
|
||||
|
||||
* ns-win.el: Require cl-lib. Add ourselves to
|
||||
display-format-alist.
|
||||
(ns-initialize-window-system): Assert we're not initialized twice.
|
||||
|
||||
* w32-win.el: Enable lexical binding; require cl-lib; add
|
||||
ourselves to display-format-alist.
|
||||
(w32-handle-dropped-file): Convert incoming dropped files from
|
||||
Windows paths to Cygwin ones before passing them on to the rest of
|
||||
Emacs.
|
||||
(w32-drag-n-drop): New paramter new-frame. Simplify logic.
|
||||
(w32-initialize-window-system): Assert we're not initialized twice.
|
||||
|
||||
* x-win.el: Require cl-lib; add ourselves to display-format-alist.
|
||||
(x-initialize-window-system): Assert we're not initialized twice.
|
||||
|
||||
* w32-common-fns.el: New File.
|
||||
(w32-version, w32-using-nt, w32-get-clipboard-data)
|
||||
(w32-set-clipboard-data, x-set-selection, x-get-selection)
|
||||
(w32-charset-info-alist, x-last-selected, text)
|
||||
(x-get-selection-value, x-selection-value): Move here.
|
||||
|
||||
* w32-fns.el: Require w32-common-fns.
|
||||
(w32-version, w32-using-nt, w32-get-clipboard-data)
|
||||
(w32-set-clipboard-data, x-set-selection, x-get-selection)
|
||||
(w32-charset-info-alist, x-last-selected, text)
|
||||
(x-get-selection-value, x-selection-value): Move to
|
||||
w32-common-fns.
|
||||
|
||||
* w32-vars.el:
|
||||
(w32-allow-system-shell, w32-system-shells): Define only in
|
||||
non-cygwin case.
|
||||
|
||||
2012-10-07 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* subr.el (read-passwd-map): Don't use `defconst' (bug#12597).
|
||||
(read-passwd): Remove a few more potential sources of leaks.
|
||||
|
||||
2012-10-07 Fabián Ezequiel Gallina <fgallina@cuca>
|
||||
|
||||
* progmodes/python.el (inferior-python-mode)
|
||||
(python-shell-make-comint): Fix initialization of local
|
||||
variables copied from parent buffer.
|
||||
|
||||
2012-10-07 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* term/ns-win.el (ns-read-file-name): Update declaration to match
|
||||
nsfns.m.
|
||||
(ns-respond-to-change-font): Change fontsize separatly so we are sure
|
||||
it is set when font is acted upon.
|
||||
|
||||
2012-10-07 Fabián Ezequiel Gallina <fgallina@cuca>
|
||||
|
||||
Enhancements to indentation.
|
||||
* progmodes/python.el (python-indent-context): Give priority to
|
||||
inside-string context. Make comments indentation markers.
|
||||
(python-indent-region): Do not mess with strings, unless it's the
|
||||
enclosing set of quotes.
|
||||
|
||||
2012-10-07 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* window.el (internal--before-save-selected-window)
|
||||
(internal--after-save-selected-window): New functions extracted from
|
||||
save-selected-window. Make sure we return the `alist' we construct.
|
||||
(save-selected-window): Use them.
|
||||
|
||||
* textmodes/tex-mode.el (tex-recenter-output-buffer):
|
||||
Use with-selected-window.
|
||||
|
||||
* emacs-lisp/autoload.el (make-autoload): Add `cl-defmacro' to the
|
||||
forms that define macros (bug#12593).
|
||||
|
||||
2012-10-07 Kenichi Handa <handa@gnu.org>
|
||||
|
||||
* international/mule-conf.el (compound-text-with-extensions):
|
||||
Add :mime-charset property as x-ctext.
|
||||
|
||||
2012-10-07 Stefan Merten <smerten@oekonux.de>
|
||||
|
||||
* textmodes/rst.el (rst-new-adornment-down, rst-indent-field)
|
||||
(rst-indent-literal-normal, rst-indent-literal-minimized)
|
||||
(rst-indent-comment): Correct :version tag.
|
||||
(rst-official-cvs-rev): Correct version string.
|
||||
|
||||
2012-10-07 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* subr.el (w32notify-handle-event): New function.
|
||||
|
@ -60,7 +60,7 @@
|
||||
(> (buffer-size) 0)))
|
||||
(error nil)))
|
||||
'battery-pmset)
|
||||
((eq system-type 'windows-nt)
|
||||
((fboundp 'w32-battery-status)
|
||||
'w32-battery-status))
|
||||
"Function for getting battery status information.
|
||||
The function has to return an alist of conversion definitions.
|
||||
|
@ -511,7 +511,7 @@ Must be at least one less than `calendar-column-width'."
|
||||
:version "23.1")
|
||||
|
||||
(defcustom calendar-intermonth-header nil
|
||||
"Header text display in the space to the left of each calendar month.
|
||||
"Header text to display in the space to the left of each calendar month.
|
||||
See `calendar-intermonth-text'."
|
||||
:group 'calendar
|
||||
:initialize 'custom-initialize-default
|
||||
|
@ -1,3 +1,16 @@
|
||||
2012-10-07 David Engster <deng@randomsample.de>
|
||||
|
||||
* semantic/wisent/python.el (semantic-ctxt-current-function)
|
||||
(semantic-ctxt-current-assignment): New overrides, simply
|
||||
returning nil. The defaults do not work correctly and can send
|
||||
the parser in an infinite loop (bug#12458).
|
||||
|
||||
* semantic/ede-grammar.el (project-compile-target): Fix grammar
|
||||
compilation after introduction of %provide statement.
|
||||
|
||||
* semantic.el (semantic-new-buffer-setup-functions): Remove setup
|
||||
function for `f90-mode', since the parser only exists upstream.
|
||||
|
||||
2012-10-06 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* semantic/complete.el (semantic-displayor-tooltip-max-tags): Doc fix.
|
||||
|
@ -273,7 +273,6 @@ setup to use Semantic."
|
||||
(js-mode . wisent-javascript-setup-parser)
|
||||
(python-mode . wisent-python-default-setup)
|
||||
(scheme-mode . semantic-default-scheme-setup)
|
||||
(f90-mode . semantic-default-f90-setup)
|
||||
(srecode-template-mode . srecode-template-setup-parser)
|
||||
(texinfo-mode . semantic-default-texi-setup)
|
||||
(makefile-automake-mode . semantic-default-make-setup)
|
||||
|
@ -143,12 +143,10 @@ Lays claim to all -by.el, and -wy.el files."
|
||||
(utd 0))
|
||||
(mapc (lambda (src)
|
||||
(with-current-buffer (find-file-noselect src)
|
||||
(save-excursion
|
||||
(semantic-grammar-create-package))
|
||||
;; After compile, the current buffer is the compiled grammar.
|
||||
;; Save and compile it.
|
||||
(save-buffer)
|
||||
(let* ((src (buffer-file-name))
|
||||
(let* ((package (semantic-grammar-create-package))
|
||||
(fname (progn (string-match ".*/\\(.+\\.el\\)" package)
|
||||
(match-string 1 package)))
|
||||
(src (with-current-buffer fname (buffer-file-name)))
|
||||
(csrc (concat (file-name-sans-extension src) ".elc")))
|
||||
(if (< emacs-major-version 24)
|
||||
;; Does not have `byte-recompile-file'
|
||||
|
@ -478,6 +478,22 @@ To be implemented for Python! For now just return nil."
|
||||
(let ((name (semantic-tag-name tag)))
|
||||
(concat (mapconcat 'identity (split-string name "\\.") "/") ".py")))
|
||||
|
||||
;; Override ctxt-current-function/assignment defaults, since they do
|
||||
;; not work properly with Python code, even leading to endless loops
|
||||
;; (see bug #xxxxx).
|
||||
(define-mode-local-override semantic-ctxt-current-function python-mode (&optional point)
|
||||
"Return the current function call the cursor is in at POINT.
|
||||
The function returned is the one accepting the arguments that
|
||||
the cursor is currently in. It will not return function symbol if the
|
||||
cursor is on the text representing that function."
|
||||
nil)
|
||||
|
||||
(define-mode-local-override semantic-ctxt-current-assignment python-mode (&optional point)
|
||||
"Return the current assignment near the cursor at POINT.
|
||||
Return a list as per `semantic-ctxt-current-symbol'.
|
||||
Return nil if there is nothing relevant."
|
||||
nil)
|
||||
|
||||
;;; Enable Semantic in `python-mode'.
|
||||
;;
|
||||
|
||||
|
@ -2088,8 +2088,7 @@ This function should be a pre-command hook."
|
||||
(if (and comint-scroll-to-bottom-on-input
|
||||
(memq this-command '(self-insert-command comint-magic-space yank
|
||||
hilit-yank)))
|
||||
(let* ((selected (selected-window))
|
||||
(current (current-buffer))
|
||||
(let* ((current (current-buffer))
|
||||
(process (get-buffer-process current))
|
||||
(scroll comint-scroll-to-bottom-on-input))
|
||||
(if (and process (< (point) (process-mark process)))
|
||||
@ -2099,10 +2098,8 @@ This function should be a pre-command hook."
|
||||
(lambda (window)
|
||||
(if (and (eq (window-buffer window) current)
|
||||
(or (eq scroll t) (eq scroll 'all)))
|
||||
(progn
|
||||
(select-window window)
|
||||
(goto-char (point-max))
|
||||
(select-window selected))))
|
||||
(with-selected-window window
|
||||
(goto-char (point-max)))))
|
||||
nil t))))))
|
||||
|
||||
(defvar follow-mode)
|
||||
@ -2783,11 +2780,8 @@ the load or compile."
|
||||
(if (and buff
|
||||
(buffer-modified-p buff)
|
||||
(y-or-n-p (format "Save buffer %s first? " (buffer-name buff))))
|
||||
;; save BUFF.
|
||||
(let ((old-buffer (current-buffer)))
|
||||
(set-buffer buff)
|
||||
(save-buffer)
|
||||
(set-buffer old-buffer)))))
|
||||
(with-current-buffer buff
|
||||
(save-buffer)))))
|
||||
|
||||
(defun comint-extract-string ()
|
||||
"Return string around point, or nil."
|
||||
|
@ -452,7 +452,8 @@ since it could result in memory overflow and make Emacs crash."
|
||||
(message-log-max debug (choice (const :tag "Disable" nil)
|
||||
(integer :menu-tag "lines"
|
||||
:format "%v")
|
||||
(other :tag "Unlimited" t)))
|
||||
(other :tag "Unlimited" t))
|
||||
"24.3")
|
||||
(unibyte-display-via-language-environment mule boolean)
|
||||
(blink-cursor-alist cursor alist "22.1")
|
||||
(overline-margin display integer "22.1")
|
||||
|
@ -153,7 +153,7 @@ expression, in which case we want to handle forms differently."
|
||||
easy-mmode-define-minor-mode define-minor-mode
|
||||
cl-defun defun* cl-defmacro defmacro*
|
||||
define-overloadable-function))
|
||||
(let* ((macrop (memq car '(defmacro defmacro*)))
|
||||
(let* ((macrop (memq car '(defmacro cl-defmacro defmacro*)))
|
||||
(name (nth 1 form))
|
||||
(args (pcase car
|
||||
((or `defun `defmacro
|
||||
|
@ -371,7 +371,7 @@ Return the result of the last expression in BODY."
|
||||
((get-buffer-window buffer 0))
|
||||
((one-window-p 'nomini)
|
||||
;; When there's one window only, split it.
|
||||
(split-window))
|
||||
(split-window (minibuffer-selected-window)))
|
||||
((let ((trace-window (get-buffer-window edebug-trace-buffer)))
|
||||
(catch 'found
|
||||
(dolist (elt (window-list nil 'nomini))
|
||||
@ -382,7 +382,7 @@ Return the result of the last expression in BODY."
|
||||
(throw 'found elt))))))
|
||||
;; All windows are dedicated or show `edebug-trace-buffer', split
|
||||
;; selected one.
|
||||
(t (split-window))))
|
||||
(t (split-window (minibuffer-selected-window)))))
|
||||
(set-window-buffer window buffer)
|
||||
(select-window window)
|
||||
(set-window-hscroll window 0)) ;; should this be??
|
||||
|
@ -96,7 +96,7 @@ ALTERNATIVE2 etc."
|
||||
;; This is defined originally in xfaces.c.
|
||||
(defcustom face-font-registry-alternatives
|
||||
(mapcar (lambda (arg) (mapcar 'purecopy arg))
|
||||
(if (eq system-type 'windows-nt)
|
||||
(if (featurep 'w32)
|
||||
'(("iso8859-1" "ms-oemlatin")
|
||||
("gb2312.1980" "gb2312" "gbk" "gb18030")
|
||||
("jisx0208.1990" "jisx0208.1983" "jisx0208.1978")
|
||||
|
@ -25,6 +25,8 @@
|
||||
;;; Commentary:
|
||||
|
||||
;;; Code:
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
(defvar frame-creation-function-alist
|
||||
(list (cons nil
|
||||
(if (fboundp 'tty-create-frame-with-faces)
|
||||
@ -45,6 +47,12 @@ Then, for frames on WINDOW-SYSTEM, any parameters specified in
|
||||
ALIST supersede the corresponding parameters specified in
|
||||
`default-frame-alist'.")
|
||||
|
||||
(defvar display-format-alist nil
|
||||
"Alist of patterns to decode display names.
|
||||
The car of each entry is a regular expression matching a display
|
||||
name string. The cdr is a symbol giving the window-system that
|
||||
handles the corresponding kind of display.")
|
||||
|
||||
;; The initial value given here used to ask for a minibuffer.
|
||||
;; But that's not necessary, because the default is to have one.
|
||||
;; By not specifying it here, we let an X resource specify it.
|
||||
@ -510,31 +518,19 @@ is not considered (see `next-frame')."
|
||||
0))
|
||||
(select-frame-set-input-focus (selected-frame)))
|
||||
|
||||
(declare-function x-initialize-window-system "term/x-win" ())
|
||||
(declare-function ns-initialize-window-system "term/ns-win" ())
|
||||
(defvar x-display-name) ; term/x-win
|
||||
(defun window-system-for-display (display)
|
||||
"Return the window system for DISPLAY.
|
||||
Return nil if we don't know how to interpret DISPLAY."
|
||||
(cl-loop for descriptor in display-format-alist
|
||||
for pattern = (car descriptor)
|
||||
for system = (cdr descriptor)
|
||||
when (string-match-p pattern display) return system))
|
||||
|
||||
(defun make-frame-on-display (display &optional parameters)
|
||||
"Make a frame on display DISPLAY.
|
||||
The optional argument PARAMETERS specifies additional frame parameters."
|
||||
(interactive "sMake frame on display: ")
|
||||
(cond ((featurep 'ns)
|
||||
(when (and (boundp 'ns-initialized) (not ns-initialized))
|
||||
(setq x-display-name display)
|
||||
(ns-initialize-window-system))
|
||||
(make-frame `((window-system . ns)
|
||||
(display . ,display) . ,parameters)))
|
||||
((eq system-type 'windows-nt)
|
||||
;; On Windows, ignore DISPLAY.
|
||||
(make-frame parameters))
|
||||
(t
|
||||
(unless (string-match-p "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display)
|
||||
(error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN"))
|
||||
(when (and (boundp 'x-initialized) (not x-initialized))
|
||||
(setq x-display-name display)
|
||||
(x-initialize-window-system))
|
||||
(make-frame `((window-system . x)
|
||||
(display . ,display) . ,parameters)))))
|
||||
(make-frame (cons (cons 'display display) parameters)))
|
||||
|
||||
(declare-function x-close-connection "xfns.c" (terminal))
|
||||
|
||||
@ -616,6 +612,8 @@ neither or both.
|
||||
(window-system . nil) The frame should be displayed on a terminal device.
|
||||
(window-system . x) The frame should be displayed in an X window.
|
||||
|
||||
(display . \":0\") The frame should appear on display :0.
|
||||
|
||||
(terminal . TERMINAL) The frame should use the terminal object TERMINAL.
|
||||
|
||||
In addition, any parameter specified in `default-frame-alist',
|
||||
@ -626,11 +624,15 @@ this function runs the hook `before-make-frame-hook'. After
|
||||
creating the frame, it runs the hook `after-make-frame-functions'
|
||||
with one arg, the newly created frame.
|
||||
|
||||
If a display parameter is supplied and a window-system is not,
|
||||
guess the window-system from the display.
|
||||
|
||||
On graphical displays, this function does not itself make the new
|
||||
frame the selected frame. However, the window system may select
|
||||
the new frame according to its own rules."
|
||||
(interactive)
|
||||
(let* ((w (cond
|
||||
(let* ((display (cdr (assq 'display parameters)))
|
||||
(w (cond
|
||||
((assq 'terminal parameters)
|
||||
(let ((type (terminal-live-p (cdr (assq 'terminal parameters)))))
|
||||
(cond
|
||||
@ -640,6 +642,10 @@ the new frame according to its own rules."
|
||||
(t type))))
|
||||
((assq 'window-system parameters)
|
||||
(cdr (assq 'window-system parameters)))
|
||||
(display
|
||||
(or (window-system-for-display display)
|
||||
(error "Don't know how to interpret display \"%S\""
|
||||
display)))
|
||||
(t window-system)))
|
||||
(frame-creation-function (cdr (assq w frame-creation-function-alist)))
|
||||
(oldframe (selected-frame))
|
||||
@ -647,6 +653,11 @@ the new frame according to its own rules."
|
||||
frame)
|
||||
(unless frame-creation-function
|
||||
(error "Don't know how to create a frame on window system %s" w))
|
||||
|
||||
(unless (get w 'window-system-initialized)
|
||||
(funcall (cdr (assq w window-system-initialization-alist)))
|
||||
(put w 'window-system-initialized t))
|
||||
|
||||
;; Add parameters from `window-system-default-frame-alist'.
|
||||
(dolist (p (cdr (assq w window-system-default-frame-alist)))
|
||||
(unless (assq (car p) params)
|
||||
@ -1260,7 +1271,7 @@ frame's display)."
|
||||
(cond
|
||||
((eq frame-type 'pc)
|
||||
(msdos-mouse-p))
|
||||
((eq system-type 'windows-nt)
|
||||
((eq frame-type 'w32)
|
||||
(with-no-warnings
|
||||
(> w32-num-mouse-buttons 0)))
|
||||
((memq frame-type '(x ns))
|
||||
|
@ -2670,7 +2670,8 @@ See also `locale-charset-language-names', `locale-language-names',
|
||||
;; On Windows, override locale-coding-system,
|
||||
;; default-file-name-coding-system, keyboard-coding-system,
|
||||
;; terminal-coding-system with system codepage.
|
||||
(when (boundp 'w32-ansi-code-page)
|
||||
(when (and (eq system-type 'windows-nt)
|
||||
(boundp 'w32-ansi-code-page))
|
||||
(let ((code-page-coding (intern (format "cp%d" w32-ansi-code-page))))
|
||||
(when (coding-system-p code-page-coding)
|
||||
(unless frame (setq locale-coding-system code-page-coding))
|
||||
|
@ -1458,7 +1458,8 @@ for decoding and encoding files, process I/O, etc."
|
||||
:flags '(ascii-at-eol ascii-at-cntl long-form
|
||||
designation locking-shift single-shift)
|
||||
:post-read-conversion 'ctext-post-read-conversion
|
||||
:pre-write-conversion 'ctext-pre-write-conversion)
|
||||
:pre-write-conversion 'ctext-pre-write-conversion
|
||||
:mime-charset 'x-ctext)
|
||||
|
||||
(define-coding-system-alias
|
||||
'x-ctext-with-extensions 'compound-text-with-extensions)
|
||||
|
@ -237,15 +237,18 @@
|
||||
(load "term/common-win")
|
||||
(load "term/x-win")))
|
||||
|
||||
(if (eq system-type 'windows-nt)
|
||||
(if (or (eq system-type 'windows-nt)
|
||||
(featurep 'w32))
|
||||
(progn
|
||||
(load "w32-vars")
|
||||
(load "term/common-win")
|
||||
(load "w32-vars")
|
||||
(load "term/w32-win")
|
||||
(load "ls-lisp")
|
||||
(load "disp-table")
|
||||
(load "dos-w32")
|
||||
(load "w32-fns")))
|
||||
(load "w32-common-fns")
|
||||
(when (eq system-type 'windows-nt)
|
||||
(load "w32-fns")
|
||||
(load "ls-lisp")
|
||||
(load "dos-w32"))))
|
||||
(if (eq system-type 'ms-dos)
|
||||
(progn
|
||||
(load "dos-w32")
|
||||
|
@ -1151,7 +1151,7 @@ regardless of where you click."
|
||||
(or mouse-yank-at-point (mouse-set-point click))
|
||||
(let ((primary
|
||||
(cond
|
||||
((eq system-type 'windows-nt)
|
||||
((eq (framep (selected-frame)) 'w32)
|
||||
;; MS-Windows emulates PRIMARY in x-get-selection, but not
|
||||
;; in x-get-selection-value (the latter only accesses the
|
||||
;; clipboard). So try PRIMARY first, in case they selected
|
||||
|
@ -327,8 +327,8 @@ terminated by the end of line (i.e. `comment-end' is empty)."
|
||||
;;;###autoload
|
||||
(defun comment-normalize-vars (&optional noerror)
|
||||
"Check and setup the variables needed by other commenting functions.
|
||||
Functions autoloaded from newcomment.el, being entry points, should call
|
||||
this function before any other, so the rest of the code can assume that
|
||||
Any command calling functions from newcomment.el, being entry points, should
|
||||
call this function before any other, so the rest of the code can assume that
|
||||
the variables are properly set."
|
||||
(unless (and (not comment-start) noerror)
|
||||
(unless comment-start
|
||||
|
@ -676,12 +676,12 @@ START is the buffer position where the sexp starts."
|
||||
(goto-char (line-beginning-position))
|
||||
(bobp))
|
||||
'no-indent)
|
||||
;; Inside a paren
|
||||
((setq start (python-syntax-context 'paren ppss))
|
||||
'inside-paren)
|
||||
;; Inside string
|
||||
((setq start (python-syntax-context 'string ppss))
|
||||
'inside-string)
|
||||
;; Inside a paren
|
||||
((setq start (python-syntax-context 'paren ppss))
|
||||
'inside-paren)
|
||||
;; After backslash
|
||||
((setq start (when (not (or (python-syntax-context 'string ppss)
|
||||
(python-syntax-context 'comment ppss)))
|
||||
@ -710,7 +710,7 @@ START is the buffer position where the sexp starts."
|
||||
;; After normal line
|
||||
((setq start (save-excursion
|
||||
(back-to-indentation)
|
||||
(python-util-forward-comment -1)
|
||||
(skip-chars-backward (rx (or whitespace ?\n)))
|
||||
(python-nav-beginning-of-statement)
|
||||
(point-marker)))
|
||||
'after-line)
|
||||
@ -973,7 +973,16 @@ Called from a program, START and END specify the region to indent."
|
||||
(back-to-indentation)
|
||||
(setq word (current-word))
|
||||
(forward-line 1)
|
||||
(when word
|
||||
(when (and word
|
||||
;; Don't mess with strings, unless it's the
|
||||
;; enclosing set of quotes.
|
||||
(or (not (python-syntax-context 'string))
|
||||
(eq
|
||||
(syntax-after
|
||||
(+ (1- (point))
|
||||
(current-indentation)
|
||||
(python-syntax-count-quotes (char-after) (point))))
|
||||
(string-to-syntax "|"))))
|
||||
(beginning-of-line)
|
||||
(delete-horizontal-space)
|
||||
(indent-to (python-indent-calculate-indentation)))))
|
||||
@ -1160,7 +1169,8 @@ Returns nil if point is not in a def or class."
|
||||
(python-info-line-ends-backslash-p))
|
||||
(python-syntax-context 'string)
|
||||
(python-syntax-context 'paren))
|
||||
(forward-line -1)))))
|
||||
(forward-line -1))))
|
||||
(point-marker))
|
||||
|
||||
(defun python-nav-end-of-statement ()
|
||||
"Move to end of current statement."
|
||||
@ -1171,7 +1181,8 @@ Returns nil if point is not in a def or class."
|
||||
(python-info-line-ends-backslash-p)
|
||||
(python-syntax-context 'string)
|
||||
(python-syntax-context 'paren))
|
||||
(forward-line 1)))))
|
||||
(forward-line 1))))
|
||||
(point-marker))
|
||||
|
||||
(defun python-nav-backward-statement (&optional arg)
|
||||
"Move backward to previous statement.
|
||||
@ -1286,151 +1297,104 @@ When ARG > 0 move forward, else if ARG is < 0."
|
||||
(while (and (funcall search-fn paren-regexp nil t)
|
||||
(python-syntax-context 'paren)))))))
|
||||
|
||||
(defun python-nav--forward-sexp ()
|
||||
"Move to forward sexp."
|
||||
(case (python-syntax-context-type)
|
||||
(string
|
||||
;; Inside of a string, get out of it.
|
||||
(while (and (re-search-forward "[\"']" nil t)
|
||||
(python-syntax-context 'string))))
|
||||
(comment
|
||||
;; Inside of a comment, just move forward.
|
||||
(python-util-forward-comment))
|
||||
(paren
|
||||
(python-nav-lisp-forward-sexp-safe 1))
|
||||
(t
|
||||
(if (and (not (eobp))
|
||||
(= (syntax-class (syntax-after (point))) 4))
|
||||
;; Looking an open-paren
|
||||
(python-nav-lisp-forward-sexp-safe 1)
|
||||
(let ((block-starting-pos
|
||||
(save-excursion (python-nav-beginning-of-block)))
|
||||
(block-ending-pos
|
||||
(save-excursion (python-nav-end-of-block)))
|
||||
(next-block-starting-pos
|
||||
(save-excursion (python-nav-forward-block))))
|
||||
(cond
|
||||
((not block-starting-pos)
|
||||
;; Not inside a block, move to closest one.
|
||||
(and next-block-starting-pos
|
||||
(goto-char next-block-starting-pos)))
|
||||
((= (point) block-starting-pos)
|
||||
;; Point is at beginning of block
|
||||
(if (and next-block-starting-pos
|
||||
(< next-block-starting-pos block-ending-pos))
|
||||
;; Beginning of next block is closer than current's
|
||||
;; end, move to it.
|
||||
(goto-char next-block-starting-pos)
|
||||
(goto-char block-ending-pos)))
|
||||
((= block-ending-pos (point))
|
||||
;; Point is at end of current block
|
||||
(let ((parent-block-end-pos
|
||||
(save-excursion
|
||||
(python-util-forward-comment)
|
||||
(python-nav-beginning-of-block)
|
||||
(python-nav-end-of-block))))
|
||||
(if (and parent-block-end-pos
|
||||
(or (not next-block-starting-pos)
|
||||
(> next-block-starting-pos parent-block-end-pos)))
|
||||
;; If the parent block ends before next block
|
||||
;; starts move to it.
|
||||
(goto-char parent-block-end-pos)
|
||||
(and next-block-starting-pos
|
||||
(goto-char next-block-starting-pos)))))
|
||||
(t (python-nav-end-of-block))))))))
|
||||
(defun python-nav--forward-sexp (&optional dir)
|
||||
"Move to forward sexp.
|
||||
With positive Optional argument DIR direction move forward, else
|
||||
backwards."
|
||||
(setq dir (or dir 1))
|
||||
(unless (= dir 0)
|
||||
(let* ((forward-p (if (> dir 0)
|
||||
(and (setq dir 1) t)
|
||||
(and (setq dir -1) nil)))
|
||||
(re-search-fn (if forward-p
|
||||
're-search-forward
|
||||
're-search-backward))
|
||||
(context-type (python-syntax-context-type)))
|
||||
(cond
|
||||
((eq context-type 'string)
|
||||
;; Inside of a string, get out of it.
|
||||
(while (and (funcall re-search-fn "[\"']" nil t)
|
||||
(python-syntax-context 'string))))
|
||||
((eq context-type 'comment)
|
||||
;; Inside of a comment, just move forward.
|
||||
(python-util-forward-comment dir))
|
||||
((or (eq context-type 'paren)
|
||||
(and forward-p (looking-at (python-rx open-paren)))
|
||||
(and (not forward-p)
|
||||
(eq (syntax-class (syntax-after (1- (point))))
|
||||
(car (string-to-syntax ")")))))
|
||||
;; Inside a paren or looking at it, lisp knows what to do.
|
||||
(python-nav-lisp-forward-sexp-safe dir))
|
||||
(t
|
||||
;; This part handles the lispy feel of
|
||||
;; `python-nav-forward-sexp'. Knowing everything about the
|
||||
;; current context and the context of the next sexp tries to
|
||||
;; follow the lisp sexp motion commands in a symmetric manner.
|
||||
(let* ((context
|
||||
(cond
|
||||
((python-info-beginning-of-block-p) 'block-start)
|
||||
((python-info-end-of-block-p) 'block-end)
|
||||
((python-info-beginning-of-statement-p) 'statement-start)
|
||||
((python-info-end-of-statement-p) 'statement-end)))
|
||||
(next-sexp-pos
|
||||
(save-excursion
|
||||
(python-nav-lisp-forward-sexp-safe dir)
|
||||
(point)))
|
||||
(next-sexp-context
|
||||
(save-excursion
|
||||
(goto-char next-sexp-pos)
|
||||
(cond
|
||||
((python-info-beginning-of-block-p) 'block-start)
|
||||
((python-info-end-of-block-p) 'block-end)
|
||||
((python-info-beginning-of-statement-p) 'statement-start)
|
||||
((python-info-end-of-statement-p) 'statement-end)
|
||||
((python-info-statement-starts-block-p) 'starts-block)
|
||||
((python-info-statement-ends-block-p) 'ends-block)))))
|
||||
(if forward-p
|
||||
(cond ((and (not (eobp))
|
||||
(python-info-current-line-empty-p))
|
||||
(python-util-forward-comment dir)
|
||||
(python-nav--forward-sexp dir))
|
||||
((eq context 'block-start)
|
||||
(python-nav-end-of-block))
|
||||
((eq context 'statement-start)
|
||||
(python-nav-end-of-statement))
|
||||
((and (memq context '(statement-end block-end))
|
||||
(eq next-sexp-context 'ends-block))
|
||||
(goto-char next-sexp-pos)
|
||||
(python-nav-end-of-block))
|
||||
((and (memq context '(statement-end block-end))
|
||||
(eq next-sexp-context 'starts-block))
|
||||
(goto-char next-sexp-pos)
|
||||
(python-nav-end-of-block))
|
||||
((memq context '(statement-end block-end))
|
||||
(goto-char next-sexp-pos)
|
||||
(python-nav-end-of-statement))
|
||||
(t (goto-char next-sexp-pos)))
|
||||
(cond ((and (not (bobp))
|
||||
(python-info-current-line-empty-p))
|
||||
(python-util-forward-comment dir)
|
||||
(python-nav--forward-sexp dir))
|
||||
((eq context 'block-end)
|
||||
(python-nav-beginning-of-block))
|
||||
((eq context 'statement-end)
|
||||
(python-nav-beginning-of-statement))
|
||||
((and (memq context '(statement-start block-start))
|
||||
(eq next-sexp-context 'starts-block))
|
||||
(goto-char next-sexp-pos)
|
||||
(python-nav-beginning-of-block))
|
||||
((and (memq context '(statement-start block-start))
|
||||
(eq next-sexp-context 'ends-block))
|
||||
(goto-char next-sexp-pos)
|
||||
(python-nav-beginning-of-block))
|
||||
((memq context '(statement-start block-start))
|
||||
(goto-char next-sexp-pos)
|
||||
(python-nav-beginning-of-statement))
|
||||
(t (goto-char next-sexp-pos))))))))))
|
||||
|
||||
(defun python-nav--backward-sexp ()
|
||||
"Move to backward sexp."
|
||||
(case (python-syntax-context-type)
|
||||
(string
|
||||
;; Inside of a string, get out of it.
|
||||
(while (and (re-search-backward "[\"']" nil t)
|
||||
(python-syntax-context 'string))))
|
||||
(comment
|
||||
;; Inside of a comment, just move backward.
|
||||
(python-util-forward-comment -1))
|
||||
(paren
|
||||
;; Handle parens like we are lisp.
|
||||
(python-nav-lisp-forward-sexp-safe -1))
|
||||
(t
|
||||
(let* ((block-starting-pos
|
||||
(save-excursion (python-nav-beginning-of-block)))
|
||||
(block-ending-pos
|
||||
(save-excursion (python-nav-end-of-block)))
|
||||
(prev-block-ending-pos
|
||||
(save-excursion (when (python-nav-backward-block)
|
||||
(python-nav-end-of-block))))
|
||||
(prev-block-parent-ending-pos
|
||||
(save-excursion
|
||||
(when prev-block-ending-pos
|
||||
(goto-char prev-block-ending-pos)
|
||||
(python-util-forward-comment)
|
||||
(python-nav-beginning-of-block)
|
||||
(python-nav-end-of-block)))))
|
||||
(if (and (not (bobp))
|
||||
(= (syntax-class (syntax-after (1- (point)))) 5))
|
||||
;; Char before point is a paren closing char, handle it
|
||||
;; like we are lisp.
|
||||
(python-nav-lisp-forward-sexp-safe -1)
|
||||
(cond
|
||||
((not block-ending-pos)
|
||||
;; Not in and ending pos, move to end of previous block.
|
||||
(and (python-nav-backward-block)
|
||||
(python-nav-end-of-block)))
|
||||
((= (point) block-ending-pos)
|
||||
;; In ending pos, we need to search backwards for the
|
||||
;; closest point looking the list of candidates from here.
|
||||
(let ((candidates))
|
||||
(dolist (name
|
||||
'(prev-block-parent-ending-pos
|
||||
prev-block-ending-pos
|
||||
block-ending-pos
|
||||
block-starting-pos))
|
||||
(when (and (symbol-value name)
|
||||
(< (symbol-value name) (point)))
|
||||
(add-to-list 'candidates (symbol-value name))))
|
||||
(goto-char (apply 'max candidates))))
|
||||
((> (point) block-ending-pos)
|
||||
;; After an ending position, move to it.
|
||||
(goto-char block-ending-pos))
|
||||
((= (point) block-starting-pos)
|
||||
;; On a block starting position.
|
||||
(if (not (> (point) (or prev-block-ending-pos (point))))
|
||||
;; Point is after the end position of the block that
|
||||
;; wraps the current one, just move a block backward.
|
||||
(python-nav-backward-block)
|
||||
;; If we got here we are facing a case like this one:
|
||||
;;
|
||||
;; try:
|
||||
;; return here()
|
||||
;; except Exception as e:
|
||||
;;
|
||||
;; Where point is on the "except" and must move to the
|
||||
;; end of "here()".
|
||||
(goto-char prev-block-ending-pos)
|
||||
(let ((parent-block-ending-pos
|
||||
(save-excursion
|
||||
(python-nav-forward-sexp)
|
||||
(and (not (looking-at (python-rx block-start)))
|
||||
(point)))))
|
||||
(when (and parent-block-ending-pos
|
||||
(> parent-block-ending-pos prev-block-ending-pos))
|
||||
;; If we got here we are facing a case like this one:
|
||||
;;
|
||||
;; except ImportError:
|
||||
;; if predicate():
|
||||
;; processing()
|
||||
;; here()
|
||||
;; except AttributeError:
|
||||
;;
|
||||
;; Where point is on the "except" and must move to
|
||||
;; the end of "here()". Without this extra step we'd
|
||||
;; just get to the end of processing().
|
||||
(goto-char parent-block-ending-pos)))))
|
||||
(t
|
||||
(if (and prev-block-ending-pos (< prev-block-ending-pos (point)))
|
||||
(goto-char prev-block-ending-pos)
|
||||
(python-nav-beginning-of-block)))))))))
|
||||
(python-nav--forward-sexp -1))
|
||||
|
||||
(defun python-nav-forward-sexp (&optional arg)
|
||||
"Move forward across one block of code.
|
||||
@ -1643,6 +1607,8 @@ uniqueness for different types of configurations."
|
||||
OUTPUT is a string with the contents of the buffer."
|
||||
(ansi-color-filter-apply output))
|
||||
|
||||
(defvar python-shell--parent-buffer nil)
|
||||
|
||||
(define-derived-mode inferior-python-mode comint-mode "Inferior Python"
|
||||
"Major mode for Python inferior process.
|
||||
Runs a Python interpreter as a subprocess of Emacs, with Python
|
||||
@ -1665,6 +1631,12 @@ initialization of the interpreter via `python-shell-setup-codes'
|
||||
variable.
|
||||
|
||||
\(Type \\[describe-mode] in the process buffer for a list of commands.)"
|
||||
(and python-shell--parent-buffer
|
||||
(python-util-clone-local-variables python-shell--parent-buffer))
|
||||
(setq comint-prompt-regexp (format "^\\(?:%s\\|%s\\|%s\\)"
|
||||
python-shell-prompt-regexp
|
||||
python-shell-prompt-block-regexp
|
||||
python-shell-prompt-pdb-regexp))
|
||||
(set-syntax-table python-mode-syntax-table)
|
||||
(setq mode-line-process '(":%s"))
|
||||
(make-local-variable 'comint-output-filter-functions)
|
||||
@ -1712,15 +1684,10 @@ killed."
|
||||
(let* ((cmdlist (split-string-and-unquote cmd))
|
||||
(buffer (apply #'make-comint-in-buffer proc-name proc-buffer-name
|
||||
(car cmdlist) nil (cdr cmdlist)))
|
||||
(current-buffer (current-buffer))
|
||||
(python-shell--parent-buffer (current-buffer))
|
||||
(process (get-buffer-process buffer)))
|
||||
(with-current-buffer buffer
|
||||
(inferior-python-mode)
|
||||
(python-util-clone-local-variables current-buffer)
|
||||
(setq comint-prompt-regexp (format "^\\(?:%s\\|%s\\|%s\\)"
|
||||
python-shell-prompt-regexp
|
||||
python-shell-prompt-block-regexp
|
||||
python-shell-prompt-pdb-regexp)))
|
||||
(inferior-python-mode))
|
||||
(accept-process-output process)
|
||||
(and pop (pop-to-buffer buffer t))
|
||||
(and internal (set-process-query-on-exit-flag process nil))))
|
||||
@ -2879,12 +2846,43 @@ parent defun name."
|
||||
".") ".")
|
||||
name)))))))
|
||||
|
||||
(defsubst python-info-beginning-of-block-statement-p ()
|
||||
(defun python-info-statement-starts-block-p ()
|
||||
"Return non-nil if current statement opens a block."
|
||||
(save-excursion
|
||||
(python-nav-beginning-of-statement)
|
||||
(looking-at (python-rx block-start))))
|
||||
|
||||
(defun python-info-statement-ends-block-p ()
|
||||
"Return non-nil if point is at end of block."
|
||||
(let ((end-of-block-pos (save-excursion
|
||||
(python-nav-end-of-block)))
|
||||
(end-of-statement-pos (save-excursion
|
||||
(python-nav-end-of-statement))))
|
||||
(and end-of-block-pos end-of-statement-pos
|
||||
(= end-of-block-pos end-of-statement-pos))))
|
||||
|
||||
(defun python-info-beginning-of-statement-p ()
|
||||
"Return non-nil if point is at beginning of statement."
|
||||
(= (point) (save-excursion
|
||||
(python-nav-beginning-of-statement)
|
||||
(point))))
|
||||
|
||||
(defun python-info-end-of-statement-p ()
|
||||
"Return non-nil if point is at end of statement."
|
||||
(= (point) (save-excursion
|
||||
(python-nav-end-of-statement)
|
||||
(point))))
|
||||
|
||||
(defun python-info-beginning-of-block-p ()
|
||||
"Return non-nil if point is at beginning of block."
|
||||
(and (python-info-beginning-of-statement-p)
|
||||
(python-info-statement-starts-block-p)))
|
||||
|
||||
(defun python-info-end-of-block-p ()
|
||||
"Return non-nil if point is at end of block."
|
||||
(and (python-info-end-of-statement-p)
|
||||
(python-info-statement-ends-block-p)))
|
||||
|
||||
(defun python-info-closing-block ()
|
||||
"Return the point of the block the current line closes."
|
||||
(let ((closing-word (save-excursion
|
||||
|
@ -833,35 +833,40 @@ This handles splitting the command if it would be bigger than
|
||||
|
||||
(defun server-create-window-system-frame (display nowait proc parent-id
|
||||
&optional parameters)
|
||||
(add-to-list 'frame-inherited-parameters 'client)
|
||||
(if (not (fboundp 'make-frame-on-display))
|
||||
(progn
|
||||
;; This emacs does not support X.
|
||||
(server-log "Window system unsupported" proc)
|
||||
(server-send-string proc "-window-system-unsupported \n")
|
||||
nil)
|
||||
;; Flag frame as client-created, but use a dummy client.
|
||||
;; This will prevent the frame from being deleted when
|
||||
;; emacsclient quits while also preventing
|
||||
;; `server-save-buffers-kill-terminal' from unexpectedly
|
||||
;; killing emacs on that frame.
|
||||
(let* ((params `((client . ,(if nowait 'nowait proc))
|
||||
;; This is a leftover, see above.
|
||||
(environment . ,(process-get proc 'env))
|
||||
,@parameters))
|
||||
(display (or display
|
||||
(frame-parameter nil 'display)
|
||||
(getenv "DISPLAY")
|
||||
(error "Please specify display")))
|
||||
frame)
|
||||
(if parent-id
|
||||
(push (cons 'parent-id (string-to-number parent-id)) params))
|
||||
(setq frame (make-frame-on-display display params))
|
||||
(server-log (format "%s created" frame) proc)
|
||||
(select-frame frame)
|
||||
(process-put proc 'frame frame)
|
||||
(process-put proc 'terminal (frame-terminal frame))
|
||||
frame)))
|
||||
(let* ((display (or display
|
||||
(frame-parameter nil 'display)
|
||||
(error "Please specify display.")))
|
||||
(w (or (cdr (assq 'window-system parameters))
|
||||
(window-system-for-display display))))
|
||||
|
||||
(unless (assq w window-system-initialization-alist)
|
||||
(setq w nil))
|
||||
|
||||
(cond (w
|
||||
;; Flag frame as client-created, but use a dummy client.
|
||||
;; This will prevent the frame from being deleted when
|
||||
;; emacsclient quits while also preventing
|
||||
;; `server-save-buffers-kill-terminal' from unexpectedly
|
||||
;; killing emacs on that frame.
|
||||
(let* ((params `((client . ,(if nowait 'nowait proc))
|
||||
;; This is a leftover, see above.
|
||||
(environment . ,(process-get proc 'env))
|
||||
,@parameters))
|
||||
frame)
|
||||
(if parent-id
|
||||
(push (cons 'parent-id (string-to-number parent-id)) params))
|
||||
(add-to-list 'frame-inherited-parameters 'client)
|
||||
(setq frame (make-frame-on-display display params))
|
||||
(server-log (format "%s created" frame) proc)
|
||||
(select-frame frame)
|
||||
(process-put proc 'frame frame)
|
||||
(process-put proc 'terminal (frame-terminal frame))
|
||||
frame))
|
||||
|
||||
(t
|
||||
(server-log "Window system unsupported" proc)
|
||||
(server-send-string proc "-window-system-unsupported \n")
|
||||
nil))))
|
||||
|
||||
(defun server-goto-toplevel (proc)
|
||||
(condition-case nil
|
||||
@ -1121,9 +1126,13 @@ The following commands are accepted by the client:
|
||||
tty-type (pop args-left)
|
||||
dontkill (or dontkill
|
||||
(not use-current-frame)))
|
||||
;; On Windows, emacsclient always asks for a tty frame.
|
||||
;; If running a GUI server, force the frame type to GUI.
|
||||
(when (eq window-system 'w32)
|
||||
;; On Windows, emacsclient always asks for a tty
|
||||
;; frame. If running a GUI server, force the frame
|
||||
;; type to GUI. (Cygwin is perfectly happy with
|
||||
;; multi-tty support, so don't override the user's
|
||||
;; choice there.)
|
||||
(when (and (eq system-type 'windows-nt)
|
||||
(eq window-system 'w32))
|
||||
(push "-window-system" args-left)))
|
||||
|
||||
;; -position LINE[:COLUMN]: Set point to the given
|
||||
|
@ -6872,7 +6872,7 @@ call `normal-erase-is-backspace-mode' (which see) instead."
|
||||
(if (if (eq normal-erase-is-backspace 'maybe)
|
||||
(and (not noninteractive)
|
||||
(or (memq system-type '(ms-dos windows-nt))
|
||||
(memq window-system '(ns))
|
||||
(memq window-system '(w32 ns))
|
||||
(and (memq window-system '(x))
|
||||
(fboundp 'x-backspace-delete-keys-p)
|
||||
(x-backspace-delete-keys-p))
|
||||
|
@ -890,7 +890,8 @@ Amongst another things, it parses the command-line arguments."
|
||||
;; Initialize the window system. (Open connection, etc.)
|
||||
(funcall
|
||||
(or (cdr (assq initial-window-system window-system-initialization-alist))
|
||||
(error "Unsupported window system `%s'" initial-window-system))))
|
||||
(error "Unsupported window system `%s'" initial-window-system)))
|
||||
(put initial-window-system 'window-system-initialized t))
|
||||
;; If there was an error, print the error message and exit.
|
||||
(error
|
||||
(princ
|
||||
|
@ -2154,7 +2154,9 @@ any other non-digit terminates the character code and is then used as input."))
|
||||
(setq first nil))
|
||||
code))
|
||||
|
||||
(defconst read-passwd-map
|
||||
(defvar read-passwd-map
|
||||
;; BEWARE: `defconst' would purecopy it, breaking the sharing with
|
||||
;; minibuffer-local-map along the way!
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(set-keymap-parent map minibuffer-local-map)
|
||||
(define-key map "\C-u" #'delete-minibuffer-contents) ;bug#12570
|
||||
@ -2197,7 +2199,9 @@ by doing (clear-string STRING)."
|
||||
(lambda ()
|
||||
(setq minibuf (current-buffer))
|
||||
;; Turn off electricity.
|
||||
(set (make-local-variable 'post-self-insert-hook) nil)
|
||||
(setq-local post-self-insert-hook nil)
|
||||
(setq-local buffer-undo-list t)
|
||||
(setq-local select-active-regions nil)
|
||||
(use-local-map read-passwd-map)
|
||||
(add-hook 'after-change-functions hide-chars-fun nil 'local))
|
||||
(unwind-protect
|
||||
|
@ -57,7 +57,7 @@ clipboard as well.
|
||||
|
||||
On Nextstep, put TEXT in the pasteboard (`x-select-enable-clipboard'
|
||||
is not used)."
|
||||
(cond ((eq system-type 'windows-nt)
|
||||
(cond ((eq (framep (selected-frame)) 'w32)
|
||||
(if x-select-enable-clipboard
|
||||
(w32-set-clipboard-data text))
|
||||
(setq x-last-selected-text text))
|
||||
|
@ -39,7 +39,7 @@
|
||||
;; this file, which works in close coordination with src/nsfns.m.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
(or (featurep 'ns)
|
||||
(error "%s: Loading ns-win.el but not compiled for GNUstep/MacOS"
|
||||
(invocation-name)))
|
||||
@ -448,7 +448,7 @@ Lines are highlighted according to `ns-input-line'."
|
||||
;; nsterm.m
|
||||
|
||||
(declare-function ns-read-file-name "nsfns.m"
|
||||
(prompt &optional dir isLoad init))
|
||||
(prompt &optional dir mustmatch init dir_only_p))
|
||||
|
||||
;;;; File handling.
|
||||
|
||||
@ -633,8 +633,9 @@ This function has been overloaded in Nextstep.")
|
||||
`ns-input-fontsize' of new font."
|
||||
(interactive)
|
||||
(modify-frame-parameters (selected-frame)
|
||||
(list (cons 'font ns-input-font)
|
||||
(cons 'fontsize ns-input-fontsize)))
|
||||
(list (cons 'fontsize ns-input-fontsize)))
|
||||
(modify-frame-parameters (selected-frame)
|
||||
(list (cons 'font ns-input-font)))
|
||||
(set-frame-font ns-input-font))
|
||||
|
||||
|
||||
@ -908,6 +909,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
;; defines functions and variables that we use now.
|
||||
(defun ns-initialize-window-system ()
|
||||
"Initialize Emacs for Nextstep (Cocoa / GNUstep) windowing."
|
||||
(cl-assert (not ns-initialized))
|
||||
|
||||
;; PENDING: not needed?
|
||||
(setq command-line-args (x-handle-args command-line-args))
|
||||
@ -935,6 +937,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
(x-apply-session-resources)
|
||||
(setq ns-initialized t))
|
||||
|
||||
(add-to-list 'display-format-alist '("\\`ns\\'" . ns))
|
||||
(add-to-list 'handle-args-function-alist '(ns . x-handle-args))
|
||||
(add-to-list 'frame-creation-function-alist '(ns . x-create-frame-with-faces))
|
||||
(add-to-list 'window-system-initialization-alist '(ns . ns-initialize-window-system))
|
||||
|
@ -1,4 +1,4 @@
|
||||
;;; w32-win.el --- parse switches controlling interface with W32 window system
|
||||
;;; w32-win.el --- parse switches controlling interface with W32 window system -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 1993-1994, 2001-2012 Free Software Foundation, Inc.
|
||||
|
||||
@ -68,6 +68,7 @@
|
||||
;; (if (not (eq window-system 'w32))
|
||||
;; (error "%s: Loading w32-win.el but not compiled for w32" (invocation-name)))
|
||||
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
(require 'frame)
|
||||
(require 'mouse)
|
||||
(require 'scroll-bar)
|
||||
@ -102,7 +103,22 @@
|
||||
;; (interactive "e")
|
||||
;; (princ event))
|
||||
|
||||
(defun w32-drag-n-drop (event)
|
||||
(defun w32-handle-dropped-file (window file-name)
|
||||
(let ((f (if (eq system-type 'cygwin)
|
||||
(cygwin-convert-path-from-windows file-name t)
|
||||
(subst-char-in-string ?\\ ?/ file-name)))
|
||||
(coding (or file-name-coding-system
|
||||
default-file-name-coding-system)))
|
||||
|
||||
(setq file-name
|
||||
(mapconcat 'url-hexify-string
|
||||
(split-string (encode-coding-string f coding)
|
||||
"/")
|
||||
"/")))
|
||||
(dnd-handle-one-url window 'private
|
||||
(concat "file:" file-name)))
|
||||
|
||||
(defun w32-drag-n-drop (event &optional new-frame)
|
||||
"Edit the files listed in the drag-n-drop EVENT.
|
||||
Switch to a buffer editing the last file dropped."
|
||||
(interactive "e")
|
||||
@ -116,26 +132,21 @@ Switch to a buffer editing the last file dropped."
|
||||
(y (cdr coords)))
|
||||
(if (and (> x 0) (> y 0))
|
||||
(set-frame-selected-window nil window))
|
||||
(mapc (lambda (file-name)
|
||||
(let ((f (subst-char-in-string ?\\ ?/ file-name))
|
||||
(coding (or file-name-coding-system
|
||||
default-file-name-coding-system)))
|
||||
(setq file-name
|
||||
(mapconcat 'url-hexify-string
|
||||
(split-string (encode-coding-string f coding)
|
||||
"/")
|
||||
"/")))
|
||||
(dnd-handle-one-url window 'private
|
||||
(concat "file:" file-name)))
|
||||
(car (cdr (cdr event)))))
|
||||
(raise-frame)))
|
||||
|
||||
(when new-frame
|
||||
(select-frame (make-frame)))
|
||||
(raise-frame)
|
||||
(setq window (selected-window))
|
||||
|
||||
(mapc (apply-partially #'w32-handle-dropped-file window)
|
||||
(car (cdr (cdr event)))))))
|
||||
|
||||
(defun w32-drag-n-drop-other-frame (event)
|
||||
"Edit the files listed in the drag-n-drop EVENT, in other frames.
|
||||
May create new frames, or reuse existing ones. The frame editing
|
||||
the last file dropped is selected."
|
||||
(interactive "e")
|
||||
(mapcar 'find-file-other-frame (car (cdr (cdr event)))))
|
||||
(w32-drag-n-drop event t))
|
||||
|
||||
;; Bind the drag-n-drop event.
|
||||
(global-set-key [drag-n-drop] 'w32-drag-n-drop)
|
||||
@ -230,6 +241,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
|
||||
(defun w32-initialize-window-system ()
|
||||
"Initialize Emacs for W32 GUI frames."
|
||||
(cl-assert (not w32-initialized))
|
||||
|
||||
;; Do the actual Windows setup here; the above code just defines
|
||||
;; functions and variables that we use now.
|
||||
@ -243,7 +255,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
;; so as not to choke when we use it in X resource queries.
|
||||
(replace-regexp-in-string "[.*]" "-" (invocation-name))))
|
||||
|
||||
(x-open-connection "" x-command-line-resources
|
||||
(x-open-connection "w32" x-command-line-resources
|
||||
;; Exit with a fatal error if this fails and we
|
||||
;; are the initial display
|
||||
(eq initial-window-system 'w32))
|
||||
@ -294,7 +306,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
(setq default-frame-alist
|
||||
(cons '(reverse . t) default-frame-alist)))))
|
||||
|
||||
;; Don't let Emacs suspend under w32 gui
|
||||
;; Don't let Emacs suspend under Windows.
|
||||
(add-hook 'suspend-hook 'x-win-suspend-error)
|
||||
|
||||
;; Turn off window-splitting optimization; w32 is usually fast enough
|
||||
@ -312,6 +324,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
|
||||
(x-apply-session-resources)
|
||||
(setq w32-initialized t))
|
||||
|
||||
(add-to-list 'display-format-alist '("\\`w32\\'" . w32))
|
||||
(add-to-list 'handle-args-function-alist '(w32 . x-handle-args))
|
||||
(add-to-list 'frame-creation-function-alist '(w32 . x-create-frame-with-faces))
|
||||
(add-to-list 'window-system-initialization-alist '(w32 . w32-initialize-window-system))
|
||||
|
@ -67,6 +67,8 @@
|
||||
;; An alist of X options and the function which handles them. See
|
||||
;; ../startup.el.
|
||||
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
(if (not (fboundp 'x-create-frame))
|
||||
(error "%s: Loading x-win.el but not compiled for X" (invocation-name)))
|
||||
|
||||
@ -1338,6 +1340,8 @@ Request data types in the order specified by `x-select-request-type'."
|
||||
|
||||
(defun x-initialize-window-system ()
|
||||
"Initialize Emacs for X frames and open the first connection to an X server."
|
||||
(cl-assert (not x-initialized))
|
||||
|
||||
;; Make sure we have a valid resource name.
|
||||
(or (stringp x-resource-name)
|
||||
(let (i)
|
||||
@ -1451,6 +1455,7 @@ Request data types in the order specified by `x-select-request-type'."
|
||||
(x-apply-session-resources)
|
||||
(setq x-initialized t))
|
||||
|
||||
(add-to-list 'display-format-alist '("\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" . x))
|
||||
(add-to-list 'handle-args-function-alist '(x . x-handle-args))
|
||||
(add-to-list 'frame-creation-function-alist '(x . x-create-frame-with-faces))
|
||||
(add-to-list 'window-system-initialization-alist '(x . x-initialize-window-system))
|
||||
|
@ -218,7 +218,7 @@ and before TAIL-RE and DELIM-RE in VAR or DEFAULT for no match."
|
||||
;; Use CVSHeader to really get information from CVS and not other version
|
||||
;; control systems.
|
||||
(defconst rst-cvs-header
|
||||
"$CVSHeader: sm/rst_el/rst.el,v 1.327.2.2 2012-09-23 14:44:25 stefan Exp $")
|
||||
"$CVSHeader: sm/rst_el/rst.el,v 1.327.2.6 2012-10-07 13:05:50 stefan Exp $")
|
||||
(defconst rst-cvs-rev
|
||||
(rst-extract-version "\\$" "CVSHeader: \\S + " "[0-9]+\\(?:\\.[0-9]+\\)+"
|
||||
" .*" rst-cvs-header "0.0")
|
||||
@ -247,7 +247,7 @@ SVN revision is the upstream (docutils) revision.")
|
||||
"Official version of the package.")
|
||||
(defconst rst-official-cvs-rev
|
||||
(rst-extract-version "[%$]" "Revision: " "[0-9]+\\(?:\\.[0-9]+\\)+" " "
|
||||
"$Revision: 1.327.2.2 $")
|
||||
"%Revision: 1.327 %")
|
||||
"CVS revision of this file in the official version.")
|
||||
|
||||
(defconst rst-version
|
||||
@ -1545,7 +1545,6 @@ b. a negative numerical argument, which generally inverts the
|
||||
:type '(choice
|
||||
(const :tag "Same level as previous one" nil)
|
||||
(const :tag "One level down relative to the previous one" t))
|
||||
:version "24.3"
|
||||
:package-version '(rst . "1.1.0"))
|
||||
(rst-testcover-defcustom)
|
||||
|
||||
@ -2846,28 +2845,28 @@ here."
|
||||
(defcustom rst-indent-field 3
|
||||
"Indentation for first line after a field or 0 to always indent for content."
|
||||
:group 'rst-indent
|
||||
:version "24.3"
|
||||
:package-version '(rst . "1.1.0")
|
||||
:type '(integer))
|
||||
(rst-testcover-defcustom)
|
||||
|
||||
(defcustom rst-indent-literal-normal 3
|
||||
"Default indentation for literal block after a markup on an own line."
|
||||
:group 'rst-indent
|
||||
:version "24.3"
|
||||
:package-version '(rst . "1.1.0")
|
||||
:type '(integer))
|
||||
(rst-testcover-defcustom)
|
||||
|
||||
(defcustom rst-indent-literal-minimized 2
|
||||
"Default indentation for literal block after a minimized markup."
|
||||
:group 'rst-indent
|
||||
:version "24.3"
|
||||
:package-version '(rst . "1.1.0")
|
||||
:type '(integer))
|
||||
(rst-testcover-defcustom)
|
||||
|
||||
(defcustom rst-indent-comment 3
|
||||
"Default indentation for first line of a comment."
|
||||
:group 'rst-indent
|
||||
:version "24.3"
|
||||
:package-version '(rst . "1.1.0")
|
||||
:type '(integer))
|
||||
(rst-testcover-defcustom)
|
||||
|
||||
|
@ -2565,8 +2565,7 @@ line LINE of the window, or centered if LINE is nil."
|
||||
(if (null tex-shell)
|
||||
(message "No TeX output buffer")
|
||||
(setq window (display-buffer tex-shell))
|
||||
(save-selected-window
|
||||
(select-window window)
|
||||
(with-selected-window window
|
||||
(bury-buffer tex-shell)
|
||||
(goto-char (point-max))
|
||||
(recenter (if linenum
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-10-08 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* url-methods.el (url-scheme-get-property): url-https.el was
|
||||
merged into url-http.el, so load the latter for https. (Bug#12599)
|
||||
|
||||
2012-10-02 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* url-http.el (url-http-user-agent-string): Leak less info.
|
||||
|
@ -118,7 +118,9 @@ it has not already been loaded."
|
||||
(let* ((stub (concat "url-" scheme))
|
||||
(loader (intern stub)))
|
||||
(condition-case ()
|
||||
(require loader)
|
||||
;; url-https.el was merged into url-http because of 8+3
|
||||
;; filename limitations, so we have to do this dance.
|
||||
(require (if (equal "https" scheme) 'url-http loader))
|
||||
(error nil))
|
||||
(if (fboundp loader)
|
||||
(progn
|
||||
|
130
lisp/w32-common-fns.el
Normal file
130
lisp/w32-common-fns.el
Normal file
@ -0,0 +1,130 @@
|
||||
;;; w32-common-fns.el --- Lisp routines for Windows and Cygwin-w32
|
||||
|
||||
;; Copyright (C) 1994, 2001-2012 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
;;; This file contains functions that are used by both native NT Emacs
|
||||
;;; and Cygwin Emacs compiled to use the native Windows widget
|
||||
;;; library.
|
||||
|
||||
(defun w32-version ()
|
||||
"Return the MS-Windows version numbers.
|
||||
The value is a list of three integers: the major and minor version
|
||||
numbers, and the build number."
|
||||
(x-server-version))
|
||||
|
||||
(defun w32-using-nt ()
|
||||
"Return non-nil if running on a Windows NT descendant.
|
||||
That includes all Windows systems except for 9X/Me."
|
||||
(getenv "SystemRoot"))
|
||||
|
||||
(declare-function w32-get-clipboard-data "w32select.c")
|
||||
(declare-function w32-set-clipboard-data "w32select.c")
|
||||
(declare-function x-server-version "w32fns.c" (&optional display))
|
||||
|
||||
;;; Fix interface to (X-specific) mouse.el
|
||||
(defun x-set-selection (type data)
|
||||
"Make an X selection of type TYPE and value DATA.
|
||||
The argument TYPE (nil means `PRIMARY') says which selection, and
|
||||
DATA specifies the contents. TYPE must be a symbol. \(It can also
|
||||
be a string, which stands for the symbol with that name, but this
|
||||
is considered obsolete.) DATA may be a string, a symbol, an
|
||||
integer (or a cons of two integers or list of two integers).
|
||||
|
||||
The selection may also be a cons of two markers pointing to the same buffer,
|
||||
or an overlay. In these cases, the selection is considered to be the text
|
||||
between the markers *at whatever time the selection is examined*.
|
||||
Thus, editing done in the buffer after you specify the selection
|
||||
can alter the effective value of the selection.
|
||||
|
||||
The data may also be a vector of valid non-vector selection values.
|
||||
|
||||
The return value is DATA.
|
||||
|
||||
Interactively, this command sets the primary selection. Without
|
||||
prefix argument, it reads the selection in the minibuffer. With
|
||||
prefix argument, it uses the text of the region as the selection value.
|
||||
|
||||
Note that on MS-Windows, primary and secondary selections set by Emacs
|
||||
are not available to other programs."
|
||||
(put 'x-selections (or type 'PRIMARY) data))
|
||||
|
||||
(defun x-get-selection (&optional type _data-type)
|
||||
"Return the value of an X Windows selection.
|
||||
The argument TYPE (default `PRIMARY') says which selection,
|
||||
and the argument DATA-TYPE (default `STRING') says
|
||||
how to convert the data.
|
||||
|
||||
TYPE may be any symbol \(but nil stands for `PRIMARY'). However,
|
||||
only a few symbols are commonly used. They conventionally have
|
||||
all upper-case names. The most often used ones, in addition to
|
||||
`PRIMARY', are `SECONDARY' and `CLIPBOARD'.
|
||||
|
||||
DATA-TYPE is usually `STRING', but can also be one of the symbols
|
||||
in `selection-converter-alist', which see."
|
||||
(get 'x-selections (or type 'PRIMARY)))
|
||||
|
||||
;; x-selection-owner-p is used in simple.el
|
||||
(defun x-selection-owner-p (&optional type)
|
||||
(and (memq type '(nil PRIMARY SECONDARY))
|
||||
(get 'x-selections (or type 'PRIMARY))))
|
||||
|
||||
;; The "Windows" keys on newer keyboards bring up the Start menu
|
||||
;; whether you want it or not - make Emacs ignore these keystrokes
|
||||
;; rather than beep.
|
||||
(global-set-key [lwindow] 'ignore)
|
||||
(global-set-key [rwindow] 'ignore)
|
||||
|
||||
(defvar w32-charset-info-alist) ; w32font.c
|
||||
|
||||
|
||||
;;;; Selections
|
||||
|
||||
;; We keep track of the last text selected here, so we can check the
|
||||
;; current selection against it, and avoid passing back our own text
|
||||
;; from x-selection-value.
|
||||
(defvar x-last-selected-text nil)
|
||||
|
||||
(defun x-get-selection-value ()
|
||||
"Return the value of the current selection.
|
||||
Consult the selection. Treat empty strings as if they were unset."
|
||||
(if x-select-enable-clipboard
|
||||
(let (text)
|
||||
;; Don't die if x-get-selection signals an error.
|
||||
(condition-case c
|
||||
(setq text (w32-get-clipboard-data))
|
||||
(error (message "w32-get-clipboard-data:%s" c)))
|
||||
(if (string= text "") (setq text nil))
|
||||
(cond
|
||||
((not text) nil)
|
||||
((eq text x-last-selected-text) nil)
|
||||
((string= text x-last-selected-text)
|
||||
;; Record the newer string, so subsequent calls can use the 'eq' test.
|
||||
(setq x-last-selected-text text)
|
||||
nil)
|
||||
(t
|
||||
(setq x-last-selected-text text))))))
|
||||
|
||||
(defalias 'x-selection-value 'x-get-selection-value)
|
||||
|
||||
;; Arrange for the kill and yank functions to set and check the clipboard.
|
||||
(setq interprogram-cut-function 'x-select-text)
|
||||
(setq interprogram-paste-function 'x-get-selection-value)
|
||||
|
||||
(provide 'w32-common-fns)
|
105
lisp/w32-fns.el
105
lisp/w32-fns.el
@ -26,34 +26,20 @@
|
||||
|
||||
;;; Code:
|
||||
(require 'w32-vars)
|
||||
(require 'w32-common-fns)
|
||||
|
||||
(defvar explicit-shell-file-name)
|
||||
|
||||
;;;; Function keys
|
||||
|
||||
(declare-function set-message-beep "w32console.c")
|
||||
(declare-function w32-get-clipboard-data "w32select.c")
|
||||
(declare-function w32-get-locale-info "w32proc.c")
|
||||
(declare-function w32-get-valid-locale-ids "w32proc.c")
|
||||
(declare-function w32-set-clipboard-data "w32select.c")
|
||||
|
||||
;; Map all versions of a filename (8.3, longname, mixed case) to the
|
||||
;; same buffer.
|
||||
(setq find-file-visit-truename t)
|
||||
|
||||
(declare-function x-server-version "w32fns.c" (&optional display))
|
||||
|
||||
(defun w32-version ()
|
||||
"Return the MS-Windows version numbers.
|
||||
The value is a list of three integers: the major and minor version
|
||||
numbers, and the build number."
|
||||
(x-server-version))
|
||||
|
||||
(defun w32-using-nt ()
|
||||
"Return non-nil if running on a Windows NT descendant.
|
||||
That includes all Windows systems except for 9X/Me."
|
||||
(and (eq system-type 'windows-nt) (getenv "SystemRoot")))
|
||||
|
||||
(defun w32-shell-name ()
|
||||
"Return the name of the shell being used."
|
||||
(or (bound-and-true-p shell-file-name)
|
||||
@ -240,53 +226,6 @@ requires it (see `w32-shell-dos-semantics')."
|
||||
(setq start (match-end 0))))
|
||||
name)))
|
||||
|
||||
;;; Fix interface to (X-specific) mouse.el
|
||||
(defun x-set-selection (type data)
|
||||
"Make an X selection of type TYPE and value DATA.
|
||||
The argument TYPE (nil means `PRIMARY') says which selection, and
|
||||
DATA specifies the contents. TYPE must be a symbol. \(It can also
|
||||
be a string, which stands for the symbol with that name, but this
|
||||
is considered obsolete.) DATA may be a string, a symbol, an
|
||||
integer (or a cons of two integers or list of two integers).
|
||||
|
||||
The selection may also be a cons of two markers pointing to the same buffer,
|
||||
or an overlay. In these cases, the selection is considered to be the text
|
||||
between the markers *at whatever time the selection is examined*.
|
||||
Thus, editing done in the buffer after you specify the selection
|
||||
can alter the effective value of the selection.
|
||||
|
||||
The data may also be a vector of valid non-vector selection values.
|
||||
|
||||
The return value is DATA.
|
||||
|
||||
Interactively, this command sets the primary selection. Without
|
||||
prefix argument, it reads the selection in the minibuffer. With
|
||||
prefix argument, it uses the text of the region as the selection value.
|
||||
|
||||
Note that on MS-Windows, primary and secondary selections set by Emacs
|
||||
are not available to other programs."
|
||||
(put 'x-selections (or type 'PRIMARY) data))
|
||||
|
||||
(defun x-get-selection (&optional type _data-type)
|
||||
"Return the value of an X Windows selection.
|
||||
The argument TYPE (default `PRIMARY') says which selection,
|
||||
and the argument DATA-TYPE (default `STRING') says
|
||||
how to convert the data.
|
||||
|
||||
TYPE may be any symbol \(but nil stands for `PRIMARY'). However,
|
||||
only a few symbols are commonly used. They conventionally have
|
||||
all upper-case names. The most often used ones, in addition to
|
||||
`PRIMARY', are `SECONDARY' and `CLIPBOARD'.
|
||||
|
||||
DATA-TYPE is usually `STRING', but can also be one of the symbols
|
||||
in `selection-converter-alist', which see."
|
||||
(get 'x-selections (or type 'PRIMARY)))
|
||||
|
||||
;; x-selection-owner-p is used in simple.el
|
||||
(defun x-selection-owner-p (&optional type)
|
||||
(and (memq type '(nil PRIMARY SECONDARY))
|
||||
(get 'x-selections (or type 'PRIMARY))))
|
||||
|
||||
(defun set-w32-system-coding-system (coding-system)
|
||||
"Set the coding system used by the Windows system to CODING-SYSTEM.
|
||||
This is used for things like passing font names with non-ASCII
|
||||
@ -311,14 +250,6 @@ This function is provided for backward compatibility, since
|
||||
;; Set to a system sound if you want a fancy bell.
|
||||
(set-message-beep nil)
|
||||
|
||||
;; The "Windows" keys on newer keyboards bring up the Start menu
|
||||
;; whether you want it or not - make Emacs ignore these keystrokes
|
||||
;; rather than beep.
|
||||
(global-set-key [lwindow] 'ignore)
|
||||
(global-set-key [rwindow] 'ignore)
|
||||
|
||||
(defvar w32-charset-info-alist) ; w32font.c
|
||||
|
||||
(defun w32-add-charset-info (xlfd-charset windows-charset codepage)
|
||||
"Function to add character sets to display with Windows fonts.
|
||||
Creates entries in `w32-charset-info-alist'.
|
||||
@ -379,40 +310,6 @@ bit output with no translation."
|
||||
(make-obsolete-variable 'w32-charset-to-codepage-alist
|
||||
'w32-charset-info-alist "21.1")
|
||||
|
||||
|
||||
;;;; Selections
|
||||
|
||||
;; We keep track of the last text selected here, so we can check the
|
||||
;; current selection against it, and avoid passing back our own text
|
||||
;; from x-selection-value.
|
||||
(defvar x-last-selected-text nil)
|
||||
|
||||
(defun x-get-selection-value ()
|
||||
"Return the value of the current selection.
|
||||
Consult the selection. Treat empty strings as if they were unset."
|
||||
(if x-select-enable-clipboard
|
||||
(let (text)
|
||||
;; Don't die if x-get-selection signals an error.
|
||||
(condition-case c
|
||||
(setq text (w32-get-clipboard-data))
|
||||
(error (message "w32-get-clipboard-data:%s" c)))
|
||||
(if (string= text "") (setq text nil))
|
||||
(cond
|
||||
((not text) nil)
|
||||
((eq text x-last-selected-text) nil)
|
||||
((string= text x-last-selected-text)
|
||||
;; Record the newer string, so subsequent calls can use the 'eq' test.
|
||||
(setq x-last-selected-text text)
|
||||
nil)
|
||||
(t
|
||||
(setq x-last-selected-text text))))))
|
||||
|
||||
(defalias 'x-selection-value 'x-get-selection-value)
|
||||
|
||||
;; Arrange for the kill and yank functions to set and check the clipboard.
|
||||
(setq interprogram-cut-function 'x-select-text)
|
||||
(setq interprogram-paste-function 'x-get-selection-value)
|
||||
|
||||
|
||||
;;;; Support for build process
|
||||
|
||||
|
@ -44,17 +44,19 @@ X does. See `w32-fixed-font-alist' for the font menu definition."
|
||||
"Include proportional fonts in the default font dialog.")
|
||||
(make-obsolete-variable 'w32-list-proportional-fonts "no longer used." "23.1")
|
||||
|
||||
(defcustom w32-allow-system-shell nil
|
||||
"Disable startup warning when using \"system\" shells."
|
||||
:type 'boolean
|
||||
:group 'w32)
|
||||
(unless (eq system-type 'cygwin)
|
||||
(defcustom w32-allow-system-shell nil
|
||||
"Disable startup warning when using \"system\" shells."
|
||||
:type 'boolean
|
||||
:group 'w32))
|
||||
|
||||
(defcustom w32-system-shells '("cmd" "cmd.exe" "command" "command.com"
|
||||
"4nt" "4nt.exe" "4dos" "4dos.exe"
|
||||
"tcc" "tcc.exe" "ndos" "ndos.exe")
|
||||
"List of strings recognized as Windows system shells."
|
||||
:type '(repeat string)
|
||||
:group 'w32)
|
||||
(unless (eq system-type 'cygwin)
|
||||
(defcustom w32-system-shells '("cmd" "cmd.exe" "command" "command.com"
|
||||
"4nt" "4nt.exe" "4dos" "4dos.exe"
|
||||
"tcc" "tcc.exe" "ndos" "ndos.exe")
|
||||
"List of strings recognized as Windows system shells."
|
||||
:type '(repeat string)
|
||||
:group 'w32))
|
||||
|
||||
;; Want "menu" custom type for this.
|
||||
(defcustom w32-fixed-font-alist
|
||||
|
@ -28,6 +28,35 @@
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defun internal--before-save-selected-window ()
|
||||
(cons (selected-window)
|
||||
;; We save and restore all frames' selected windows, because
|
||||
;; `select-window' can change the frame-selected-window of
|
||||
;; whatever frame that window is in. Each text terminal's
|
||||
;; top-frame is preserved by putting it last in the list.
|
||||
(apply #'append
|
||||
(mapcar (lambda (terminal)
|
||||
(let ((frames (frames-on-display-list terminal))
|
||||
(top-frame (tty-top-frame terminal))
|
||||
alist)
|
||||
(if top-frame
|
||||
(setq frames
|
||||
(cons top-frame
|
||||
(delq top-frame frames))))
|
||||
(dolist (f frames)
|
||||
(push (cons f (frame-selected-window f))
|
||||
alist))
|
||||
alist))
|
||||
(terminal-list)))))
|
||||
|
||||
(defun internal--after-save-selected-window (state)
|
||||
(dolist (elt (cdr state))
|
||||
(and (frame-live-p (car elt))
|
||||
(window-live-p (cdr elt))
|
||||
(set-frame-selected-window (car elt) (cdr elt) 'norecord)))
|
||||
(when (window-live-p (car state))
|
||||
(select-window (car state) 'norecord)))
|
||||
|
||||
(defmacro save-selected-window (&rest body)
|
||||
"Execute BODY, then select the previously selected window.
|
||||
The value returned is the value of the last form in BODY.
|
||||
@ -44,34 +73,11 @@ its normal operation could make a different buffer current. The
|
||||
order of recently selected windows and the buffer list ordering
|
||||
are not altered by this macro (unless they are altered in BODY)."
|
||||
(declare (indent 0) (debug t))
|
||||
`(let ((save-selected-window-window (selected-window))
|
||||
;; We save and restore all frames' selected windows, because
|
||||
;; `select-window' can change the frame-selected-window of
|
||||
;; whatever frame that window is in. Each text terminal's
|
||||
;; top-frame is preserved by putting it last in the list.
|
||||
(save-selected-window-alist
|
||||
(apply 'append
|
||||
(mapcar (lambda (terminal)
|
||||
(let ((frames (frames-on-display-list terminal))
|
||||
(top-frame (tty-top-frame terminal))
|
||||
alist)
|
||||
(if top-frame
|
||||
(setq frames
|
||||
(cons top-frame
|
||||
(delq top-frame frames))))
|
||||
(dolist (f frames)
|
||||
(push (cons f (frame-selected-window f))
|
||||
alist))))
|
||||
(terminal-list)))))
|
||||
`(let ((save-selected-window--state (internal--before-save-selected-window)))
|
||||
(save-current-buffer
|
||||
(unwind-protect
|
||||
(progn ,@body)
|
||||
(dolist (elt save-selected-window-alist)
|
||||
(and (frame-live-p (car elt))
|
||||
(window-live-p (cdr elt))
|
||||
(set-frame-selected-window (car elt) (cdr elt) 'norecord)))
|
||||
(when (window-live-p save-selected-window-window)
|
||||
(select-window save-selected-window-window 'norecord))))))
|
||||
(internal--after-save-selected-window save-selected-window--state)))))
|
||||
|
||||
(defvar temp-buffer-window-setup-hook nil
|
||||
"Normal hook run by `with-temp-buffer-window' before buffer display.
|
||||
|
@ -1,3 +1,7 @@
|
||||
2012-10-08 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* sed1v2.inp (W32_LIBS, W32_OBJ): Edit to empty.
|
||||
|
||||
2012-10-04 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Merge from gnulib.
|
||||
|
@ -128,6 +128,8 @@ s/\.h\.in/.h-in/
|
||||
/^CANNOT_DUMP *=/s/@CANNOT_DUMP@/no/
|
||||
/^DEPFLAGS *=/s/@DEPFLAGS@//
|
||||
/^MKDEPDIR *=/s/@MKDEPDIR@//
|
||||
/^W32_OBJ *=/s/@W32_OBJ@//
|
||||
/^W32_LIBS *=/s/@W32_LIBS@//
|
||||
/^version *=/s/@[^@\n]*@//
|
||||
/^@SET_MAKE@$/s/@SET_MAKE@//
|
||||
/^ [ ]*\$(libsrc)\/make-docfile.*>.*\/DOC/s!make-docfile!make-docfile -o $(etc)/DOC!
|
||||
|
183
src/ChangeLog
183
src/ChangeLog
@ -1,3 +1,170 @@
|
||||
2012-10-08 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* makefile.w32-in (FONT_H): Add $(FRAME_H).
|
||||
(W32TERM_H): Add $(ATIMER_H) and $(FRAME_H).
|
||||
($(BLD)/emacs.$(O), $(BLD)/w32console.$(O)): Update dependencies.
|
||||
(GLOBAL_SOURCES): Add cygw32.c.
|
||||
|
||||
* w32fns.c (w32_color_map_lookup, x_to_w32_color): Argument is now
|
||||
'const char *'.
|
||||
(x_to_w32_color): Don't modify the argument, modify a copy instead.
|
||||
|
||||
2012-10-08 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* image.c: Permanent fix for JPEG compilation issue --- limit
|
||||
jpeglib `boolean' redefinition to Cygwin builds.
|
||||
|
||||
2012-10-08 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* image.c (CHECK_LIB_AVAILABLE): Remove, no longer used.
|
||||
|
||||
* emacs.c (DAEMON_MUST_EXEC) [HAVE_NTGUI]: Define this only on
|
||||
Cygwin.
|
||||
|
||||
2012-10-08 Daniel Colascione <dancol@dancol.org>
|
||||
|
||||
* xfaces.c, xdisp.c, window.c, w32xfns.c, w32term.h, w32term.c,
|
||||
w32select.h w32select.c, w32proc.c, w32menu.c, w32inevt.c,
|
||||
w32help.c, w32font.c, w32font.c, w32fns.c, w32console.c, w32.h,
|
||||
w32.c, unexw32.c, termhooks.h, process.c, menu.c, keyboard.h,
|
||||
keyboard.c, image.c, frame.h, frame.c, fontset.c, font.h, font.c,
|
||||
emacs.c, dispextern.h, cygw32.h, cygw32.c, conf_post.h,
|
||||
Makefile.in: use HAVE_NTGUI for W32 GUI and WINDOWSNT for the
|
||||
operating system. defined(HAVE_NTGUI) && !defined(WINDOWSNT) is
|
||||
now a supported configuration.
|
||||
|
||||
* Makefile.in: consolidate image variables into LIBIMAGE; add
|
||||
W32_OBJ and W32_LIBS. Compile new files.
|
||||
|
||||
* conf_post.h:
|
||||
(_DebPrint) declare tracing facility for W32 debugging. We need
|
||||
to unify tracing later.
|
||||
|
||||
(NTGUI_UNICODE) Define when compiling for Cygwin to allow the
|
||||
unconditional use of W32 Unicode functions. Cygwin runs only on
|
||||
100% Unicode operating systems.
|
||||
|
||||
* cygw32.c: New file. Define Cygwin-specific facilities.
|
||||
(Fcygwin_convert_path_to_windows)
|
||||
(Fcygwin_convert_path_from_windows): New user functions for
|
||||
accessing Cygwin path-munging routines.
|
||||
|
||||
* cygw32.h: New file.
|
||||
(WCSDATA, to_unicode, from_unicode): Define facilities for storing
|
||||
UTF-16LE strings temporarily inside non-Lisp-visible string
|
||||
objects.
|
||||
|
||||
(w32_strerror): Just what it says on the tin.
|
||||
|
||||
* emacs.c: Make the NS fork-then-exec code for daemon-launching
|
||||
also run for Cygwin; both systems have the same problem with using
|
||||
GUI facilities in a forked child. Also call syms_of_cygw32,
|
||||
syms_of_w32select in correct places.
|
||||
|
||||
(DAEMON_MUST_EXEC): new macro defined to signal that a platform
|
||||
needs fork-then-exec for daemon launching.
|
||||
|
||||
* font.h: Include frame.h.
|
||||
|
||||
* image.c: Use the image library cache machinery only when we're
|
||||
compiling for native WINDOWSNT; Cygwin can use shared libraries
|
||||
like any other Unixlike system.
|
||||
|
||||
* keyboard.c: Clarify a comment regarding the input loop.
|
||||
|
||||
* menu.c: When NTGUI_UNICODE is defined, use Unicode menu
|
||||
functions directly instead of trying to detect at runtime that our
|
||||
host operating system supports them. We make this change for two
|
||||
reasons: Cygwin lacks support for the multibyte character
|
||||
conversion functions used by the legacy menu code, and Cygwin
|
||||
never needs to rely on non-Unicode APIs.
|
||||
|
||||
* unexw32.c (hinst): Declare extern.
|
||||
|
||||
* w32.c: Change header order;
|
||||
(w32_strerror): Move to w32fns.c because we need it for
|
||||
non-WINDOWSNT builds.
|
||||
|
||||
* w32.h: Add #error macro to make sure we don't include w32.h for
|
||||
Cygwin builds. Remove w32select declarations.
|
||||
|
||||
* w32console.c (w32_sys_ring_bell, Fset_message_beep): Move to
|
||||
w32fns.c. w32console.c is WINDOWSNT-only.
|
||||
|
||||
* w32fns.c: Include cygw32.h or w32.h depending on CYGWIN; more
|
||||
NTGUI_UNICODE tweaks. (See above.) Change _snprintf to the more
|
||||
POSIXy alternative.
|
||||
(faked_key, sysinfo_cache, osinfo_cahce, syspage_mask)
|
||||
(w32_major_version, w32_minor_version, w32_build_number)
|
||||
(os_subtype, sound_type): Define here
|
||||
(w32_defined_color): Make color parameter const for consistency
|
||||
with other _defined_color functions.
|
||||
(w32_createwindow): Unconditionally call w32_init_class instead of
|
||||
doing so only when hprevinst is non-NULL. Plumbing hprevinst
|
||||
through the code is complex and unnecessary because class
|
||||
registration is practically free.
|
||||
(w32_name_of_message): New EMACSDEBUG-only function.
|
||||
(Fset_message_beep): Move here
|
||||
(Fx_open_connection): Require that the display name for Windows be
|
||||
"w32" for consistency, emacsclient disambiguation, and maybe, one
|
||||
day, multi-window-system support.
|
||||
(file_dialog_callback): NTGUI_UNICODE changes; encode and decode
|
||||
Cygwin files for W32 GUI facilities, since these clearly don't
|
||||
expect Cygwin names.
|
||||
(_DebPrint): Define.
|
||||
(w32_strerror, w32_console_toggle_lock_key, w32_kbd_mods_to_emacs)
|
||||
(w32_kbd_patch_key, w32_sys_ring_bell): Move here.
|
||||
(Ssystem_move_file_to_trash): Define only for native WINDOWSNT.
|
||||
(w32_last_error): Remove.
|
||||
|
||||
* w32font.c: Define _strlwr to strlwr for non-WINDOWSNT builds.
|
||||
|
||||
* w32heap.c (syspage_mask): Declare here.
|
||||
(cache_system_info): Remove.
|
||||
|
||||
* w32inevt.c (faked_key): Define globally, not statically.
|
||||
(w32_kbd_mods_to_emacs, w32_kbd_patch_key, faked_key)
|
||||
(w32_console_toggle_lock_key): Move to w32fns.c.
|
||||
|
||||
* w32menu.c: Include setjmp.h. NTGUI_UNICODE changes throughout.
|
||||
|
||||
* w32proc.c (_DebPrint): Move to w32fns.c.
|
||||
* w32select.c: Include string.h, stdio.h for Cygwin.
|
||||
* w32select.h: New File.
|
||||
|
||||
* w32term.c: Include io.h for non-CYGWIN builds; needed for
|
||||
get_osfhandle.
|
||||
(w32_message_fd): New variable. Under Cygwin, holds the file
|
||||
descriptor the system used to tell us about pending thread
|
||||
messages.
|
||||
|
||||
(w32_init_term): Remove incorrect calls to fcntl and init_sigio
|
||||
that prevented compilation under non-WINDOWSNT systems.
|
||||
|
||||
(w32_initialize): Open /dev/windows and assign it to
|
||||
w32_message_fd. Provide w32 feature.
|
||||
|
||||
* w32term.h: Include frame.h, atimer.h. Declare various frame functions.
|
||||
(WM_EMACS_INPUT_READY): add.
|
||||
(prepend_msg, w32_message_fd): Declare globally.
|
||||
|
||||
* w32xfns.c:
|
||||
(keyboard_handle): Use only when WINDOWSNT.
|
||||
(notify_msg_ready): New function. Posts a message to the main
|
||||
thread's message queue under CYGWIN, which wakes up the main
|
||||
thread from select(2) by making the /dev/windows file descriptor
|
||||
ready. Under WINDOWSNT, it sets an event the same way the old
|
||||
code did.
|
||||
|
||||
(post, prepend_msg): Actually call notify_msg_ready instead of
|
||||
setting the input event directly.
|
||||
|
||||
2012-10-07 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* ralloc.c (relinquish): If a heap is ready to be relinquished,
|
||||
but it still has blocs in it, don't return it to the system,
|
||||
instead of aborting. (Bug#12402)
|
||||
|
||||
2012-10-07 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* w32term.h (WM_EMACS_FILENOTIFY): New custom message.
|
||||
@ -34,11 +201,12 @@
|
||||
|
||||
2012-10-07 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* nsterm.m (ns_dumpglyphs_image): Only draw slize of image (Bug#12506).
|
||||
* nsterm.m (ns_dumpglyphs_image): Only draw slice of image (Bug#12506).
|
||||
|
||||
* nsterm.m (ns_update_auto_hide_menu_bar): Remove defintion of
|
||||
MAC_OS_X_VERSION_10_6.
|
||||
(syms_of_nsterm): Remove comment about Panther and above for ns-antialias-text.
|
||||
(syms_of_nsterm): Remove comment about Panther and above for
|
||||
ns-antialias-text.
|
||||
* nsterm.h (MAC_OS_X_VERSION_10_3, onTiger): Remove.
|
||||
(EmacsApp): Remove check for >= MAC_OS_X_VERSION_10_4.
|
||||
(struct nsfont_info): Remove check for >= MAC_OS_X_VERSION_10_3.
|
||||
@ -46,7 +214,8 @@
|
||||
* nsselect.m (ns_string_from_pasteboard): Remove check for >=
|
||||
MAC_OS_X_VERSION_10_4.
|
||||
|
||||
* nsmenu.m (fillWithWidgetValue:): Remove code for < MAC_OS_X_VERSION_10_2.
|
||||
* nsmenu.m (fillWithWidgetValue:): Remove code for <
|
||||
MAC_OS_X_VERSION_10_2.
|
||||
|
||||
* nsimage.m (setPixmapData, getPixelAtX, setAlphaAtX): Remove onTiger.
|
||||
|
||||
@ -55,13 +224,13 @@
|
||||
|
||||
* nsterm.m (ns_in_resize): Remove (Bug#12479).
|
||||
(ns_resize_handle_rect, mouseDown, mouseUp, mouseDragged): Remove.
|
||||
(ns_clear_frame, sendEvent, windowDidResize, drawRect:): Remove ns_in_resize
|
||||
check.
|
||||
(ns_clear_frame, sendEvent, windowDidResize, drawRect:): Remove
|
||||
ns_in_resize check.
|
||||
(ns_clear_frame_area): Remove resize handle code.
|
||||
|
||||
* nsfns.m (ns_in_resize): Remove.
|
||||
(x_set_icon_name, ns_set_name, ns_set_name_as_filename): Remove ns_in_resize
|
||||
check.
|
||||
(x_set_icon_name, ns_set_name, ns_set_name_as_filename): Remove
|
||||
ns_in_resize check.
|
||||
|
||||
2012-10-07 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
|
@ -135,13 +135,10 @@ LIB_MATH=@LIB_MATH@
|
||||
## -lpthreads, or empty.
|
||||
LIB_PTHREAD=@LIB_PTHREAD@
|
||||
|
||||
LIBTIFF=@LIBTIFF@
|
||||
LIBJPEG=@LIBJPEG@
|
||||
LIBPNG=@LIBPNG@
|
||||
LIBGIF=@LIBGIF@
|
||||
LIBXPM=@LIBXPM@
|
||||
LIBIMAGE=@LIBTIFF@ @LIBJPEG@ @LIBPNG@ @LIBGIF@ @LIBXPM@
|
||||
|
||||
XFT_LIBS=@XFT_LIBS@
|
||||
LIBX_EXTRA=$(LIBTIFF) $(LIBJPEG) $(LIBPNG) $(LIBGIF) $(LIBXPM) -lX11 $(XFT_LIBS)
|
||||
LIBX_EXTRA=-lX11 $(XFT_LIBS)
|
||||
|
||||
FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
|
||||
FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
|
||||
@ -261,6 +258,13 @@ NS_OBJ=@NS_OBJ@
|
||||
NS_OBJC_OBJ=@NS_OBJC_OBJ@
|
||||
## Only set if NS_IMPL_GNUSTEP.
|
||||
GNU_OBJC_CFLAGS=@GNU_OBJC_CFLAGS@
|
||||
## w32fns.o w32menu.c w32reg.o fringe.o fontset.o w32font.o w32term.o
|
||||
## w32xfns.o w32select.o image.o w32uniscribe.o if HAVE_W32, else
|
||||
## empty.
|
||||
W32_OBJ=@W32_OBJ@
|
||||
## -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32 lusp10 -lcomctl32
|
||||
## --lwinspool if HAVE_W32, else empty.
|
||||
W32_LIBS=@W32_LIBS@
|
||||
|
||||
## Empty if !HAVE_X_WINDOWS
|
||||
## xfont.o ftfont.o xftfont.o ftxfont.o if HAVE_XFT
|
||||
@ -342,7 +346,7 @@ base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
|
||||
doprnt.o intervals.o textprop.o composite.o xml.o \
|
||||
profiler.o \
|
||||
$(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \
|
||||
$(WINDOW_SYSTEM_OBJ)
|
||||
$(W32_OBJ) $(WINDOW_SYSTEM_OBJ)
|
||||
obj = $(base_obj) $(NS_OBJC_OBJ)
|
||||
|
||||
## Object files used on some machine or other.
|
||||
@ -351,9 +355,9 @@ obj = $(base_obj) $(NS_OBJC_OBJ)
|
||||
## in the list, in case they ever add any such entries.
|
||||
SOME_MACHINE_OBJECTS = dosfns.o msdos.o \
|
||||
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
|
||||
fontset.o dbusbind.o \
|
||||
fontset.o dbusbind.o cygw32.o \
|
||||
nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o \
|
||||
w32.o w32console.o w32fns.o w32heap.o w32inevt.o \
|
||||
w32.o w32console.o w32fns.o w32heap.o \
|
||||
w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \
|
||||
w16select.o widget.o xfont.o ftfont.o xftfont.o ftxfont.o gtkutil.o \
|
||||
xsettings.o xgselect.o termcap.o
|
||||
@ -385,9 +389,11 @@ otherobj= $(TERMCAP_OBJ) $(PRE_ALLOC_OBJ) $(GMALLOC_OBJ) $(RALLOC_OBJ) \
|
||||
## Note that SunOS needs -lm to come before -lc; otherwise, you get
|
||||
## duplicated symbols. If the standard libraries were compiled
|
||||
## with GCC, we might need LIB_GCC again after them.
|
||||
LIBES = $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \
|
||||
$(RSVG_LIBS) $(IMAGEMAGICK_LIBS) $(LIB_CLOCK_GETTIME) $(LIB_TIMER_TIME) \
|
||||
$(DBUS_LIBS) $(LIB_EXECINFO) \
|
||||
LIBES = $(LIBS) $(W32_LIBS) $(LIBX_BASE) $(LIBIMAGE) \
|
||||
$(LIBX_OTHER) $(LIBSOUND) \
|
||||
$(RSVG_LIBS) $(IMAGEMAGICK_LIBS) $(LIB_CLOCK_GETTIME) \
|
||||
$(LIB_TIMER_TIME) $(DBUS_LIBS) \
|
||||
$(LIB_EXECINFO) \
|
||||
$(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \
|
||||
$(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \
|
||||
$(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \
|
||||
|
@ -142,6 +142,20 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_NTGUI) && !defined(DebPrint)
|
||||
# if defined(EMACSDEBUG)
|
||||
extern void _DebPrint (const char *fmt, ...);
|
||||
# define DebPrint(stuff) _DebPrint stuff
|
||||
# else
|
||||
# define DebPrint(stuff)
|
||||
# endif /* EMACSDEBUG */
|
||||
#endif /* DebPrint */
|
||||
|
||||
#if defined(CYGWIN) && defined(HAVE_NTGUI)
|
||||
#define NTGUI_UNICODE /* Cygwin runs only on UNICODE-supporting systems */
|
||||
#define _WIN32_WINNT 0x500 /* Win2k */
|
||||
#endif /* CYGWIN && HAVE_NTGUI */
|
||||
|
||||
#ifdef emacs /* Don't do this for lib-src. */
|
||||
/* Tell regex.c to use a type compatible with Emacs. */
|
||||
#define RE_TRANSLATE_TYPE Lisp_Object
|
||||
|
169
src/cygw32.c
Normal file
169
src/cygw32.c
Normal file
@ -0,0 +1,169 @@
|
||||
/* Cygwin support routines.
|
||||
Copyright (C) 2011-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
GNU Emacs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
#include "cygw32.h"
|
||||
#include "character.h"
|
||||
#include "buffer.h"
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
static Lisp_Object Qutf_16_le;
|
||||
|
||||
static Lisp_Object
|
||||
fchdir_unwind (Lisp_Object dir_fd)
|
||||
{
|
||||
(void) fchdir (XFASTINT (dir_fd));
|
||||
(void) close (XFASTINT (dir_fd));
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static void
|
||||
chdir_to_default_directory ()
|
||||
{
|
||||
Lisp_Object new_cwd;
|
||||
int old_cwd_fd = open (".", O_RDONLY | O_DIRECTORY);
|
||||
|
||||
if (old_cwd_fd == -1)
|
||||
error ("could not open current directory: %s", strerror (errno));
|
||||
|
||||
record_unwind_protect (fchdir_unwind, make_number (old_cwd_fd));
|
||||
|
||||
new_cwd = Funhandled_file_name_directory (
|
||||
Fexpand_file_name (build_string ("."), Qnil));
|
||||
if (!STRINGP (new_cwd))
|
||||
new_cwd = build_string ("/");
|
||||
|
||||
if (chdir (SDATA (ENCODE_FILE (new_cwd))))
|
||||
error ("could not chdir: %s", strerror (errno));
|
||||
}
|
||||
|
||||
static Lisp_Object
|
||||
conv_filename_to_w32_unicode (Lisp_Object in, int absolute_p)
|
||||
{
|
||||
ssize_t converted_len;
|
||||
Lisp_Object converted;
|
||||
unsigned flags;
|
||||
int count = SPECPDL_INDEX ();
|
||||
|
||||
chdir_to_default_directory ();
|
||||
|
||||
flags = CCP_POSIX_TO_WIN_W;
|
||||
if (!absolute_p) {
|
||||
flags |= CCP_RELATIVE;
|
||||
}
|
||||
|
||||
in = ENCODE_FILE (in);
|
||||
|
||||
converted_len = cygwin_conv_path (flags, SDATA (in), NULL, 0);
|
||||
if (converted_len < 2)
|
||||
error ("cygwin_conv_path: %s", strerror (errno));
|
||||
|
||||
converted = make_uninit_string (converted_len - 1);
|
||||
if (cygwin_conv_path (flags, SDATA (in),
|
||||
SDATA (converted), converted_len))
|
||||
error ("cygwin_conv_path: %s", strerror (errno));
|
||||
|
||||
return unbind_to (count, converted);
|
||||
}
|
||||
|
||||
static Lisp_Object
|
||||
conv_filename_from_w32_unicode (const wchar_t* in, int absolute_p)
|
||||
{
|
||||
ssize_t converted_len;
|
||||
Lisp_Object converted;
|
||||
unsigned flags;
|
||||
int count = SPECPDL_INDEX ();
|
||||
|
||||
chdir_to_default_directory ();
|
||||
|
||||
flags = CCP_WIN_W_TO_POSIX;
|
||||
if (!absolute_p) {
|
||||
flags |= CCP_RELATIVE;
|
||||
}
|
||||
|
||||
converted_len = cygwin_conv_path (flags, in, NULL, 0);
|
||||
if (converted_len < 1)
|
||||
error ("cygwin_conv_path: %s", strerror (errno));
|
||||
|
||||
converted = make_uninit_string (converted_len - 1 /*subtract terminator*/);
|
||||
if (cygwin_conv_path (flags, in, SDATA (converted), converted_len))
|
||||
error ("cygwin_conv_path: %s", strerror (errno));
|
||||
|
||||
return unbind_to (count, DECODE_FILE (converted));
|
||||
}
|
||||
|
||||
Lisp_Object
|
||||
from_unicode (Lisp_Object str)
|
||||
{
|
||||
CHECK_STRING (str);
|
||||
if (!STRING_MULTIBYTE (str) &&
|
||||
SBYTES (str) & 1)
|
||||
{
|
||||
str = Fsubstring (str, make_number (0), make_number (-1));
|
||||
}
|
||||
|
||||
return code_convert_string_norecord (str, Qutf_16_le, 0);
|
||||
}
|
||||
|
||||
wchar_t *
|
||||
to_unicode (Lisp_Object str, Lisp_Object *buf)
|
||||
{
|
||||
*buf = code_convert_string_norecord (str, Qutf_16_le, 1);
|
||||
/* We need to make a another copy (in addition to the one made by
|
||||
code_convert_string_norecord) to ensure that the final string is
|
||||
_doubly_ zero terminated --- that is, that the string is
|
||||
terminated by two zero bytes and one utf-16le null character.
|
||||
Because strings are already terminated with a single zero byte,
|
||||
we just add one additional zero. */
|
||||
str = make_uninit_string (SBYTES (*buf) + 1);
|
||||
memcpy (SDATA (str), SDATA (*buf), SBYTES (*buf));
|
||||
SDATA (str) [SBYTES (*buf)] = '\0';
|
||||
*buf = str;
|
||||
return WCSDATA (*buf);
|
||||
}
|
||||
|
||||
DEFUN ("cygwin-convert-path-to-windows",
|
||||
Fcygwin_convert_path_to_windows, Scygwin_convert_path_to_windows,
|
||||
1, 2, 0,
|
||||
doc: /* Convert PATH to a Windows path. If ABSOLUTE-P if
|
||||
non-nil, return an absolute path.*/)
|
||||
(Lisp_Object path, Lisp_Object absolute_p)
|
||||
{
|
||||
return from_unicode (
|
||||
conv_filename_to_w32_unicode (path, absolute_p == Qnil ? 0 : 1));
|
||||
}
|
||||
|
||||
DEFUN ("cygwin-convert-path-from-windows",
|
||||
Fcygwin_convert_path_from_windows, Scygwin_convert_path_from_windows,
|
||||
1, 2, 0,
|
||||
doc: /* Convert a Windows path to a Cygwin path. If ABSOLUTE-P
|
||||
if non-nil, return an absolute path.*/)
|
||||
(Lisp_Object path, Lisp_Object absolute_p)
|
||||
{
|
||||
return conv_filename_from_w32_unicode (to_unicode (path, &path),
|
||||
absolute_p == Qnil ? 0 : 1);
|
||||
}
|
||||
|
||||
void
|
||||
syms_of_cygw32 (void)
|
||||
{
|
||||
/* No, not utf-16-le: that one has a BOM. */
|
||||
DEFSYM (Qutf_16_le, "utf-16le");
|
||||
defsubr (&Scygwin_convert_path_from_windows);
|
||||
defsubr (&Scygwin_convert_path_to_windows);
|
||||
}
|
58
src/cygw32.h
Normal file
58
src/cygw32.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* Header for Cygwin support routines.
|
||||
Copyright (C) 2011-2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
GNU Emacs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef CYGW32_H
|
||||
#define CYGW32_H
|
||||
#include <config.h>
|
||||
#include <windef.h>
|
||||
#include <sys/cygwin.h>
|
||||
#include <wchar.h>
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "lisp.h"
|
||||
#include "coding.h"
|
||||
|
||||
/* *** Character conversion *** */
|
||||
|
||||
/* Access the wide-character string stored in a Lisp string object. */
|
||||
#define WCSDATA(x) ((wchar_t *) SDATA (x))
|
||||
|
||||
/* Convert the multi-byte string in STR to UTF-16LE encoded unibyte
|
||||
string, and store it in *BUF. BUF may safely point to STR on entry. */
|
||||
extern wchar_t *to_unicode (Lisp_Object str, Lisp_Object *buf);
|
||||
|
||||
/* Convert STR, a UTF-16LE encoded string embedded in a unibyte string
|
||||
object, to a multi-byte Emacs string, and return it. */
|
||||
extern Lisp_Object from_unicode (Lisp_Object str);
|
||||
|
||||
/* *** Path conversion. *** */
|
||||
|
||||
EXFUN (Fcygwin_convert_path_to_windows, 2);
|
||||
EXFUN (Fcygwin_convert_path_from_windows, 2);
|
||||
|
||||
/* *** Misc *** */
|
||||
extern void syms_of_cygw32 (void);
|
||||
extern char * w32_strerror (int error_no);
|
||||
|
||||
#endif /* CYGW32_H */
|
@ -3144,7 +3144,7 @@ int draw_window_fringes (struct window *, int);
|
||||
int update_window_fringes (struct window *, int);
|
||||
void compute_fringe_widths (struct frame *, int);
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
void w32_init_fringe (struct redisplay_interface *);
|
||||
void w32_reset_fringes (void);
|
||||
#endif
|
||||
@ -3247,7 +3247,7 @@ extern char unspecified_fg[], unspecified_bg[];
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
void gamma_correct (struct frame *, XColor *);
|
||||
#endif
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
void gamma_correct (struct frame *, COLORREF *);
|
||||
#endif
|
||||
|
||||
|
66
src/emacs.c
66
src/emacs.c
@ -33,9 +33,20 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#include <fcntl.h>
|
||||
#include <windows.h> /* just for w32.h */
|
||||
#include "w32.h"
|
||||
#include "w32heap.h" /* for prototype of sbrk */
|
||||
#endif
|
||||
|
||||
#if defined (WINDOWSNT)
|
||||
#include "w32heap.h"
|
||||
#endif
|
||||
|
||||
#if defined (WINDOWSNT) || defined (HAVE_NTGUI)
|
||||
#include "w32select.h"
|
||||
#include "w32font.h"
|
||||
#endif
|
||||
|
||||
#if defined (HAVE_NTGUI) && defined (CYGWIN)
|
||||
#include "cygw32.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
@ -156,6 +167,22 @@ static void *my_heap_start;
|
||||
static uprintmax_t heap_bss_diff;
|
||||
#endif
|
||||
|
||||
/* To run as a daemon under Cocoa or Windows, we must do a fork+exec,
|
||||
not a simple fork.
|
||||
|
||||
On Cocoa, CoreFoundation lib fails in forked process:
|
||||
http://developer.apple.com/ReleaseNotes/
|
||||
CoreFoundation/CoreFoundation.html)
|
||||
|
||||
On Windows, a Cygwin fork child cannot access the USER subsystem.
|
||||
|
||||
We mark being in the exec'd process by a daemon name argument of
|
||||
form "--daemon=\nFD0,FD1\nNAME" where FD are the pipe file descriptors,
|
||||
NAME is the original daemon name, if any. */
|
||||
#if defined (NS_IMPL_COCOA) || (defined (HAVE_NTGUI) && defined (CYGWIN))
|
||||
# define DAEMON_MUST_EXEC
|
||||
#endif
|
||||
|
||||
/* True means running Emacs without interactive terminal. */
|
||||
bool noninteractive;
|
||||
|
||||
@ -669,9 +696,9 @@ main (int argc, char **argv)
|
||||
bool no_loadup = 0;
|
||||
char *junk = 0;
|
||||
char *dname_arg = 0;
|
||||
#ifdef NS_IMPL_COCOA
|
||||
#ifdef DAEMON_MUST_EXEC
|
||||
char dname_arg2[80];
|
||||
#endif
|
||||
#endif /* DAEMON_MUST_EXEC */
|
||||
char *ch_to_dir;
|
||||
|
||||
#if GC_MARK_STACK
|
||||
@ -964,25 +991,19 @@ main (int argc, char **argv)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
#ifndef NS_IMPL_COCOA
|
||||
#ifndef DAEMON_MUST_EXEC
|
||||
#ifdef USE_GTK
|
||||
fprintf (stderr, "\nWarning: due to a long standing Gtk+ bug\nhttp://bugzilla.gnome.org/show_bug.cgi?id=85715\n\
|
||||
Emacs might crash when run in daemon mode and the X11 connection is unexpectedly lost.\n\
|
||||
Using an Emacs configured with --with-x-toolkit=lucid does not have this problem.\n");
|
||||
#endif
|
||||
#endif /* USE_GTK */
|
||||
f = fork ();
|
||||
#else /* NS_IMPL_COCOA */
|
||||
/* Under Cocoa we must do fork+exec as CoreFoundation lib fails in
|
||||
forked process: http://developer.apple.com/ReleaseNotes/
|
||||
CoreFoundation/CoreFoundation.html)
|
||||
We mark being in the exec'd process by a daemon name argument of
|
||||
form "--daemon=\nFD0,FD1\nNAME" where FD are the pipe file descriptors,
|
||||
NAME is the original daemon name, if any. */
|
||||
#else /* DAEMON_MUST_EXEC */
|
||||
if (!dname_arg || !strchr (dname_arg, '\n'))
|
||||
f = fork (); /* in orig */
|
||||
else
|
||||
f = 0; /* in exec'd */
|
||||
#endif /* NS_IMPL_COCOA */
|
||||
#endif /* !DAEMON_MUST_EXEC */
|
||||
if (f > 0)
|
||||
{
|
||||
int retval;
|
||||
@ -1018,7 +1039,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||
exit (1);
|
||||
}
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
#ifdef DAEMON_MUST_EXEC
|
||||
{
|
||||
/* In orig process, forked as child, OR in exec'd. */
|
||||
if (!dname_arg || !strchr (dname_arg, '\n'))
|
||||
@ -1054,7 +1075,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||
dname_arg2);
|
||||
dname_arg = *dname_arg2 ? dname_arg2 : NULL;
|
||||
}
|
||||
#endif /* NS_IMPL_COCOA */
|
||||
#endif /* DAEMON_MUST_EXEC */
|
||||
|
||||
if (dname_arg)
|
||||
daemon_name = xstrdup (dname_arg);
|
||||
@ -1357,6 +1378,9 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||
#ifdef WINDOWSNT
|
||||
syms_of_ntproc ();
|
||||
#endif /* WINDOWSNT */
|
||||
#if defined (CYGWIN) && defined (HAVE_NTGUI)
|
||||
syms_of_cygw32 ();
|
||||
#endif /* defined(CYGWIN) && defined (HAVE_NTGUI) */
|
||||
syms_of_window ();
|
||||
syms_of_xdisp ();
|
||||
syms_of_font ();
|
||||
@ -1387,11 +1411,14 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||
#ifdef HAVE_NTGUI
|
||||
syms_of_w32term ();
|
||||
syms_of_w32fns ();
|
||||
syms_of_w32select ();
|
||||
syms_of_w32menu ();
|
||||
syms_of_fontset ();
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
#ifdef HAVE_W32SELECT
|
||||
syms_of_w32select ();
|
||||
#endif /* HAVE_W32SELECT */
|
||||
|
||||
#ifdef MSDOS
|
||||
syms_of_xmenu ();
|
||||
syms_of_dosfns ();
|
||||
@ -1437,8 +1464,11 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|
||||
globals_of_w32font ();
|
||||
globals_of_w32fns ();
|
||||
globals_of_w32menu ();
|
||||
globals_of_w32select ();
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
#ifdef HAVE_W32SELECT
|
||||
globals_of_w32select ();
|
||||
#endif /* HAVE_W32SELECT */
|
||||
}
|
||||
|
||||
init_charset ();
|
||||
|
@ -5208,9 +5208,9 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */);
|
||||
#ifdef HAVE_BDFFONT
|
||||
syms_of_bdffont ();
|
||||
#endif /* HAVE_BDFFONT */
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
syms_of_w32font ();
|
||||
#endif /* WINDOWSNT */
|
||||
#endif /* HAVE_NTGUI */
|
||||
#ifdef HAVE_NS
|
||||
syms_of_nsfont ();
|
||||
#endif /* HAVE_NS */
|
||||
|
@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#define EMACS_FONT_H
|
||||
|
||||
#include "ccl.h"
|
||||
#include "frame.h"
|
||||
|
||||
/* We have three types of Lisp objects related to font.
|
||||
|
||||
@ -818,11 +819,11 @@ extern struct font_driver ftxfont_driver;
|
||||
extern void syms_of_bdffont (void);
|
||||
#endif /* HAVE_BDFFONT */
|
||||
#endif /* HAVE_X_WINDOWS */
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
extern struct font_driver w32font_driver;
|
||||
extern struct font_driver uniscribe_font_driver;
|
||||
extern void syms_of_w32font (void);
|
||||
#endif /* WINDOWSNT */
|
||||
#endif /* HAVE_NTGUI */
|
||||
#ifdef HAVE_NS
|
||||
extern Lisp_Object Qfontsize;
|
||||
extern struct font_driver nsfont_driver;
|
||||
|
@ -42,7 +42,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
#include "xterm.h"
|
||||
#endif
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
#include "w32term.h"
|
||||
#endif
|
||||
#ifdef HAVE_NS
|
||||
|
@ -2697,7 +2697,7 @@ static const struct frame_parm_table frame_parms[] =
|
||||
{"tool-bar-position", &Qtool_bar_position},
|
||||
};
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
|
||||
/* Calculate fullscreen size. Return in *TOP_POS and *LEFT_POS the
|
||||
wanted positions of the WM window (not Emacs window).
|
||||
@ -2741,7 +2741,7 @@ x_fullscreen_adjust (struct frame *f, int *width, int *height, int *top_pos, int
|
||||
*height = newheight;
|
||||
}
|
||||
|
||||
#endif /* WINDOWSNT */
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
|
||||
|
@ -618,7 +618,7 @@ typedef struct frame *FRAME_PTR;
|
||||
#define FRAME_INITIAL_P(f) ((f)->output_method == output_initial)
|
||||
#define FRAME_TERMCAP_P(f) ((f)->output_method == output_termcap)
|
||||
#define FRAME_X_P(f) ((f)->output_method == output_x_window)
|
||||
#ifndef WINDOWSNT
|
||||
#ifndef HAVE_NTGUI
|
||||
#define FRAME_W32_P(f) (0)
|
||||
#else
|
||||
#define FRAME_W32_P(f) ((f)->output_method == output_w32)
|
||||
@ -1210,7 +1210,7 @@ extern Lisp_Object x_new_font (struct frame *, Lisp_Object, int);
|
||||
|
||||
extern Lisp_Object Qface_set_after_frame_default;
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
extern void x_fullscreen_adjust (struct frame *f, int *, int *,
|
||||
int *, int *);
|
||||
#endif
|
||||
@ -1282,6 +1282,7 @@ extern char *x_get_resource_string (const char *, const char *);
|
||||
#endif
|
||||
|
||||
extern void x_query_colors (struct frame *f, XColor *, int);
|
||||
extern void x_query_color (struct frame *f, XColor *);
|
||||
|
||||
#endif /* HAVE_WINDOW_SYSTEM */
|
||||
|
||||
|
81
src/image.c
81
src/image.c
@ -75,7 +75,11 @@ typedef struct x_bitmap_record Bitmap_Record;
|
||||
#endif /* HAVE_X_WINDOWS */
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#include "w32.h"
|
||||
# ifdef WINDOWSNT
|
||||
/* We only need (or want) w32.h when we're _not_
|
||||
* compiling for Cygwin */
|
||||
# include "w32.h"
|
||||
# endif /* WINDOWSNT */
|
||||
/* W32_TODO : Color tables on W32. */
|
||||
#undef COLOR_TABLE_SUPPORT
|
||||
|
||||
@ -560,13 +564,14 @@ static struct image_type *lookup_image_type (Lisp_Object);
|
||||
static void x_laplace (struct frame *, struct image *);
|
||||
static void x_emboss (struct frame *, struct image *);
|
||||
static void x_build_heuristic_mask (struct frame *, struct image *,
|
||||
Lisp_Object);
|
||||
#ifdef HAVE_NTGUI
|
||||
Lisp_Object);
|
||||
#ifdef WINDOWSNT
|
||||
extern Lisp_Object Vlibrary_cache;
|
||||
#define CACHE_IMAGE_TYPE(type, status) \
|
||||
do { Vlibrary_cache = Fcons (Fcons (type, status), Vlibrary_cache); } while (0)
|
||||
#else
|
||||
#define CACHE_IMAGE_TYPE(type, status)
|
||||
#endif
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
#define ADD_IMAGE_TYPE(type) \
|
||||
do { Vimage_types = Fcons (type, Vimage_types); } while (0)
|
||||
@ -589,7 +594,7 @@ define_image_type (struct image_type *type)
|
||||
|
||||
if (type->init)
|
||||
{
|
||||
#ifdef HAVE_NTGUI
|
||||
#if defined (HAVE_NTGUI) && defined (WINDOWSNT)
|
||||
/* If we failed to load the library before, don't try again. */
|
||||
Lisp_Object tested = Fassq (target_type, Vlibrary_cache);
|
||||
if (CONSP (tested) && NILP (XCDR (tested)))
|
||||
@ -1834,7 +1839,7 @@ mark_image_cache (struct image_cache *c)
|
||||
X / NS / W32 support code
|
||||
***********************************************************************/
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* Macro for defining functions that will be loaded from image DLLs. */
|
||||
#define DEF_IMGLIB_FN(rettype,func,args) static rettype (FAR CDECL *fn_##func)args
|
||||
@ -1845,7 +1850,7 @@ mark_image_cache (struct image_cache *c)
|
||||
if (!fn_##func) return 0; \
|
||||
}
|
||||
|
||||
#endif /* HAVE_NTGUI */
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
/* Return true if XIMG's size WIDTH x HEIGHT doesn't break the
|
||||
windowing system.
|
||||
@ -2897,7 +2902,7 @@ xbm_load (struct frame *f, struct image *img)
|
||||
else
|
||||
bits = (char *) XBOOL_VECTOR (data)->data;
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
{
|
||||
char *invertedBits;
|
||||
int nbytes, i;
|
||||
@ -3008,7 +3013,7 @@ static const struct image_keyword xpm_format[XPM_LAST] =
|
||||
{":background", IMAGE_STRING_OR_NIL_VALUE, 0}
|
||||
};
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#if defined(HAVE_NTGUI) && defined(WINDOWSNT)
|
||||
static bool init_xpm_functions (void);
|
||||
#else
|
||||
#define init_xpm_functions NULL
|
||||
@ -3207,7 +3212,7 @@ xpm_free_colors (Display *dpy, Colormap cmap, Pixel *pixels, int npixels, void *
|
||||
#endif /* ALLOC_XPM_COLORS */
|
||||
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* XPM library details. */
|
||||
|
||||
@ -3233,8 +3238,15 @@ init_xpm_functions (void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* HAVE_NTGUI */
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
#if defined (HAVE_NTGUI) && !defined (WINDOWSNT)
|
||||
/* Glue for code below */
|
||||
#define fn_XpmReadFileToImage XpmReadFileToImage
|
||||
#define fn_XpmCreateImageFromBuffer XpmCreateImageFromBuffer
|
||||
#define fn_XImageFree XImageFree
|
||||
#define fn_XpmFreeAttributes XpmFreeAttributes
|
||||
#endif /* HAVE_NTGUI && !WINDOWSNT */
|
||||
|
||||
/* Value is true if COLOR_SYMBOLS is a valid color symbols list
|
||||
for XPM images. Such a list must consist of conses whose car and
|
||||
@ -5340,7 +5352,7 @@ static const struct image_keyword png_format[PNG_LAST] =
|
||||
{":background", IMAGE_STRING_OR_NIL_VALUE, 0}
|
||||
};
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#if defined(HAVE_NTGUI) && defined (WINDOWSNT)
|
||||
static bool init_png_functions (void);
|
||||
#else
|
||||
#define init_png_functions NULL
|
||||
@ -5378,7 +5390,7 @@ png_image_p (Lisp_Object object)
|
||||
|
||||
#ifdef HAVE_PNG
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
/* PNG library details. */
|
||||
|
||||
DEF_IMGLIB_FN (png_voidp, png_get_io_ptr, (png_structp));
|
||||
@ -5478,7 +5490,7 @@ init_png_functions (void)
|
||||
#define fn_png_set_longjmp_fn png_set_longjmp_fn
|
||||
#endif /* libpng version >= 1.5 */
|
||||
|
||||
#endif /* HAVE_NTGUI */
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
/* Possibly inefficient/inexact substitutes for _setjmp and _longjmp.
|
||||
Do not use sys_setjmp, as PNG supports only jmp_buf. The _longjmp
|
||||
@ -5999,7 +6011,7 @@ static const struct image_keyword jpeg_format[JPEG_LAST] =
|
||||
{":background", IMAGE_STRING_OR_NIL_VALUE, 0}
|
||||
};
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#if defined(HAVE_NTGUI) && defined(WINDOWSNT)
|
||||
static bool init_jpeg_functions (void);
|
||||
#else
|
||||
#define init_jpeg_functions NULL
|
||||
@ -6049,14 +6061,27 @@ jpeg_image_p (Lisp_Object object)
|
||||
#define __WIN32__ 1
|
||||
#endif
|
||||
|
||||
/* rpcndr.h (via windows.h) and jpeglib.h both define boolean types.
|
||||
Some versions of jpeglib try to detect whether rpcndr.h is loaded,
|
||||
using the Windows boolean type instead of the jpeglib boolean type
|
||||
if so. Cygwin jpeglib, however, doesn't try to detect whether its
|
||||
headers are included along with windows.h, so under Cygwin, jpeglib
|
||||
attempts to define a conflicting boolean type. Worse, forcing
|
||||
Cygwin jpeglib headers to use the Windows boolean type doesn't work
|
||||
because it created an ABI incompatibility between the
|
||||
already-compiled jpeg library and the header interface definition.
|
||||
|
||||
The best we can do is to define jpeglib's boolean type to a
|
||||
different name. This name, jpeg_boolean, remains in effect through
|
||||
the rest of image.c.
|
||||
*/
|
||||
#if defined (CYGWIN) && defined (HAVE_NTGUI)
|
||||
#define boolean jpeg_boolean
|
||||
#endif
|
||||
#include <jpeglib.h>
|
||||
#include <jerror.h>
|
||||
|
||||
#ifdef HAVE_STLIB_H_1
|
||||
#define HAVE_STDLIB_H 1
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* JPEG library details. */
|
||||
DEF_IMGLIB_FN (void, jpeg_CreateDecompress, (j_decompress_ptr, int, size_t));
|
||||
@ -6106,7 +6131,7 @@ jpeg_resync_to_restart_wrapper (j_decompress_ptr cinfo, int desired)
|
||||
#define fn_jpeg_std_error jpeg_std_error
|
||||
#define jpeg_resync_to_restart_wrapper jpeg_resync_to_restart
|
||||
|
||||
#endif /* HAVE_NTGUI */
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
struct my_jpeg_error_mgr
|
||||
{
|
||||
@ -6630,7 +6655,7 @@ tiff_image_p (Lisp_Object object)
|
||||
|
||||
#include <tiffio.h>
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* TIFF library details. */
|
||||
DEF_IMGLIB_FN (TIFFErrorHandler, TIFFSetErrorHandler, (TIFFErrorHandler));
|
||||
@ -6674,7 +6699,7 @@ init_tiff_functions (void)
|
||||
#define fn_TIFFReadRGBAImage TIFFReadRGBAImage
|
||||
#define fn_TIFFClose TIFFClose
|
||||
#define fn_TIFFSetDirectory TIFFSetDirectory
|
||||
#endif /* HAVE_NTGUI */
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
|
||||
/* Reading from a memory buffer for TIFF images Based on the PNG
|
||||
@ -7046,7 +7071,7 @@ static const struct image_keyword gif_format[GIF_LAST] =
|
||||
{":background", IMAGE_STRING_OR_NIL_VALUE, 0}
|
||||
};
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#if defined(HAVE_NTGUI) && defined(WINDOWSNT)
|
||||
static bool init_gif_functions (void);
|
||||
#else
|
||||
#define init_gif_functions NULL
|
||||
@ -7110,7 +7135,7 @@ gif_image_p (Lisp_Object object)
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* GIF library details. */
|
||||
DEF_IMGLIB_FN (int, DGifCloseFile, (GifFileType *));
|
||||
@ -7140,7 +7165,7 @@ init_gif_functions (void)
|
||||
#define fn_DGifOpen DGifOpen
|
||||
#define fn_DGifOpenFileName DGifOpenFileName
|
||||
|
||||
#endif /* HAVE_NTGUI */
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
/* Reading a GIF image from memory
|
||||
Based on the PNG memory stuff to a certain extent. */
|
||||
@ -8137,7 +8162,7 @@ svg_image_p (Lisp_Object object)
|
||||
|
||||
#include <librsvg/rsvg.h>
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/* SVG library functions. */
|
||||
DEF_IMGLIB_FN (RsvgHandle *, rsvg_handle_new);
|
||||
@ -8215,7 +8240,7 @@ init_svg_functions (void)
|
||||
#define fn_g_type_init g_type_init
|
||||
#define fn_g_object_unref g_object_unref
|
||||
#define fn_g_error_free g_error_free
|
||||
#endif /* !HAVE_NTGUI */
|
||||
#endif /* !WINDOWSNT */
|
||||
|
||||
/* Load SVG image IMG for use on frame F. Value is true if
|
||||
successful. */
|
||||
|
@ -313,8 +313,11 @@ static Lisp_Object Qmouse_fixup_help_message;
|
||||
/* Symbols to denote kinds of events. */
|
||||
static Lisp_Object Qfunction_key;
|
||||
Lisp_Object Qmouse_click;
|
||||
#if defined (WINDOWSNT)
|
||||
Lisp_Object Qlanguage_change, Qfile_notify;
|
||||
#if defined (HAVE_NTGUI)
|
||||
Lisp_Object Qlanguage_change;
|
||||
#ifdef WINDOWSNT
|
||||
Lisp_Object Qfile_notify;
|
||||
#endif
|
||||
#endif
|
||||
static Lisp_Object Qdrag_n_drop;
|
||||
static Lisp_Object Qsave_session;
|
||||
@ -3766,8 +3769,8 @@ kbd_buffer_get_event (KBOARD **kbp,
|
||||
#ifdef subprocesses
|
||||
if (kbd_on_hold_p () && kbd_buffer_nr_stored () < KBD_BUFFER_SIZE/4)
|
||||
{
|
||||
/* Start reading input again, we have processed enough so we can
|
||||
accept new events again. */
|
||||
/* Start reading input again because we have processed enough to
|
||||
be able to accept new events again. */
|
||||
unhold_keyboard_input ();
|
||||
start_polling ();
|
||||
}
|
||||
@ -3947,7 +3950,7 @@ kbd_buffer_get_event (KBOARD **kbp,
|
||||
x_activate_menubar (XFRAME (event->frame_or_window));
|
||||
}
|
||||
#endif
|
||||
#if defined (WINDOWSNT)
|
||||
#if defined (HAVE_NTGUI)
|
||||
else if (event->kind == LANGUAGE_CHANGE_EVENT)
|
||||
{
|
||||
/* Make an event (language-change (FRAME CODEPAGE LANGUAGE-ID)). */
|
||||
@ -5427,7 +5430,7 @@ make_lispy_event (struct input_event *event)
|
||||
(sizeof (lispy_function_keys)
|
||||
/ sizeof (lispy_function_keys[0])));
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
case MULTIMEDIA_KEY_EVENT:
|
||||
if (event->code < (sizeof (lispy_multimedia_keys)
|
||||
/ sizeof (lispy_multimedia_keys[0]))
|
||||
@ -11404,7 +11407,7 @@ syms_of_keyboard (void)
|
||||
DEFSYM (Qconfig_changed_event, "config-changed-event");
|
||||
DEFSYM (Qmenu_enable, "menu-enable");
|
||||
|
||||
#if defined (WINDOWSNT)
|
||||
#if defined (HAVE_NTGUI)
|
||||
DEFSYM (Qlanguage_change, "language-change");
|
||||
DEFSYM (Qfile_notify, "file-notify");
|
||||
#endif
|
||||
|
@ -551,7 +551,7 @@ extern int tty_read_avail_input (struct terminal *, struct input_event *);
|
||||
extern EMACS_TIME timer_check (void);
|
||||
extern void mark_kboards (void);
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
extern const char *const lispy_function_keys[];
|
||||
#endif
|
||||
|
||||
|
@ -208,7 +208,7 @@ make-buildobj-SH:
|
||||
GLOBAL_SOURCES = dosfns.c msdos.c \
|
||||
xterm.c xfns.c xmenu.c xselect.c xrdb.c xsmfns.c fringe.c image.c \
|
||||
fontset.c menu.c dbusbind.c \
|
||||
w32.c w32console.c w32fns.c w32heap.c w32inevt.c \
|
||||
w32.c w32console.c w32fns.c w32heap.c w32inevt.c cygw32.c \
|
||||
w32menu.c w32proc.c w32reg.c w32select.c w32term.c w32xfns.c \
|
||||
font.c w32font.c w32uniscribe.c w32notify.c \
|
||||
dispnew.c frame.c scroll.c xdisp.c window.c bidi.c \
|
||||
@ -425,6 +425,7 @@ DISPEXTERN_H = $(SRC)/dispextern.h \
|
||||
FILEMODE_H = $(GNU_LIB)/filemode.h \
|
||||
$(NT_INC)/sys/stat.h
|
||||
FONT_H = $(SRC)/font.h \
|
||||
$(FRAME_H) \
|
||||
$(CCL_H)
|
||||
FRAME_H = $(SRC)/frame.h \
|
||||
$(DISPEXTERN_H)
|
||||
@ -477,6 +478,8 @@ TERMHOOKS_H = $(SRC)/termhooks.h \
|
||||
W32FONT_H = $(SRC)/w32font.h \
|
||||
$(FONT_H)
|
||||
W32TERM_H = $(SRC)/w32term.h \
|
||||
$(ATIMER_H) \
|
||||
$(FRAME_H) \
|
||||
$(W32GUI_H)
|
||||
WINDOW_H = $(SRC)/window.h \
|
||||
$(DISPEXTERN_H)
|
||||
@ -797,6 +800,8 @@ $(BLD)/emacs.$(O) : \
|
||||
$(SRC)/unexec.h \
|
||||
$(SRC)/w32.h \
|
||||
$(SRC)/w32heap.h \
|
||||
$(SRC)/w32select.h \
|
||||
$(SRC)/w32font.h \
|
||||
$(NT_INC)/sys/file.h \
|
||||
$(NT_INC)/unistd.h \
|
||||
$(GNU_LIB)/ignore-value.h \
|
||||
@ -1234,6 +1239,7 @@ $(BLD)/w32console.$(O) : \
|
||||
$(FRAME_H) \
|
||||
$(LISP_H) \
|
||||
$(TERMHOOKS_H) \
|
||||
$(W32TERM_H) \
|
||||
$(WINDOW_H)
|
||||
|
||||
$(BLD)/print.$(O) : \
|
||||
|
@ -40,7 +40,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#endif /* HAVE_WINDOW_SYSTEM */
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
# ifdef NTGUI_UNICODE
|
||||
# define unicode_append_menu AppendMenuW
|
||||
# else /* !NTGUI_UNICODE */
|
||||
extern AppendMenuW_Proc unicode_append_menu;
|
||||
# endif /* NTGUI_UNICODE */
|
||||
extern HMENU current_popup_menu;
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
|
@ -4646,6 +4646,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
|
||||
process_output_skip = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined (USE_GTK) || defined (HAVE_GCONF) || defined (HAVE_GSETTINGS)
|
||||
nfds = xg_select
|
||||
#elif defined (HAVE_NS)
|
||||
|
@ -327,10 +327,11 @@ relinquish (void)
|
||||
|
||||
if ((char *)last_heap->end - (char *)last_heap->bloc_start <= excess)
|
||||
{
|
||||
/* This heap should have no blocs in it. */
|
||||
/* This heap should have no blocs in it. If it does, we
|
||||
cannot return it to the system. */
|
||||
if (last_heap->first_bloc != NIL_BLOC
|
||||
|| last_heap->last_bloc != NIL_BLOC)
|
||||
emacs_abort ();
|
||||
return;
|
||||
|
||||
/* Return the last heap, with its header, to the system. */
|
||||
excess = (char *)last_heap->end - (char *)last_heap->start;
|
||||
|
@ -107,9 +107,9 @@ enum event_kind
|
||||
HORIZ_WHEEL_EVENT, /* A wheel event generated by a second
|
||||
horizontal wheel that is present on some
|
||||
mice. See WHEEL_EVENT. */
|
||||
#if defined (WINDOWSNT)
|
||||
#if defined (HAVE_NTGUI)
|
||||
LANGUAGE_CHANGE_EVENT, /* A LANGUAGE_CHANGE_EVENT is
|
||||
generated on WINDOWSNT or Mac OS
|
||||
generated when HAVE_NTGUI or on Mac OS
|
||||
when the keyboard layout or input
|
||||
language is changed by the
|
||||
user. */
|
||||
@ -188,7 +188,7 @@ enum event_kind
|
||||
|
||||
, CONFIG_CHANGED_EVENT
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
/* Generated when an APPCOMMAND event is received, in response to
|
||||
Multimedia or Internet buttons on some keyboards.
|
||||
Such keys are available as normal function keys on X through the
|
||||
|
@ -83,7 +83,7 @@ DWORD_PTR extra_bss_size_static = 0;
|
||||
PIMAGE_SECTION_HEADER heap_section;
|
||||
|
||||
#ifdef HAVE_NTGUI
|
||||
HINSTANCE hinst = NULL;
|
||||
extern HINSTANCE hinst;
|
||||
HINSTANCE hprevinst = NULL;
|
||||
LPSTR lpCmdLine = "";
|
||||
int nCmdShow = 0;
|
||||
|
19
src/w32.c
19
src/w32.c
@ -31,13 +31,13 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#include <sys/file.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/utime.h>
|
||||
#include <mbstring.h> /* for _mbspbrk */
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
|
||||
/* must include CRT headers *before* config.h */
|
||||
|
||||
#include <config.h>
|
||||
#include <mbstring.h> /* for _mbspbrk */
|
||||
|
||||
#undef access
|
||||
#undef chdir
|
||||
@ -866,23 +866,6 @@ create_symbolic_link (LPTSTR lpSymlinkFilename,
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Equivalent of strerror for W32 error codes. */
|
||||
char *
|
||||
w32_strerror (int error_no)
|
||||
{
|
||||
static char buf[500];
|
||||
|
||||
if (error_no == 0)
|
||||
error_no = GetLastError ();
|
||||
|
||||
buf[0] = '\0';
|
||||
if (!FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL,
|
||||
error_no,
|
||||
0, /* choose most suitable language */
|
||||
buf, sizeof (buf), NULL))
|
||||
sprintf (buf, "w32 error %u", error_no);
|
||||
return buf;
|
||||
}
|
||||
|
||||
/* Return 1 if P is a valid pointer to an object of size SIZE. Return
|
||||
0 if P is NOT a valid pointer. Return -1 if we cannot validate P.
|
||||
|
17
src/w32.h
17
src/w32.h
@ -19,6 +19,12 @@ GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifdef CYGWIN
|
||||
#error "w32.h is not compatible with Cygwin"
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
|
||||
/* File descriptor set emulation. */
|
||||
|
||||
@ -130,17 +136,6 @@ extern LPBYTE w32_get_resource (char * key, LPDWORD type);
|
||||
extern void init_ntproc (int);
|
||||
extern void term_ntproc (int);
|
||||
extern void globals_of_w32 (void);
|
||||
extern void syms_of_w32term (void);
|
||||
extern void syms_of_w32fns (void);
|
||||
extern void globals_of_w32fns (void);
|
||||
extern void syms_of_w32select (void);
|
||||
extern void globals_of_w32select (void);
|
||||
extern void term_w32select (void);
|
||||
extern void syms_of_w32menu (void);
|
||||
extern void globals_of_w32menu (void);
|
||||
extern void syms_of_fontset (void);
|
||||
extern void syms_of_w32font (void);
|
||||
extern void check_windows_init_file (void);
|
||||
|
||||
extern void term_timers (void);
|
||||
extern void init_timers (void);
|
||||
|
@ -36,6 +36,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#include "termhooks.h"
|
||||
#include "termchar.h"
|
||||
#include "dispextern.h"
|
||||
#include "w32term.h"
|
||||
#include "w32heap.h" /* for os_subtype */
|
||||
#include "w32inevt.h"
|
||||
|
||||
@ -430,53 +431,6 @@ w32con_delete_glyphs (struct frame *f, int n)
|
||||
scroll_line (f, n, LEFT);
|
||||
}
|
||||
|
||||
static unsigned int sound_type = 0xFFFFFFFF;
|
||||
#define MB_EMACS_SILENT (0xFFFFFFFF - 1)
|
||||
|
||||
void
|
||||
w32_sys_ring_bell (struct frame *f)
|
||||
{
|
||||
if (sound_type == 0xFFFFFFFF)
|
||||
{
|
||||
Beep (666, 100);
|
||||
}
|
||||
else if (sound_type == MB_EMACS_SILENT)
|
||||
{
|
||||
/* Do nothing. */
|
||||
}
|
||||
else
|
||||
MessageBeep (sound_type);
|
||||
}
|
||||
|
||||
DEFUN ("set-message-beep", Fset_message_beep, Sset_message_beep, 1, 1, 0,
|
||||
doc: /* Set the sound generated when the bell is rung.
|
||||
SOUND is 'asterisk, 'exclamation, 'hand, 'question, 'ok, or 'silent
|
||||
to use the corresponding system sound for the bell. The 'silent sound
|
||||
prevents Emacs from making any sound at all.
|
||||
SOUND is nil to use the normal beep. */)
|
||||
(Lisp_Object sound)
|
||||
{
|
||||
CHECK_SYMBOL (sound);
|
||||
|
||||
if (NILP (sound))
|
||||
sound_type = 0xFFFFFFFF;
|
||||
else if (EQ (sound, intern ("asterisk")))
|
||||
sound_type = MB_ICONASTERISK;
|
||||
else if (EQ (sound, intern ("exclamation")))
|
||||
sound_type = MB_ICONEXCLAMATION;
|
||||
else if (EQ (sound, intern ("hand")))
|
||||
sound_type = MB_ICONHAND;
|
||||
else if (EQ (sound, intern ("question")))
|
||||
sound_type = MB_ICONQUESTION;
|
||||
else if (EQ (sound, intern ("ok")))
|
||||
sound_type = MB_OK;
|
||||
else if (EQ (sound, intern ("silent")))
|
||||
sound_type = MB_EMACS_SILENT;
|
||||
else
|
||||
sound_type = 0xFFFFFFFF;
|
||||
|
||||
return sound;
|
||||
}
|
||||
|
||||
static void
|
||||
w32con_reset_terminal_modes (struct terminal *t)
|
||||
@ -850,5 +804,4 @@ scroll-back buffer. */);
|
||||
defsubr (&Sset_screen_color);
|
||||
defsubr (&Sget_screen_color);
|
||||
defsubr (&Sset_cursor_size);
|
||||
defsubr (&Sset_message_beep);
|
||||
}
|
||||
|
792
src/w32fns.c
792
src/w32fns.c
File diff suppressed because it is too large
Load Diff
@ -18,6 +18,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <config.h>
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <ctype.h>
|
||||
#include <commdlg.h>
|
||||
@ -1434,6 +1435,9 @@ w32font_coverage_ok (FONTSIGNATURE * coverage, BYTE charset)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef WINDOWSNT
|
||||
#define _strlwr strlwr
|
||||
#endif /* !WINDOWSNT */
|
||||
|
||||
static int
|
||||
check_face_name (LOGFONT *font, char *full_name)
|
||||
|
@ -32,10 +32,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
SYSTEM_INFO sysinfo_cache;
|
||||
|
||||
/* This gives us version, build, and platform identification. */
|
||||
extern unsigned long syspage_mask;
|
||||
OSVERSIONINFO osinfo_cache;
|
||||
|
||||
size_t syspage_mask = 0;
|
||||
|
||||
/* The major and minor versions of NT. */
|
||||
int w32_major_version;
|
||||
int w32_minor_version;
|
||||
@ -44,44 +43,6 @@ int w32_build_number;
|
||||
/* Distinguish between Windows NT and Windows 95. */
|
||||
int os_subtype;
|
||||
|
||||
/* Cache information describing the NT system for later use. */
|
||||
void
|
||||
cache_system_info (void)
|
||||
{
|
||||
union
|
||||
{
|
||||
struct info
|
||||
{
|
||||
char major;
|
||||
char minor;
|
||||
short platform;
|
||||
} info;
|
||||
DWORD data;
|
||||
} version;
|
||||
|
||||
/* Cache the version of the operating system. */
|
||||
version.data = GetVersion ();
|
||||
w32_major_version = version.info.major;
|
||||
w32_minor_version = version.info.minor;
|
||||
|
||||
if (version.info.platform & 0x8000)
|
||||
os_subtype = OS_9X;
|
||||
else
|
||||
os_subtype = OS_NT;
|
||||
|
||||
/* Cache page size, allocation unit, processor type, etc. */
|
||||
GetSystemInfo (&sysinfo_cache);
|
||||
syspage_mask = sysinfo_cache.dwPageSize - 1;
|
||||
|
||||
/* Cache os info. */
|
||||
osinfo_cache.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
||||
GetVersionEx (&osinfo_cache);
|
||||
|
||||
w32_build_number = osinfo_cache.dwBuildNumber;
|
||||
if (os_subtype == OS_9X)
|
||||
w32_build_number &= 0xffff;
|
||||
}
|
||||
|
||||
/* Emulate getpagesize. */
|
||||
int
|
||||
getpagesize (void)
|
||||
|
172
src/w32inevt.c
172
src/w32inevt.c
@ -70,6 +70,9 @@ w32_read_console_input (HANDLE h, INPUT_RECORD *rec, DWORD recsize,
|
||||
: ReadConsoleInputA (h, rec, recsize, waiting));
|
||||
}
|
||||
|
||||
/* Set by w32_console_toggle_lock_key. */
|
||||
int faked_key;
|
||||
|
||||
static int
|
||||
fill_queue (BOOL block)
|
||||
{
|
||||
@ -110,67 +113,7 @@ get_frame (void)
|
||||
|
||||
/* Translate console modifiers to emacs modifiers.
|
||||
German keyboard support (Kai Morgan Zeise 2/18/95). */
|
||||
int
|
||||
w32_kbd_mods_to_emacs (DWORD mods, WORD key)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
/* If we recognize right-alt and left-ctrl as AltGr, and it has been
|
||||
pressed, first remove those modifiers. */
|
||||
if (!NILP (Vw32_recognize_altgr)
|
||||
&& (mods & (RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED))
|
||||
== (RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED))
|
||||
mods &= ~ (RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED);
|
||||
|
||||
if (mods & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED))
|
||||
retval = ((NILP (Vw32_alt_is_meta)) ? alt_modifier : meta_modifier);
|
||||
|
||||
if (mods & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
|
||||
{
|
||||
retval |= ctrl_modifier;
|
||||
if ((mods & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
|
||||
== (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
|
||||
retval |= meta_modifier;
|
||||
}
|
||||
|
||||
if (mods & LEFT_WIN_PRESSED)
|
||||
retval |= w32_key_to_modifier (VK_LWIN);
|
||||
if (mods & RIGHT_WIN_PRESSED)
|
||||
retval |= w32_key_to_modifier (VK_RWIN);
|
||||
if (mods & APPS_PRESSED)
|
||||
retval |= w32_key_to_modifier (VK_APPS);
|
||||
if (mods & SCROLLLOCK_ON)
|
||||
retval |= w32_key_to_modifier (VK_SCROLL);
|
||||
|
||||
/* Just in case someone wanted the original behavior, make it
|
||||
optional by setting w32-capslock-is-shiftlock to t. */
|
||||
if (NILP (Vw32_capslock_is_shiftlock)
|
||||
/* Keys that should _not_ be affected by CapsLock. */
|
||||
&& ( (key == VK_BACK)
|
||||
|| (key == VK_TAB)
|
||||
|| (key == VK_CLEAR)
|
||||
|| (key == VK_RETURN)
|
||||
|| (key == VK_ESCAPE)
|
||||
|| ((key >= VK_SPACE) && (key <= VK_HELP))
|
||||
|| ((key >= VK_NUMPAD0) && (key <= VK_F24))
|
||||
|| ((key >= VK_NUMPAD_CLEAR) && (key <= VK_NUMPAD_DELETE))
|
||||
))
|
||||
{
|
||||
/* Only consider shift state. */
|
||||
if ((mods & SHIFT_PRESSED) != 0)
|
||||
retval |= shift_modifier;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Ignore CapsLock state if not enabled. */
|
||||
if (NILP (Vw32_enable_caps_lock))
|
||||
mods &= ~CAPSLOCK_ON;
|
||||
if ((mods & (SHIFT_PRESSED | CAPSLOCK_ON)) != 0)
|
||||
retval |= shift_modifier;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Return nonzero if the virtual key is a dead key. */
|
||||
@ -187,90 +130,7 @@ is_dead_key (int wparam)
|
||||
/* The return code indicates key code size. cpID is the codepage to
|
||||
use for translation to Unicode; -1 means use the current console
|
||||
input codepage. */
|
||||
int
|
||||
w32_kbd_patch_key (KEY_EVENT_RECORD *event, int cpId)
|
||||
{
|
||||
unsigned int key_code = event->wVirtualKeyCode;
|
||||
unsigned int mods = event->dwControlKeyState;
|
||||
BYTE keystate[256];
|
||||
static BYTE ansi_code[4];
|
||||
static int isdead = 0;
|
||||
|
||||
if (isdead == 2)
|
||||
{
|
||||
event->uChar.AsciiChar = ansi_code[2];
|
||||
isdead = 0;
|
||||
return 1;
|
||||
}
|
||||
if (event->uChar.AsciiChar != 0)
|
||||
return 1;
|
||||
|
||||
memset (keystate, 0, sizeof (keystate));
|
||||
keystate[key_code] = 0x80;
|
||||
if (mods & SHIFT_PRESSED)
|
||||
keystate[VK_SHIFT] = 0x80;
|
||||
if (mods & CAPSLOCK_ON)
|
||||
keystate[VK_CAPITAL] = 1;
|
||||
/* If we recognize right-alt and left-ctrl as AltGr, set the key
|
||||
states accordingly before invoking ToAscii. */
|
||||
if (!NILP (Vw32_recognize_altgr)
|
||||
&& (mods & LEFT_CTRL_PRESSED) && (mods & RIGHT_ALT_PRESSED))
|
||||
{
|
||||
keystate[VK_CONTROL] = 0x80;
|
||||
keystate[VK_LCONTROL] = 0x80;
|
||||
keystate[VK_MENU] = 0x80;
|
||||
keystate[VK_RMENU] = 0x80;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Because of an OS bug, ToAscii corrupts the stack when called to
|
||||
convert a dead key in console mode on NT4. Unfortunately, trying
|
||||
to check for dead keys using MapVirtualKey doesn't work either -
|
||||
these functions apparently use internal information about keyboard
|
||||
layout which doesn't get properly updated in console programs when
|
||||
changing layout (though apparently it gets partly updated,
|
||||
otherwise ToAscii wouldn't crash). */
|
||||
if (is_dead_key (event->wVirtualKeyCode))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* On NT, call ToUnicode instead and then convert to the current
|
||||
console input codepage. */
|
||||
if (os_subtype == OS_NT)
|
||||
{
|
||||
WCHAR buf[128];
|
||||
|
||||
isdead = ToUnicode (event->wVirtualKeyCode, event->wVirtualScanCode,
|
||||
keystate, buf, 128, 0);
|
||||
if (isdead > 0)
|
||||
{
|
||||
/* When we are called from the GUI message processing code,
|
||||
we are passed the current keyboard codepage, a positive
|
||||
number, to use below. */
|
||||
if (cpId == -1)
|
||||
cpId = GetConsoleCP ();
|
||||
|
||||
event->uChar.UnicodeChar = buf[isdead - 1];
|
||||
isdead = WideCharToMultiByte (cpId, 0, buf, isdead,
|
||||
ansi_code, 4, NULL, NULL);
|
||||
}
|
||||
else
|
||||
isdead = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
isdead = ToAscii (event->wVirtualKeyCode, event->wVirtualScanCode,
|
||||
keystate, (LPWORD) ansi_code, 0);
|
||||
}
|
||||
|
||||
if (isdead == 0)
|
||||
return 0;
|
||||
event->uChar.AsciiChar = ansi_code[0];
|
||||
return isdead;
|
||||
}
|
||||
|
||||
|
||||
static int faked_key = 0;
|
||||
|
||||
/* return code -1 means that event_queue_ptr won't be incremented.
|
||||
In other word, this event makes two key codes. (by himi) */
|
||||
@ -531,32 +391,6 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
w32_console_toggle_lock_key (int vk_code, Lisp_Object new_state)
|
||||
{
|
||||
int cur_state = (GetKeyState (vk_code) & 1);
|
||||
|
||||
if (NILP (new_state)
|
||||
|| (NUMBERP (new_state)
|
||||
&& ((XUINT (new_state)) & 1) != cur_state))
|
||||
{
|
||||
faked_key = vk_code;
|
||||
|
||||
keybd_event ((BYTE) vk_code,
|
||||
(BYTE) MapVirtualKey (vk_code, 0),
|
||||
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
|
||||
keybd_event ((BYTE) vk_code,
|
||||
(BYTE) MapVirtualKey (vk_code, 0),
|
||||
KEYEVENTF_EXTENDEDKEY | 0, 0);
|
||||
keybd_event ((BYTE) vk_code,
|
||||
(BYTE) MapVirtualKey (vk_code, 0),
|
||||
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
|
||||
cur_state = !cur_state;
|
||||
}
|
||||
|
||||
return cur_state;
|
||||
}
|
||||
|
||||
/* Mouse position hook. */
|
||||
void
|
||||
w32_console_mouse_position (FRAME_PTR *f,
|
||||
|
@ -21,7 +21,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <mbstring.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "lisp.h"
|
||||
#include "keyboard.h"
|
||||
@ -40,6 +40,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
if this is not done before the other system files. */
|
||||
#include "w32term.h"
|
||||
|
||||
/* Cygwin does not support the multibyte string functions declared in
|
||||
* mbstring.h below --- but that's okay: because Cygwin is
|
||||
* UNICODE-only, we don't need to use these functions anyway. */
|
||||
|
||||
#ifndef NTGUI_UNICODE
|
||||
#include <mbstring.h>
|
||||
#endif /* !NTGUI_UNICODE */
|
||||
|
||||
/* Load sys/types.h if not already loaded.
|
||||
In some systems loading it twice is suicidal. */
|
||||
#ifndef makedev
|
||||
@ -78,10 +86,17 @@ typedef int (WINAPI * MessageBoxW_Proc) (
|
||||
IN WCHAR *caption,
|
||||
IN UINT type);
|
||||
|
||||
#ifdef NTGUI_UNICODE
|
||||
#define get_menu_item_info GetMenuItemInfoA
|
||||
#define set_menu_item_info SetMenuItemInfoA
|
||||
#define unicode_append_menu AppendMenuW
|
||||
#define unicode_message_box MessageBoxW
|
||||
#else /* !NTGUI_UNICODE */
|
||||
GetMenuItemInfoA_Proc get_menu_item_info = NULL;
|
||||
SetMenuItemInfoA_Proc set_menu_item_info = NULL;
|
||||
AppendMenuW_Proc unicode_append_menu = NULL;
|
||||
MessageBoxW_Proc unicode_message_box = NULL;
|
||||
#endif /* NTGUI_UNICODE */
|
||||
|
||||
Lisp_Object Qdebug_on_next_call;
|
||||
|
||||
@ -98,6 +113,7 @@ static void utf8to16 (unsigned char *, int, WCHAR *);
|
||||
static int fill_in_menu (HMENU, widget_value *);
|
||||
|
||||
void w32_free_menu_strings (HWND);
|
||||
|
||||
|
||||
|
||||
/* This is set nonzero after the user activates the menu bar, and set
|
||||
@ -1405,6 +1421,7 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
|
||||
nlen++;
|
||||
}
|
||||
}
|
||||
#ifndef NTGUI_UNICODE
|
||||
else
|
||||
{
|
||||
/* If encoded with the system codepage, use multibyte string
|
||||
@ -1415,6 +1432,7 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
|
||||
nlen++;
|
||||
}
|
||||
}
|
||||
#endif /* !NTGUI_UNICODE */
|
||||
|
||||
if (nlen > orig_len)
|
||||
{
|
||||
@ -1429,6 +1447,7 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
|
||||
*q++ = *p;
|
||||
*q++ = *p++;
|
||||
}
|
||||
#ifndef NTGUI_UNICODE
|
||||
else
|
||||
{
|
||||
if (_mbsnextc (p) == '&')
|
||||
@ -1440,6 +1459,7 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
|
||||
p = _mbsinc (p);
|
||||
q = _mbsinc (q);
|
||||
}
|
||||
#endif /* !NTGUI_UNICODE */
|
||||
}
|
||||
*q = '\0';
|
||||
}
|
||||
@ -1486,6 +1506,8 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
|
||||
item != NULL ? (UINT_PTR) item
|
||||
: (UINT_PTR) wv->call_data,
|
||||
utf16_string);
|
||||
|
||||
#ifndef NTGUI_UNICODE /* Fallback does not apply when always UNICODE */
|
||||
if (!return_value)
|
||||
{
|
||||
/* On W9x/ME, Unicode menus are not supported, though AppendMenuW
|
||||
@ -1504,6 +1526,7 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
|
||||
if (osinfo_cache.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
||||
unicode_append_menu = NULL;
|
||||
}
|
||||
#endif /* NTGUI_UNICODE */
|
||||
|
||||
if (unicode_append_menu && (fuFlags & MF_OWNERDRAW))
|
||||
local_free (out_string);
|
||||
@ -1723,10 +1746,12 @@ syms_of_w32menu (void)
|
||||
void
|
||||
globals_of_w32menu (void)
|
||||
{
|
||||
#ifndef NTGUI_UNICODE
|
||||
/* See if Get/SetMenuItemInfo functions are available. */
|
||||
HMODULE user32 = GetModuleHandle ("user32.dll");
|
||||
get_menu_item_info = (GetMenuItemInfoA_Proc) GetProcAddress (user32, "GetMenuItemInfoA");
|
||||
set_menu_item_info = (SetMenuItemInfoA_Proc) GetProcAddress (user32, "SetMenuItemInfoA");
|
||||
unicode_append_menu = (AppendMenuW_Proc) GetProcAddress (user32, "AppendMenuW");
|
||||
unicode_message_box = (MessageBoxW_Proc) GetProcAddress (user32, "MessageBoxW");
|
||||
#endif /* !NTGUI_UNICODE */
|
||||
}
|
||||
|
@ -67,20 +67,6 @@ extern BOOL WINAPI IsValidLocale (LCID, DWORD);
|
||||
|
||||
Lisp_Object Qhigh, Qlow;
|
||||
|
||||
#ifdef EMACSDEBUG
|
||||
void
|
||||
_DebPrint (const char *fmt, ...)
|
||||
{
|
||||
char buf[1024];
|
||||
va_list args;
|
||||
|
||||
va_start (args, fmt);
|
||||
vsprintf (buf, fmt, args);
|
||||
va_end (args);
|
||||
OutputDebugString (buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef void (_CALLBACK_ *signal_handler) (int);
|
||||
|
||||
/* Signal handlers...SIG_DFL == 0 so this is initialized correctly. */
|
||||
|
@ -81,6 +81,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#include "coding.h"
|
||||
#include "composite.h"
|
||||
|
||||
#ifdef CYGWIN
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#define _memccpy memccpy
|
||||
#endif
|
||||
|
||||
static HGLOBAL convert_to_handle_as_ascii (void);
|
||||
static HGLOBAL convert_to_handle_as_coded (Lisp_Object coding_system);
|
||||
|
30
src/w32select.h
Normal file
30
src/w32select.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* Selection processing for Emacs on the Microsoft W32 API.
|
||||
|
||||
Copyright (C) 1993-1994, 2001-2011 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
GNU Emacs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef W32SELECT_H
|
||||
#define W32SELECT_H
|
||||
#include <windows.h>
|
||||
|
||||
#define HAVE_W32SELECT 1
|
||||
|
||||
extern void syms_of_w32select (void);
|
||||
extern void globals_of_w32select (void);
|
||||
extern void term_w32select (void);
|
||||
|
||||
#endif
|
@ -51,7 +51,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#include "atimer.h"
|
||||
#include "keymap.h"
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#include "w32heap.h"
|
||||
#endif
|
||||
|
||||
#ifndef WINDOWSNT
|
||||
#include <io.h> /* for get_osfhandle */
|
||||
#endif
|
||||
|
||||
#include <shellapi.h>
|
||||
|
||||
#include "font.h"
|
||||
@ -121,7 +128,7 @@ typedef struct tagGLYPHSET
|
||||
WCRANGE ranges[1];
|
||||
} GLYPHSET;
|
||||
|
||||
#endif
|
||||
#endif /* compiling for pre-Win2k */
|
||||
|
||||
/* Dynamic linking to SetLayeredWindowAttribute (only since 2000). */
|
||||
BOOL (WINAPI *pfnSetLayeredWindowAttributes) (HWND, COLORREF, BYTE, DWORD);
|
||||
@ -190,6 +197,13 @@ static int volatile input_signal_count;
|
||||
static int input_signal_count;
|
||||
#endif
|
||||
|
||||
#ifdef CYGWIN
|
||||
int w32_message_fd = -1;
|
||||
#endif /* CYGWIN */
|
||||
|
||||
/* Keyboard code page - may be changed by language-change events. */
|
||||
static int keyboard_codepage;
|
||||
|
||||
static void x_update_window_end (struct window *, int, int);
|
||||
static void w32_handle_tool_bar_click (struct frame *,
|
||||
struct input_event *);
|
||||
@ -4256,6 +4270,9 @@ static char dbcs_lead = 0;
|
||||
This routine is called by the SIGIO handler.
|
||||
We return as soon as there are no more events to be read.
|
||||
|
||||
For an overview of how Emacs input works on MS-Windows, see the
|
||||
commentary before w32_msg_pump in w32fns.c.
|
||||
|
||||
We return the number of characters stored into the buffer,
|
||||
thus pretending to be `read'.
|
||||
|
||||
@ -4278,18 +4295,26 @@ w32_read_socket (struct terminal *terminal,
|
||||
struct frame *f;
|
||||
struct w32_display_info *dpyinfo = &one_w32_display_info;
|
||||
Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight;
|
||||
static char buf[1];
|
||||
|
||||
block_input ();
|
||||
|
||||
/* So people can tell when we have read the available input. */
|
||||
input_signal_count++;
|
||||
|
||||
/* Process any incoming thread messages. */
|
||||
drain_message_queue ();
|
||||
|
||||
/* TODO: ghostscript integration. */
|
||||
while (get_next_msg (&msg, FALSE))
|
||||
{
|
||||
struct input_event inev;
|
||||
int do_help = 0;
|
||||
|
||||
/* DebPrint (("w32_read_socket: %s time:%u\n", */
|
||||
/* w32_name_of_message (msg.msg.message), */
|
||||
/* msg.msg.time)); */
|
||||
|
||||
EVENT_INIT (inev);
|
||||
inev.kind = NO_EVENT;
|
||||
inev.arg = Qnil;
|
||||
@ -6428,8 +6453,15 @@ w32_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
|
||||
w32_defined_color (0, "black", &color, 1);
|
||||
}
|
||||
|
||||
/* Add the default keyboard. */
|
||||
#ifdef WINDOWSNT
|
||||
/* Add the default keyboard. When !WINDOWSNT, we're using the
|
||||
standard Emacs console handling machinery and don't need an
|
||||
explicit FD here. */
|
||||
add_keyboard_wait_descriptor (0);
|
||||
#elif CYGWIN
|
||||
/* /dev/windows wakes us up when we have a thread message pending. */
|
||||
add_keyboard_wait_descriptor (w32_message_fd);
|
||||
#endif
|
||||
|
||||
/* Create Fringe Bitmaps and store them for later use.
|
||||
|
||||
@ -6440,15 +6472,6 @@ w32_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
|
||||
the bitmaps. */
|
||||
w32_init_fringe (terminal->rif);
|
||||
|
||||
#ifdef F_SETOWN
|
||||
fcntl (connection, F_SETOWN, getpid ());
|
||||
#endif /* ! defined (F_SETOWN) */
|
||||
|
||||
#ifdef SIGIO
|
||||
if (interrupt_input)
|
||||
init_sigio (connection);
|
||||
#endif /* ! defined (SIGIO) */
|
||||
|
||||
unblock_input ();
|
||||
|
||||
return dpyinfo;
|
||||
@ -6498,6 +6521,7 @@ x_delete_display (struct w32_display_info *dpyinfo)
|
||||
|
||||
w32_reset_fringes ();
|
||||
}
|
||||
|
||||
|
||||
/* Set up use of W32. */
|
||||
|
||||
@ -6535,6 +6559,11 @@ w32_initialize (void)
|
||||
set_user_model (L"GNU.Emacs");
|
||||
}
|
||||
|
||||
#ifdef CYGWIN
|
||||
if ((w32_message_fd = open ("/dev/windows", O_RDWR | O_CLOEXEC)) == -1)
|
||||
fatal ("opening /dev/windows: %s", strerror (errno));
|
||||
#endif /* CYGWIN */
|
||||
|
||||
/* Initialize w32_use_visible_system_caret based on whether a screen
|
||||
reader is in use. */
|
||||
if (!SystemParametersInfo (SPI_GETSCREENREADER, 0,
|
||||
@ -6701,4 +6730,6 @@ With MS Windows or Nextstep, the value is t. */);
|
||||
|
||||
staticpro (&last_mouse_motion_frame);
|
||||
last_mouse_motion_frame = Qnil;
|
||||
|
||||
Fprovide (intern_c_string ("w32"), Qnil);
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
/* Added by Kevin Gallo */
|
||||
|
||||
#include "w32gui.h"
|
||||
#include "frame.h"
|
||||
#include "atimer.h"
|
||||
|
||||
|
||||
#define BLACK_PIX_DEFAULT(f) PALETTERGB(0,0,0)
|
||||
@ -195,11 +197,45 @@ Lisp_Object display_x_get_resource (struct w32_display_info *,
|
||||
Lisp_Object, Lisp_Object,
|
||||
Lisp_Object, Lisp_Object);
|
||||
|
||||
extern void x_focus_on_frame (struct frame *f);
|
||||
|
||||
/* also defined in xterm.h XXX: factor out to common header */
|
||||
|
||||
extern struct w32_display_info *w32_term_init (Lisp_Object,
|
||||
char *, char *);
|
||||
|
||||
extern void check_w32 (void);
|
||||
extern int w32_defined_color (FRAME_PTR f, const char *color,
|
||||
XColor *color_def, int alloc);
|
||||
extern void x_set_window_size (struct frame *f, int change_grav,
|
||||
int cols, int rows);
|
||||
extern int x_display_pixel_height (struct w32_display_info *);
|
||||
extern int x_display_pixel_width (struct w32_display_info *);
|
||||
extern void x_sync (struct frame *);
|
||||
extern Lisp_Object x_get_focus_frame (struct frame *);
|
||||
extern void x_set_mouse_position (struct frame *f, int h, int v);
|
||||
extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
|
||||
extern void x_make_frame_visible (struct frame *f);
|
||||
extern void x_make_frame_invisible (struct frame *f);
|
||||
extern void x_iconify_frame (struct frame *f);
|
||||
extern int x_char_width (struct frame *f);
|
||||
extern int x_char_height (struct frame *f);
|
||||
extern int x_pixel_width (struct frame *f);
|
||||
extern int x_pixel_height (struct frame *f);
|
||||
extern void x_set_frame_alpha (struct frame *f);
|
||||
extern void x_set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object);
|
||||
extern void x_set_tool_bar_lines (struct frame *f,
|
||||
Lisp_Object value,
|
||||
Lisp_Object oldval);
|
||||
extern void x_activate_menubar (struct frame *);
|
||||
extern int x_bitmap_icon (struct frame *, Lisp_Object);
|
||||
extern void initialize_frame_menubar (struct frame *);
|
||||
extern void x_free_frame_resources (struct frame *);
|
||||
extern void x_real_positions (struct frame *, int *, int *);
|
||||
|
||||
/* w32inevt.c */
|
||||
extern int w32_kbd_patch_key (KEY_EVENT_RECORD *event, int cpId);
|
||||
extern int w32_kbd_mods_to_emacs (DWORD mods, WORD key);
|
||||
|
||||
|
||||
extern Lisp_Object x_get_focus_frame (struct frame *);
|
||||
|
||||
@ -584,8 +620,9 @@ do { \
|
||||
#define WM_EMACS_SETCURSOR (WM_EMACS_START + 19)
|
||||
#define WM_EMACS_PAINT (WM_EMACS_START + 20)
|
||||
#define WM_EMACS_BRINGTOTOP (WM_EMACS_START + 21)
|
||||
#define WM_EMACS_FILENOTIFY (WM_EMACS_START + 22)
|
||||
#define WM_EMACS_END (WM_EMACS_START + 23)
|
||||
#define WM_EMACS_INPUT_READY (WM_EMACS_START + 22)
|
||||
#define WM_EMACS_FILENOTIFY (WM_EMACS_START + 23)
|
||||
#define WM_EMACS_END (WM_EMACS_START + 24)
|
||||
|
||||
#define WND_FONTWIDTH_INDEX (0)
|
||||
#define WND_LINEHEIGHT_INDEX (4)
|
||||
@ -607,6 +644,8 @@ typedef struct W32Msg {
|
||||
RECT rect;
|
||||
} W32Msg;
|
||||
|
||||
extern BOOL prepend_msg (W32Msg *lpmsg);
|
||||
|
||||
/* Structure for recording message when input thread must return a
|
||||
result that depends on lisp thread to compute. Lisp thread can
|
||||
complete deferred messages out of order. */
|
||||
@ -715,3 +754,19 @@ extern HWND w32_system_caret_hwnd;
|
||||
extern int w32_system_caret_height;
|
||||
extern int w32_system_caret_x;
|
||||
extern int w32_system_caret_y;
|
||||
|
||||
#if EMACSDEBUG
|
||||
extern const char*
|
||||
w32_name_of_message (UINT msg);
|
||||
#endif /* EMACSDEBUG */
|
||||
|
||||
extern void syms_of_w32term (void);
|
||||
extern void syms_of_w32menu (void);
|
||||
extern void syms_of_w32fns (void);
|
||||
|
||||
extern void globals_of_w32menu (void);
|
||||
extern void globals_of_w32fns (void);
|
||||
|
||||
#ifdef CYGWIN
|
||||
extern int w32_message_fd;
|
||||
#endif /* CYGWIN */
|
||||
|
@ -19,6 +19,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#include <config.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "lisp.h"
|
||||
#include "keyboard.h"
|
||||
#include "frame.h"
|
||||
@ -32,7 +33,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#define myfree(lp) GlobalFreePtr (lp)
|
||||
|
||||
CRITICAL_SECTION critsect;
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
extern HANDLE keyboard_handle;
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
HANDLE input_available = NULL;
|
||||
HANDLE interrupt_handle = NULL;
|
||||
|
||||
@ -43,7 +48,11 @@ init_crit (void)
|
||||
|
||||
/* For safety, input_available should only be reset by get_next_msg
|
||||
when the input queue is empty, so make it a manual reset event. */
|
||||
keyboard_handle = input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
|
||||
input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
keyboard_handle = input_available;
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
/* interrupt_handle is signaled when quit (C-g) is detected, so that
|
||||
blocking system calls can be interrupted. We make it a manual
|
||||
@ -240,6 +249,22 @@ get_next_msg (W32Msg * lpmsg, BOOL bWait)
|
||||
return (bRet);
|
||||
}
|
||||
|
||||
extern char * w32_strerror (int error_no);
|
||||
|
||||
/* Tell the main thread that we have input available; if the main
|
||||
thread is blocked in select(), we wake it up here. */
|
||||
static void
|
||||
notify_msg_ready (void)
|
||||
{
|
||||
SetEvent (input_available);
|
||||
|
||||
#ifdef CYGWIN
|
||||
/* Wakes up the main thread, which is blocked select()ing for /dev/windows,
|
||||
among other files. */
|
||||
(void) PostThreadMessage (dwMainThreadId, WM_EMACS_INPUT_READY, 0, 0);
|
||||
#endif /* CYGWIN */
|
||||
}
|
||||
|
||||
BOOL
|
||||
post_msg (W32Msg * lpmsg)
|
||||
{
|
||||
@ -263,8 +288,7 @@ post_msg (W32Msg * lpmsg)
|
||||
}
|
||||
|
||||
lpTail = lpNew;
|
||||
SetEvent (input_available);
|
||||
|
||||
notify_msg_ready ();
|
||||
leave_crit ();
|
||||
|
||||
return (TRUE);
|
||||
@ -285,7 +309,7 @@ prepend_msg (W32Msg *lpmsg)
|
||||
nQueue++;
|
||||
lpNew->lpNext = lpHead;
|
||||
lpHead = lpNew;
|
||||
|
||||
notify_msg_ready ();
|
||||
leave_crit ();
|
||||
|
||||
return (TRUE);
|
||||
|
@ -43,7 +43,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
#include "xterm.h"
|
||||
#endif /* HAVE_X_WINDOWS */
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
#include "w32term.h"
|
||||
#endif
|
||||
#ifdef MSDOS
|
||||
|
@ -302,7 +302,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
#include "xterm.h"
|
||||
#endif
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
#include "w32term.h"
|
||||
#endif
|
||||
#ifdef HAVE_NS
|
||||
|
18
src/xfaces.c
18
src/xfaces.c
@ -227,13 +227,13 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
#include TERM_HEADER
|
||||
#include "fontset.h"
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
#undef FRAME_X_DISPLAY_INFO
|
||||
#define FRAME_X_DISPLAY_INFO FRAME_W32_DISPLAY_INFO
|
||||
#define x_display_info w32_display_info
|
||||
#define check_x check_w32
|
||||
#define GCGraphicsExposures 0
|
||||
#endif /* WINDOWSNT */
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
#ifdef HAVE_NS
|
||||
#undef FRAME_X_DISPLAY_INFO
|
||||
@ -625,7 +625,7 @@ x_free_gc (struct frame *f, GC gc)
|
||||
|
||||
#endif /* HAVE_X_WINDOWS */
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
/* W32 emulation of GCs */
|
||||
|
||||
static GC
|
||||
@ -649,7 +649,7 @@ x_free_gc (struct frame *f, GC gc)
|
||||
xfree (gc);
|
||||
}
|
||||
|
||||
#endif /* WINDOWSNT */
|
||||
#endif /* HAVE_NTGUI */
|
||||
|
||||
#ifdef HAVE_NS
|
||||
/* NS emulation of GCs */
|
||||
@ -719,7 +719,7 @@ init_frame_faces (struct frame *f)
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
if (!FRAME_X_P (f) || FRAME_X_WINDOW (f))
|
||||
#endif
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
if (!FRAME_WINDOW_P (f) || FRAME_W32_WINDOW (f))
|
||||
#endif
|
||||
#ifdef HAVE_NS
|
||||
@ -1098,7 +1098,7 @@ defined_color (struct frame *f, const char *color_name, XColor *color_def,
|
||||
else if (FRAME_X_P (f))
|
||||
return x_defined_color (f, color_name, color_def, alloc);
|
||||
#endif
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
else if (FRAME_W32_P (f))
|
||||
return w32_defined_color (f, color_name, color_def, alloc);
|
||||
#endif
|
||||
@ -3245,7 +3245,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
param = Qbackground_color;
|
||||
}
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
#ifndef WINDOWSNT
|
||||
#ifndef HAVE_NTGUI
|
||||
else if (EQ (face, Qscroll_bar))
|
||||
{
|
||||
/* Changing the colors of `scroll-bar' sets frame parameters
|
||||
@ -3255,7 +3255,7 @@ FRAME 0 means change the face on all frames, and change the default
|
||||
else if (EQ (attr, QCbackground))
|
||||
param = Qscroll_bar_background;
|
||||
}
|
||||
#endif /* not WINDOWSNT */
|
||||
#endif /* not HAVE_NTGUI */
|
||||
else if (EQ (face, Qborder))
|
||||
{
|
||||
/* Changing background color of `border' sets frame parameter
|
||||
@ -6362,7 +6362,7 @@ where R,G,B are numbers between 0 and 255 and name is an arbitrary string. */)
|
||||
if (num >= 0 && name[num] == '\n')
|
||||
name[num] = 0;
|
||||
cmap = Fcons (Fcons (build_string (name),
|
||||
#ifdef WINDOWSNT
|
||||
#ifdef HAVE_NTGUI
|
||||
make_number (RGB (red, green, blue))),
|
||||
#else
|
||||
make_number ((red << 16) | (green << 8) | blue)),
|
||||
|
Loading…
Reference in New Issue
Block a user