1
0
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:
Eli Zaretskii 2012-10-08 15:06:31 +02:00
commit 7014794467
87 changed files with 2562 additions and 1098 deletions

View File

@ -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.

View File

@ -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@

View File

@ -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
View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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))
{

View File

@ -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 \

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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)

View File

@ -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'

View 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'.
;;

View File

@ -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."

View File

@ -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")

View File

@ -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

View File

@ -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??

View File

@ -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")

View File

@ -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))

View File

@ -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))

View File

@ -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)

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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))

View File

@ -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))

View File

@ -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))

View File

@ -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)

View File

@ -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

View File

@ -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.

View File

@ -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
View 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)

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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!

View File

@ -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>

View File

@ -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) \

View File

@ -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
View 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
View 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 */

View File

@ -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

View File

@ -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 ();

View File

@ -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 */

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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. */

View File

@ -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

View File

@ -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

View File

@ -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) : \

View File

@ -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 */

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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.

View File

@ -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);

View File

@ -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);
}

File diff suppressed because it is too large Load Diff

View File

@ -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)

View File

@ -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)

View File

@ -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,

View File

@ -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 */
}

View File

@ -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. */

View File

@ -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
View 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

View File

@ -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);
}

View File

@ -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 */

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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)),