1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-16 09:50:25 +00:00

merge from trunk

This commit is contained in:
Joakim Verona 2013-08-12 12:29:06 +02:00
commit 5ff84f8a17
42 changed files with 2058 additions and 945 deletions

View File

@ -1,3 +1,31 @@
2013-08-12 Paul Eggert <eggert@cs.ucla.edu>
Merge from gnulib, incorporating:
2013-08-11 fpending: port to recent Cygwin change to stdio_ext.h
2013-08-10 sys_time: port to OpenBSD
2013-08-12 Glenn Morris <rgm@gnu.org>
* configure.ac (etcdocdir): Rename from docdir, to avoid confusion
with configure's standard --docdir argument. All uses updated.
* Makefile.in (etcdocdir): Rename from docdir. All uses updated.
(install-etcdoc): Rename from install-doc. All uses updated.
(uninstall): Run uninstall-doc.
(PSS): Add misc-ps.
(INSTALL_DVI, INSTALL_HTML, INSTALL_PDF, INSTALL_PS)
(INSTALL_DOC, UNINSTALL_DVI, UNINSTALL_HTML, UNINSTALL_PDF)
(UNINSTALL_PS, UNINSTALL_DOC): New variables.
($(INSTALL_DOC), install-doc, install-dvi, install-html, install-pdf)
(install-ps, $(UNINSTALL_DOC), uninstall-doc, uninstall-dvi)
(uninstall-html, uninstall-pdf, uninstall-ps): New .PHONY rules.
2013-08-11 Paul Eggert <eggert@cs.ucla.edu>
Add --with-zlib to 'configure'.
* configure.ac: Add --with-zlib option to 'configure', so that Emacs
can be built without zlib. Don't assume that -lz is needed on
non-PNG hosts. Mention zlib configuration status in 'configure' output.
2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* configure.ac: Test for zlib.

View File

@ -233,8 +233,8 @@ etcdir=@etcdir@
# once.
archlibdir=@archlibdir@
# Where to put the docstring file.
docdir=@docdir@
# Where to put the etc/DOC file.
etcdocdir=@etcdocdir@
# Where to install Emacs game score files.
gamedir=@gamedir@
@ -313,7 +313,7 @@ epaths-force: FRC
-e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \
-e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \
-e 's;\(#.*PATH_GAME\).*$$;\1 "${gamedir}";' \
-e 's;\(#.*PATH_DOC\).*$$;\1 "${docdir}";') && \
-e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
# Convert MSYS-style /x/foo or Windows-style x:\foo file names
@ -453,7 +453,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
# ==================== Installation ====================
.PHONY: install install-arch-dep install-arch-indep install-doc install-info
.PHONY: install install-arch-dep install-arch-indep install-etcdoc install-info
.PHONY: install-man install-etc install-strip install-$(NTDIR)
.PHONY: uninstall uninstall-$(NTDIR)
@ -461,7 +461,7 @@ $(srcdir)/src/stamp-h.in: $(AUTOCONF_INPUTS)
## don't have to duplicate the list of utilities to install in
## this Makefile as well.
install: all install-arch-indep install-doc install-arch-dep install-$(NTDIR) blessmail
install: all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail
@true
## Ensure that $subdir contains a subdirs.el file.
@ -482,7 +482,7 @@ write_subdir=if [ -f $${subdir}/subdirs.el ]; \
### Install the executables that were compiled specifically for this machine.
### We do install-arch-indep first because the executable needs the
### Lisp files and DOC file to work properly.
install-arch-dep: src install-arch-indep install-doc install-$(NTDIR)
install-arch-dep: src install-arch-indep install-etcdoc install-$(NTDIR)
umask 022; ${MKDIR_P} $(DESTDIR)${bindir}
cd lib-src && \
$(MAKE) install $(MFLAGS) prefix=${prefix} \
@ -541,7 +541,7 @@ set_installuser=for installuser in $${LOGNAME} $${USERNAME} $${USER} \
## We delete etc/DOC* because there may be irrelevant DOC files from
## other builds in the source directory. This is ok because we just
## deleted the entire installed etc/ directory and recreated it.
## install-doc installs the relevant DOC.
## install-etcdoc installs the relevant DOC.
## Note that the Makefiles in the etc directory are potentially useful
## in an installed Emacs, so should not be excluded.
@ -621,16 +621,16 @@ install-arch-indep: lisp leim install-info install-man ${INSTALL_ARCH_INDEP_EXTR
## Note that install-arch-indep deletes and recreates the entire
## installed etc/ directory, so we need it to run before this does.
install-doc: src install-arch-indep
install-etcdoc: src install-arch-indep
-unset CDPATH; \
umask 022; ${MKDIR_P} $(DESTDIR)${docdir} ; \
if [ `cd ./etc; /bin/pwd` != `cd $(DESTDIR)${docdir}; /bin/pwd` ]; \
umask 022; ${MKDIR_P} $(DESTDIR)${etcdocdir} ; \
if [ `cd ./etc; /bin/pwd` != `cd $(DESTDIR)${etcdocdir}; /bin/pwd` ]; \
then \
docfile="DOC"; \
echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \
${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${docdir}/$${docfile}; \
echo "Copying etc/$${docfile} to $(DESTDIR)${etcdocdir} ..." ; \
${INSTALL_DATA} etc/$${docfile} $(DESTDIR)${etcdocdir}/$${docfile}; \
$(set_installuser); \
chown $${installuser} $(DESTDIR)${docdir}/$${docfile} || true ; \
chown $${installuser} $(DESTDIR)${etcdocdir}/$${docfile} || true ; \
else true; fi
install-info: info
@ -716,7 +716,7 @@ install-strip:
### create (but not the noninstalled files such as `make all' would create).
###
### Don't delete the lisp and etc directories if they're in the source tree.
uninstall: uninstall-$(NTDIR)
uninstall: uninstall-$(NTDIR) uninstall-doc
cd lib-src && \
$(MAKE) $(MFLAGS) uninstall \
prefix=${prefix} exec_prefix=${exec_prefix} \
@ -921,7 +921,7 @@ DVIS = lispref-dvi lispintro-dvi emacs-dvi misc-dvi
HTMLS = lispref-html lispintro-html emacs-html misc-html
INFOS = lispref-info lispintro-info emacs-info misc-info
PDFS = lispref-pdf lispintro-pdf emacs-pdf misc-pdf
PSS = lispref-ps lispintro-ps emacs-ps # no misc-ps
PSS = lispref-ps lispintro-ps emacs-ps misc-ps
DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS)
$(DOCS):
@ -930,6 +930,7 @@ $(DOCS):
.PHONY: $(DOCS) docs pdf ps
.PHONY: info dvi dist check html info-real force-info check-info-dir
## TODO add etc/refcards.
docs: $(DOCS)
dvi: $(DVIS)
html: $(HTMLS)
@ -937,6 +938,55 @@ info-real: $(INFOS)
pdf: $(PDFS)
ps: $(PSS)
INSTALL_DVI = install-emacs-dvi install-lispref-dvi \
install-lispintro-dvi install-misc-dvi
INSTALL_HTML = install-emacs-html install-lispref-html \
install-lispintro-html install-misc-html
INSTALL_PDF = install-emacs-pdf install-lispref-pdf \
install-lispintro-pdf install-misc-pdf
INSTALL_PS = install-emacs-ps install-lispref-ps \
install-lispintro-ps install-misc-ps
INSTALL_DOC = $(INSTALL_DVI) $(INSTALL_HTML) $(INSTALL_PDF) $(INSTALL_PS)
## Install non .info forms of the documentation.
## TODO add etc/refcards.
$(INSTALL_DOC):
t=$@; IFS=-; set $$t; IFS=; cd doc/$$2 && $(MAKE) $(MFLAGS) $$1-$$3
.PHONY: $(INSTALL_DOC) install-doc
.PHONY: install-dvi install-html install-pdf install-ps
install-doc: $(INSTALL_DOC)
install-dvi: $(INSTALL_DVI)
install-html: $(INSTALL_HTML)
install-pdf: $(INSTALL_PDF)
install-ps: $(INSTALL_PS)
UNINSTALL_DVI = uninstall-emacs-dvi uninstall-lispref-dvi \
uninstall-lispintro-dvi uninstall-misc-dvi
UNINSTALL_HTML = uninstall-emacs-html uninstall-lispref-html \
uninstall-lispintro-html uninstall-misc-html
UNINSTALL_PDF = uninstall-emacs-pdf uninstall-lispref-pdf \
uninstall-lispintro-pdf uninstall-misc-pdf
UNINSTALL_PS = uninstall-emacs-ps uninstall-lispref-ps \
uninstall-lispintro-ps uninstall-misc-ps
UNINSTALL_DOC = $(UNINSTALL_DVI) $(UNINSTALL_HTML) $(UNINSTALL_PDF) $(UNINSTALL_PS)
$(UNINSTALL_DOC):
t=$@; IFS=-; set $$t; IFS=; cd doc/$$2 && $(MAKE) $(MFLAGS) $$1-$$3
.PHONY: $(UNINSTALL_DOC) uninstall-doc
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
uninstall-doc: $(UNINSTALL_DOC)
uninstall-dvi: $(UNINSTALL_DVI)
uninstall-html: $(UNINSTALL_HTML)
uninstall-pdf: $(UNINSTALL_PDF)
uninstall-ps: $(UNINSTALL_PS)
force-info:
# Note that man/Makefile knows how to put the info files in $(srcdir),
# so we can do ok running make in the build dir.

View File

@ -903,6 +903,7 @@ LIBXSM = @LIBXSM@
LIBXTR6 = @LIBXTR6@
LIBXT_OTHER = @LIBXT_OTHER@
LIBX_OTHER = @LIBX_OTHER@
LIBZ = @LIBZ@
LIB_ACL = @LIB_ACL@
LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
LIB_EACCESS = @LIB_EACCESS@
@ -1185,6 +1186,7 @@ datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
etcdir = @etcdir@
etcdocdir = @etcdocdir@
exec_prefix = @exec_prefix@
gamedir = @gamedir@
gameuser = @gameuser@

View File

@ -408,10 +408,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
don't. */
#undef HAVE_DECL__PUTENV
/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
don't. */
#undef HAVE_DECL___FPENDING
/* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you
don't. */
#undef HAVE_DECL___SYS_SIGLIST
@ -1190,6 +1186,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you want to use the X window system. */
#undef HAVE_X_WINDOWS
/* Define to 1 if you have the zlib library (-lz). */
#undef HAVE_ZLIB
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
@ -1205,9 +1204,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have the `__executable_start' function. */
#undef HAVE___EXECUTABLE_START
/* Define to 1 if you have the `__fpending' function. */
#undef HAVE___FPENDING
/* Define to 1 if you have the `__secure_getenv' function. */
#undef HAVE___SECURE_GETENV

144
autogen/configure vendored
View File

@ -1279,6 +1279,7 @@ LD_SWITCH_X_SITE
gameuser
gamedir
bitmapdir
etcdocdir
archlibdir
etcdir
x_default_search_path
@ -1315,6 +1316,7 @@ LIBXSM
LIBGPM
LIBGIF
LIBTIFF
LIBZ
LIBPNG
LIBJPEG
LIBXPM
@ -1538,6 +1540,7 @@ with_gconf
with_gsettings
with_selinux
with_gnutls
with_zlib
with_file_notification
with_makeinfo
with_compress_info
@ -2268,6 +2271,7 @@ Optional Packages:
--without-gsettings don't compile with GSettings support
--without-selinux don't compile with SELinux support
--without-gnutls don't use -lgnutls for SSL/TLS support
--without-zlib don't compile with zlib decompression support
--with-file-notification=LIB
use a file notification library (LIB one of: yes,
gfile, inotify, w32, no)
@ -3383,7 +3387,6 @@ as_fn_append ac_func_list " faccessat"
as_fn_append ac_func_list " fcntl"
as_fn_append ac_func_list " fdopendir"
as_fn_append ac_header_list " stdio_ext.h"
as_fn_append ac_func_list " __fpending"
as_fn_append ac_func_list " fstatat"
as_fn_append ac_func_list " fsync"
gl_getopt_required=GNU
@ -4010,7 +4013,7 @@ locallisppath='${datadir}/emacs/${version}/site-lisp:'\
lisppath='${locallisppath}:${standardlisppath}'
etcdir='${datadir}/emacs/${version}/etc'
archlibdir='${libexecdir}/emacs/${version}/${configuration}'
docdir='${datadir}/emacs/${version}/etc'
etcdocdir='${datadir}/emacs/${version}/etc'
gamedir='${localstatedir}/games/emacs'
@ -4356,6 +4359,14 @@ else
fi
# Check whether --with-zlib was given.
if test "${with_zlib+set}" = set; then :
withval=$with_zlib;
else
with_zlib=$with_features
fi
# Check whether --with-file-notification was given.
if test "${with_file_notification+set}" = set; then :
@ -10056,7 +10067,7 @@ if test "${HAVE_NS}" = yes; then
exec_prefix=${ns_appbindir}
libexecdir="\${ns_appbindir}/libexec"
archlibdir="\${ns_appbindir}/libexec"
docdir="\${ns_appresdir}/etc"
etcdocdir="\${ns_appresdir}/etc"
etcdir="\${ns_appresdir}/etc"
infodir="\${ns_appresdir}/info"
mandir="\${ns_appresdir}/man"
@ -13626,6 +13637,85 @@ fi
fi
HAVE_ZLIB=no
LIBZ=
if test "${with_zlib}" != "no"; then
if test "${HAVE_PNG}" = "yes"; then
### PNG depends on zlib, so if we have PNG, we have zlib.
HAVE_ZLIB=yes
else
### No PNG, so check zlib ourselves.
OLIBS=$LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflateEnd" >&5
$as_echo_n "checking for library containing inflateEnd... " >&6; }
if test "${ac_cv_search_inflateEnd+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$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 inflateEnd ();
int
main ()
{
return inflateEnd ();
;
return 0;
}
_ACEOF
for ac_lib in '' z; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_inflateEnd=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if test "${ac_cv_search_inflateEnd+set}" = set; then :
break
fi
done
if test "${ac_cv_search_inflateEnd+set}" = set; then :
else
ac_cv_search_inflateEnd=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflateEnd" >&5
$as_echo "$ac_cv_search_inflateEnd" >&6; }
ac_res=$ac_cv_search_inflateEnd
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
HAVE_ZLIB=yes
fi
LIBS=$OLIBS
case $ac_cv_search_inflateEnd in
-*) LIBZ=$ac_cv_search_inflateEnd ;;
esac
fi
fi
if test "${HAVE_ZLIB}" = "yes"; then
$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
fi
### Use -ltiff if available, unless `--with-tiff=no'.
### mingw32 doesn't use -ltiff, since it loads the library dynamically.
HAVE_TIFF=no
@ -18525,8 +18615,6 @@ _ACEOF
GNULIB_FCHMODAT=0;
GNULIB_FSTAT=0;
GNULIB_FSTATAT=0;
@ -22967,27 +23055,40 @@ _ACEOF
fp_headers='
# include <stdio.h>
# if HAVE_STDIO_EXT_H
# include <stdio_ext.h>
# endif
'
ac_fn_c_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers
"
if test "x$ac_cv_have_decl___fpending" = x""yes; then :
ac_have_decl=1
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __fpending" >&5
$as_echo_n "checking for __fpending... " >&6; }
if test "${gl_cv_func___fpending+set}" = set; then :
$as_echo_n "(cached) " >&6
else
ac_have_decl=0
fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL___FPENDING $ac_have_decl
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
#if HAVE_STDIO_EXT_H
# include <stdio_ext.h>
#endif
int
main ()
{
return ! __fpending (stdin);
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
gl_cv_func___fpending=yes
else
gl_cv_func___fpending=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func___fpending" >&5
$as_echo "$gl_cv_func___fpending" >&6; }
if test $ac_cv_func___fpending = no; then
if test $gl_cv_func___fpending = no; then
@ -28869,6 +28970,7 @@ echo " Does Emacs use -lfreetype? ${HAVE_FREETYPE}
echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}"
echo " Does Emacs use -lotf? ${HAVE_LIBOTF}"
echo " Does Emacs use -lxft? ${HAVE_XFT}"
echo " Does Emacs directly use zlib? ${HAVE_ZLIB}"
echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"
echo

View File

@ -60,7 +60,7 @@ locallisppath='${datadir}/emacs/${version}/site-lisp:'\
lisppath='${locallisppath}:${standardlisppath}'
etcdir='${datadir}/emacs/${version}/etc'
archlibdir='${libexecdir}/emacs/${version}/${configuration}'
docdir='${datadir}/emacs/${version}/etc'
etcdocdir='${datadir}/emacs/${version}/etc'
gamedir='${localstatedir}/games/emacs'
dnl Special option to disable the most of other options.
@ -211,6 +211,7 @@ OPTION_DEFAULT_ON([gconf],[don't compile with GConf support])
OPTION_DEFAULT_ON([gsettings],[don't compile with GSettings support])
OPTION_DEFAULT_ON([selinux],[don't compile with SELinux support])
OPTION_DEFAULT_ON([gnutls],[don't use -lgnutls for SSL/TLS support])
OPTION_DEFAULT_ON([zlib],[don't compile with zlib decompression support])
AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB],
[use a file notification library (LIB one of: yes, gfile, inotify, w32, no)])],
@ -1616,7 +1617,7 @@ if test "${HAVE_NS}" = yes; then
dnl This one isn't really used, only archlibdir is.
libexecdir="\${ns_appbindir}/libexec"
archlibdir="\${ns_appbindir}/libexec"
docdir="\${ns_appresdir}/etc"
etcdocdir="\${ns_appresdir}/etc"
etcdir="\${ns_appresdir}/etc"
dnl FIXME maybe set datarootdir instead.
dnl That would also get applications, icons, man.
@ -2983,19 +2984,23 @@ AC_SUBST(LIBPNG)
HAVE_ZLIB=no
LIBZ=
if test "${HAVE_PNG}" = "yes"; then
### PNG depends on zlib, so if we have PNG, we have zlib.
HAVE_ZLIB=yes
AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if you have the zlib library (-lz).])
else
### No PNG, so check zlib ourselves.
LIBS="-lz $LIBS"
AC_CHECK_LIB(z, inflateEnd, HAVE_ZLIB=yes, HAVE_ZLIB=no)
if test "${HAVE_ZLIB}" = "yes"; then
AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if you have the zlib library (-lz).])
LIBZ=-lz
if test "${with_zlib}" != "no"; then
if test "${HAVE_PNG}" = "yes"; then
### PNG depends on zlib, so if we have PNG, we have zlib.
HAVE_ZLIB=yes
else
### No PNG, so check zlib ourselves.
OLIBS=$LIBS
AC_SEARCH_LIBS([inflateEnd], [z], [HAVE_ZLIB=yes])
LIBS=$OLIBS
case $ac_cv_search_inflateEnd in
-*) LIBZ=$ac_cv_search_inflateEnd ;;
esac
fi
fi
if test "${HAVE_ZLIB}" = "yes"; then
AC_DEFINE([HAVE_ZLIB], 1, [Define to 1 if you have the zlib library (-lz).])
fi
AC_SUBST(LIBZ)
@ -4447,7 +4452,7 @@ AC_SUBST(lisppath)
AC_SUBST(x_default_search_path)
AC_SUBST(etcdir)
AC_SUBST(archlibdir)
AC_SUBST(docdir)
AC_SUBST(etcdocdir)
AC_SUBST(bitmapdir)
AC_SUBST(gamedir)
AC_SUBST(gameuser)
@ -4851,6 +4856,7 @@ echo " Does Emacs use -lfreetype? ${HAVE_FREETYPE}
echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}"
echo " Does Emacs use -lotf? ${HAVE_LIBOTF}"
echo " Does Emacs use -lxft? ${HAVE_XFT}"
echo " Does Emacs directly use zlib? ${HAVE_ZLIB}"
echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"

View File

@ -1,3 +1,27 @@
2013-08-12 Glenn Morris <rgm@gnu.org>
* macos.texi (GNUstep Support):
* trouble.texi (Checklist, Contributing, Service):
Avoid mailto: in html output.
* Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME)
(docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL)
(INSTALL_DATA): New, set by configure.
(HTML_OPTS, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS):
New variables.
(.SUFFIXES): Add .ps and .dvi.
(.dvi.ps): New suffix rule.
(dvi, html, pdf, ps): Use *_TARGETS variables.
(emacs.ps, emacs-xtra.ps): Remove explicit rules.
(emacs.html): Use HTML_OPTS.
(clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS.
(.PHONY): install-dvi, install-html, install-pdf, install-ps
,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf,
uninstall-ps, and uninstall-doc.
(install-dvi, install-html, install-pdf, install-ps, install-doc)
(uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf)
(uninstall-doc): New rules.
2013-07-31 Eli Zaretskii <eliz@gnu.org>
* emacs.texi (Top): Remove menu item for the removed "Disabling

View File

@ -38,8 +38,22 @@ buildinfodir = $(srcdir)/../../info
# Directory with the (customized) texinfo.tex file.
texinfodir = $(srcdir)/../misc
prefix = @prefix@
datarootdir = @datarootdir@
datadir = @datadir@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
docdir = @docdir@
dvidir = @dvidir@
htmldir = @htmldir@
pdfdir = @pdfdir@
psdir = @psdir@
MKDIR_P = @MKDIR_P@
GZIP_PROG = @GZIP_PROG@
HTML_OPTS = --no-split --html
INFO_EXT=@INFO_EXT@
# Options used only when making info output.
# --no-split is only needed because of MS-DOS.
@ -47,6 +61,9 @@ INFO_EXT=@INFO_EXT@
# http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg01182.html
INFO_OPTS=@INFO_OPTS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
# The makeinfo program is part of the Texinfo distribution.
# Use --force so that it generates output even if there are errors.
MAKEINFO = @MAKEINFO@
@ -60,6 +77,10 @@ DVIPS = dvips
ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(TEXINPUTS)" \
MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
DVI_TARGETS = emacs.dvi emacs-xtra.dvi
HTML_TARGETS = emacs.html
PDF_TARGETS = emacs.pdf emacs-xtra.pdf
PS_TARGETS = emacs.ps emacs-xtra.ps
EMACS_XTRA= \
${srcdir}/emacs-xtra.texi \
@ -128,11 +149,16 @@ mkinfodir = @${MKDIR_P} ${buildinfodir}
.PHONY: info dvi html pdf ps
.SUFFIXES: .ps .dvi
.dvi.ps:
$(DVIPS) -o $@ $<
info: $(buildinfodir)/emacs$(INFO_EXT)
dvi: emacs.dvi
html: emacs.html
pdf: emacs.pdf
ps: emacs.ps
dvi: $(DVI_TARGETS)
html: $(HTML_TARGETS)
pdf: $(PDF_TARGETS)
ps: $(PS_TARGETS)
# Note that all the Info targets build the Info files in srcdir.
# There is no provision for Info files to exist in the build directory.
@ -145,21 +171,15 @@ $(buildinfodir)/emacs$(INFO_EXT): ${EMACSSOURCES}
emacs.dvi: ${EMACSSOURCES}
$(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi
emacs.ps: emacs.dvi
$(DVIPS) -o $@ emacs.dvi
emacs.pdf: ${EMACSSOURCES}
$(ENVADD) $(TEXI2PDF) ${srcdir}/emacs.texi
emacs.html: ${EMACSSOURCES}
$(MAKEINFO) $(MAKEINFO_OPTS) --html -o $@ ${srcdir}/emacs.texi
$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/emacs.texi
emacs-xtra.dvi: $(EMACS_XTRA)
$(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-xtra.texi
emacs-xtra.ps: emacs-xtra.dvi
$(DVIPS) -o $@ emacs-xtra.dvi
emacs-xtra.pdf: $(EMACS_XTRA)
$(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-xtra.texi
@ -172,9 +192,7 @@ mostlyclean:
## Products not in the release tarfiles.
clean: mostlyclean
rm -f emacs.dvi emacs-xtra.dvi emacs.pdf emacs-xtra.pdf \
emacs.ps emacs-xtra.ps
rm -rf emacs.html/
rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS)
rm -f emacs-manual-${version}.tar*
distclean: clean
@ -207,4 +225,52 @@ dist:
tar -cf emacs-manual-${version}.tar emacs-manual-${version}
rm -rf emacs-manual-${version}
.PHONY: install-dvi install-html install-pdf install-ps install-doc
install-dvi: dvi
umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir)
$(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir)
install-html: html
umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir)
$(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir)
install-pdf: pdf
umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir)
$(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir)
install-ps: ps
umask 022; $(MKDIR_P) $(DESTDIR)$(psdir)
for file in $(PS_TARGETS); do \
$(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \
[ -n "${GZIP_PROG}" ] || continue; \
rm -f $(DESTDIR)$(psdir)/$${file}.gz; \
${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \
done
## Top-level Makefile installs the info pages.
install-doc: install-dvi install-html install-pdf install-ps
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc
uninstall-dvi:
for file in $(DVI_TARGETS); do \
rm -f $(DESTDIR)$(dvidir)/$${file}; \
done
uninstall-html:
for file in $(HTML_TARGETS); do \
rm -f $(DESTDIR)$(htmldir)/$${file}; \
done
uninstall-ps:
ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \
for file in $(PS_TARGETS); do \
rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \
done
uninstall-pdf:
for file in $(PDF_TARGETS); do \
rm -f $(DESTDIR)$(pdfdir)/$${file}; \
done
uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
### Makefile ends here

View File

@ -210,4 +210,10 @@ restart Emacs to access newly-available services.
Emacs can be built and run under GNUstep, but there are still
issues to be addressed. Interested developers should contact
@ifnothtml
@email{emacs-devel@@gnu.org}.
@end ifnothtml
@ifhtml
@url{http://lists.gnu.org/mailman/listinfo/emacs-devel, the
emacs-devel mailing list}.
@end ifhtml

View File

@ -658,7 +658,13 @@ absolutely sure it is best to leave it, so that the developers can
decide for themselves.
When you have finished writing your report, type @kbd{C-c C-c} and it
will be sent to the Emacs maintainers at @email{bug-gnu-emacs@@gnu.org}.
will be sent to the Emacs maintainers at
@ifnothtml
@email{bug-gnu-emacs@@gnu.org}.
@end ifnothtml
@ifhtml
@url{http://lists.gnu.org/mailman/listinfo/bug-gnu-emacs, bug-gnu-emacs}.
@end ifhtml
(If you want to suggest an improvement or new feature, use the same
address.) If you cannot send mail from inside Emacs, you can copy the
text of your report to your normal mail client (if your system
@ -1138,15 +1144,26 @@ form that is clearly safe to install.
@section Contributing to Emacs Development
@cindex contributing to Emacs
If you would like to work on improving Emacs, please contact
the maintainers at @email{emacs-devel@@gnu.org}. You can ask for
suggested projects or suggest your own ideas.
If you would like to work on improving Emacs, please contact the maintainers at
@ifnothtml
@email{emacs-devel@@gnu.org}.
@end ifnothtml
@ifhtml
@url{http://lists.gnu.org/mailman/listinfo/emacs-devel, the
emacs-devel mailing list}.
@end ifhtml
You can ask for suggested projects or suggest your own ideas.
If you have already written an improvement, please tell us about it. If
you have not yet started work, it is useful to contact
@email{emacs-devel@@gnu.org} before you start; it might be
possible to suggest ways to make your extension fit in better with the
rest of Emacs.
@ifnothtml
@email{emacs-devel@@gnu.org}
@end ifnothtml
@ifhtml
@url{http://lists.gnu.org/mailman/listinfo/emacs-devel, emacs-devel}
@end ifhtml
before you start; it might be possible to suggest ways to make your
extension fit in better with the rest of Emacs.
The development version of Emacs can be downloaded from the
repository where it is actively maintained by a group of developers.
@ -1164,10 +1181,17 @@ ways to find it:
@itemize @bullet
@item
Send a message to the mailing list
@email{help-gnu-emacs@@gnu.org}, or post your request on
newsgroup @code{gnu.emacs.help}. (This mailing list and newsgroup
interconnect, so it does not matter which one you use.)
Send a message to
@ifnothtml
the mailing list @email{help-gnu-emacs@@gnu.org},
@end ifnothtml
@ifhtml
@url{http://lists.gnu.org/mailman/listinfo/help-gnu-emacs, the
help-gnu-emacs mailing list},
@end ifhtml
or post your request on newsgroup @code{gnu.emacs.help}. (This
mailing list and newsgroup interconnect, so it does not matter which
one you use.)
@item
Look in the service directory for someone who might help you for a fee.

View File

@ -1,3 +1,27 @@
2013-08-12 Glenn Morris <rgm@gnu.org>
* emacs-lisp-intro.texi (Complete copy-region-as-kill): Fix typo.
* emacs-lisp-intro.texi (Thank You): Avoid mailto: in html output.
* Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME)
(docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL)
(INSTALL_DATA): New, set by configure.
(HTML_OPTS, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS):
New variables.
(.SUFFIXES): Add .ps and .dvi.
(.dvi.ps): New suffix rule.
(dvi, html, pdf, ps): Use *_TARGETS variables.
(emacs-lisp-intro.ps): Remove explicit rule.
(emacs-lisp-intro.html): Use HTML_OPTS.
(clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS.
(.PHONY): install-dvi, install-html, install-pdf, install-ps
,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf,
uninstall-ps, and uninstall-doc.
(install-dvi, install-html, install-pdf, install-ps, install-doc)
(uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf)
(uninstall-doc): New rules.
2013-08-07 Eli Zaretskii <eliz@gnu.org>
* emacs-lisp-intro.texi (Beginning init File): Rename from

View File

@ -30,12 +30,29 @@ texinfodir = $(srcdir)/../misc
# Directory with emacsver.texi.
emacsdir = $(srcdir)/../emacs
prefix = @prefix@
datarootdir = @datarootdir@
datadir = @datadir@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
docdir = @docdir@
dvidir = @dvidir@
htmldir = @htmldir@
pdfdir = @pdfdir@
psdir = @psdir@
MKDIR_P = @MKDIR_P@
GZIP_PROG = @GZIP_PROG@
HTML_OPTS = --no-split --html
INFO_EXT=@INFO_EXT@
# Options used only when making info output.
INFO_OPTS=@INFO_OPTS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MAKEINFO = @MAKEINFO@
MAKEINFO_OPTS = --force -I $(emacsdir) -I $(srcdir)
TEXI2DVI = texi2dvi
@ -45,6 +62,11 @@ DVIPS = dvips
ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \
MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
DVI_TARGETS = emacs-lisp-intro.dvi
HTML_TARGETS = emacs-lisp-intro.html
PDF_TARGETS = emacs-lisp-intro.pdf
PS_TARGETS = emacs-lisp-intro.ps
mkinfodir = @${MKDIR_P} ${buildinfodir}
srcs = ${srcdir}/emacs-lisp-intro.texi ${srcdir}/doclicense.texi \
@ -52,12 +74,17 @@ srcs = ${srcdir}/emacs-lisp-intro.texi ${srcdir}/doclicense.texi \
.PHONY: info dvi html pdf ps
.SUFFIXES: .ps .dvi
.dvi.ps:
$(DVIPS) -o $@ $<
info: ${buildinfodir}/eintr$(INFO_EXT)
dvi: emacs-lisp-intro.dvi
html: emacs-lisp-intro.html
pdf: emacs-lisp-intro.pdf
ps: emacs-lisp-intro.ps
dvi: $(DVI_TARGETS)
html: $(HTML_TARGETS)
pdf: $(PDF_TARGETS)
ps: $(PS_TARGETS)
# The file name eintr must fit within 5 characters, to allow for
# -NN extensions to fit into DOS 8+3 limits without clashing.
@ -69,14 +96,11 @@ ${buildinfodir}/eintr$(INFO_EXT): ${srcs}
emacs-lisp-intro.dvi: ${srcs}
$(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-lisp-intro.texi
emacs-lisp-intro.ps: emacs-lisp-intro.dvi
$(DVIPS) -o $@ emacs-lisp-intro.dvi
emacs-lisp-intro.pdf: ${srcs}
$(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-lisp-intro.texi
emacs-lisp-intro.html: ${srcs}
$(MAKEINFO) $(MAKEINFO_OPTS) --html -o $@ ${srcdir}/emacs-lisp-intro.texi
$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/emacs-lisp-intro.texi
.PHONY: mostlyclean clean distclean maintainer-clean infoclean
@ -85,8 +109,7 @@ mostlyclean:
*.op *.ops *.pg *.pgs *.tp *.tps *.vr *.vrs
clean: mostlyclean
rm -f emacs-lisp-intro.dvi emacs-lisp-intro.pdf emacs-lisp-intro.ps
rm -rf emacs-lisp-intro.html/
rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS)
rm -f emacs-lispintro-${version}.tar*
distclean: clean
@ -118,4 +141,52 @@ dist:
tar -cf emacs-lispintro-${version}.tar emacs-lispintro-${version}
rm -rf emacs-lispintro-${version}
.PHONY: install-dvi install-html install-pdf install-ps install-doc
install-dvi: dvi
umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir)
$(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir)
install-html: html
umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir)
$(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir)
install-pdf: pdf
umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir)
$(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir)
install-ps: ps
umask 022; $(MKDIR_P) $(DESTDIR)$(psdir)
for file in $(PS_TARGETS); do \
$(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \
[ -n "${GZIP_PROG}" ] || continue; \
rm -f $(DESTDIR)$(psdir)/$${file}.gz; \
${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \
done
## Top-level Makefile installs the info pages.
install-doc: install-dvi install-html install-pdf install-ps
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc
uninstall-dvi:
for file in $(DVI_TARGETS); do \
rm -f $(DESTDIR)$(dvidir)/$${file}; \
done
uninstall-html:
for file in $(HTML_TARGETS); do \
rm -f $(DESTDIR)$(htmldir)/$${file}; \
done
uninstall-ps:
ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \
for file in $(PS_TARGETS); do \
rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \
done
uninstall-pdf:
for file in $(PDF_TARGETS); do \
rm -f $(DESTDIR)$(pdfdir)/$${file}; \
done
uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
### Makefile ends here

View File

@ -954,7 +954,12 @@ encouragement. My mistakes are my own.
@flushright
Robert J. Chassell
@ifnothtml
@email{bob@@gnu.org}
@end ifnothtml
@ifhtml
bob@@gnu.org
@end ifhtml
@end flushright
@c ================ Beginning of main text ================
@ -8312,7 +8317,7 @@ As usual, this function can be divided into its component parts:
The arguments are @code{beg} and @code{end} and the function is
interactive with @code{"r"}, so the two arguments must refer to the
beginning and end of the region. If you have been reading though this
beginning and end of the region. If you have been reading through this
document from the beginning, understanding these parts of a function is
almost becoming routine.

View File

@ -1,3 +1,23 @@
2013-08-12 Glenn Morris <rgm@gnu.org>
* Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME)
(docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL)
(INSTALL_DATA): New, set by configure.
(HTML_OPTS, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS):
New variables.
(.SUFFIXES): Add .ps and .dvi.
(.dvi.ps): New suffix rule.
(dvi, html, pdf, ps): Use *_TARGETS variables.
(elisp.html): Use HTML_OPTS.
(elisp.ps): Remove explicit rule.
(.PHONY): install-dvi, install-html, install-pdf, install-ps
,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf,
uninstall-ps, and uninstall-doc.
(install-dvi, install-html, install-pdf, install-ps, install-doc)
(uninstall-dvi, uninstall-html, uninstall-ps, uninstall-pdf)
(uninstall-doc): New rules.
(clean): Use DVI_TARGETS, HTML_TARGETS, PDF_TARGETS, PS_TARGETS.
2013-08-10 Xue Fuqiao <xfq.free@gmail.com>
* edebug.texi (Instrumenting Macro Calls): Use @defmac for macros.

View File

@ -33,12 +33,29 @@ texinfodir = $(srcdir)/../misc
# Directory with emacsver.texi.
emacsdir = $(srcdir)/../emacs
prefix = @prefix@
datarootdir = @datarootdir@
datadir = @datadir@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
docdir = @docdir@
dvidir = @dvidir@
htmldir = @htmldir@
pdfdir = @pdfdir@
psdir = @psdir@
MKDIR_P = @MKDIR_P@
GZIP_PROG = @GZIP_PROG@
HTML_OPTS = --no-split --html
INFO_EXT=@INFO_EXT@
# Options used only when making info output.
INFO_OPTS=@INFO_OPTS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MAKEINFO = @MAKEINFO@
MAKEINFO_OPTS = --force --enable-encoding -I $(emacsdir) -I $(srcdir)
TEXI2DVI = texi2dvi
@ -48,6 +65,11 @@ DVIPS = dvips
ENVADD = TEXINPUTS="$(srcdir):$(texinfodir):$(emacsdir):$(TEXINPUTS)" \
MAKEINFO="$(MAKEINFO) $(MAKEINFO_OPTS)"
DVI_TARGETS = elisp.dvi
HTML_TARGETS = elisp.html
PDF_TARGETS = elisp.pdf
PS_TARGETS = elisp.ps
# List of all the texinfo files in the manual:
srcs = \
@ -108,11 +130,16 @@ mkinfodir = @${MKDIR_P} ${buildinfodir}
.PHONY: info dvi pdf ps
.SUFFIXES: .ps .dvi
.dvi.ps:
$(DVIPS) -o $@ $<
info: $(buildinfodir)/elisp$(INFO_EXT)
dvi: elisp.dvi
html: elisp.html
pdf: elisp.pdf
ps: elisp.ps
dvi: $(DVI_TARGETS)
html: $(HTML_TARGETS)
pdf: $(PDF_TARGETS)
ps: $(PS_TARGETS)
## Note: "<" is not portable in ordinary make rules.
$(buildinfodir)/elisp$(INFO_EXT): $(srcs)
@ -123,10 +150,7 @@ elisp.dvi: $(srcs)
$(ENVADD) $(TEXI2DVI) $(srcdir)/elisp.texi
elisp.html: $(srcs)
$(MAKEINFO) $(MAKEINFO_OPTS) --html -o $@ $(srcdir)/elisp.texi
elisp.ps: elisp.dvi
$(DVIPS) -o $@ elisp.dvi
$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $(srcdir)/elisp.texi
elisp.pdf: $(srcs)
$(ENVADD) $(TEXI2PDF) $(srcdir)/elisp.texi
@ -140,9 +164,8 @@ mostlyclean:
rm -f elisp[12]* vol[12].tmp
clean: mostlyclean
rm -f elisp.dvi elisp.pdf elisp.ps
rm -f $(DVI_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(PS_TARGETS)
rm -f vol[12].dvi vol[12].pdf vol[12].ps
rm -rf elisp.html
rm -f emacs-lispref-${version}.tar*
distclean: clean
@ -175,4 +198,51 @@ dist:
tar -cf emacs-lispref-${version}.tar emacs-lispref-${version}
rm -rf emacs-lispref-${version}
.PHONY: install-dvi install-html install-pdf install-ps install-doc
install-dvi: dvi
umask 022; $(MKDIR_P) $(DESTDIR)$(dvidir)
$(INSTALL_DATA) $(DVI_TARGETS) $(DESTDIR)$(dvidir)
install-html: html
umask 022; $(MKDIR_P) $(DESTDIR)$(htmldir)
$(INSTALL_DATA) $(HTML_TARGETS) $(DESTDIR)$(htmldir)
install-pdf: pdf
umask 022;$(MKDIR_P) $(DESTDIR)$(pdfdir)
$(INSTALL_DATA) $(PDF_TARGETS) $(DESTDIR)$(pdfdir)
install-ps: ps
umask 022; $(MKDIR_P) $(DESTDIR)$(psdir)
for file in $(PS_TARGETS); do \
$(INSTALL_DATA) $${file} $(DESTDIR)$(psdir); \
[ -n "${GZIP_PROG}" ] || continue; \
rm -f $(DESTDIR)$(psdir)/$${file}.gz; \
${GZIP_PROG} -9n $(DESTDIR)$(psdir)/$${file}; \
done
## Top-level Makefile installs the info pages.
install-doc: install-dvi install-html install-pdf install-ps
.PHONY: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps uninstall-doc
uninstall-dvi:
for file in $(DVI_TARGETS); do \
rm -f $(DESTDIR)$(dvidir)/$${file}; \
done
uninstall-html:
for file in $(HTML_TARGETS); do \
rm -f $(DESTDIR)$(htmldir)/$${file}; \
done
uninstall-ps:
ext= ; [ -n "${GZIP_PROG}" ] && ext=.gz; \
for file in $(PS_TARGETS); do \
rm -f $(DESTDIR)$(psdir)/$${file}$${ext}; \
done
uninstall-pdf:
for file in $(PDF_TARGETS); do \
rm -f $(DESTDIR)$(pdfdir)/$${file}; \
done
uninstall-doc: uninstall-dvi uninstall-html uninstall-pdf uninstall-ps
### Makefile ends here

View File

@ -1,3 +1,51 @@
2013-08-12 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus.texi (Mail Source Specifiers): Fix description for pop3's :leave.
2013-08-12 Glenn Morris <rgm@gnu.org>
* Makefile.in (ada_mode_deps, auth_deps, autotype_deps)
(bovine_deps, calc_deps, ccmode_deps, cl_deps, dbus_deps)
(dired_x_deps, ebrowse_deps, ede_deps, ediff_deps, edt_deps)
(eieio_deps, emacs_gnutls_deps, emacs_mime_deps, epa_deps)
(erc_deps, ert_deps, eshell_deps, eudc_deps, faq_deps)
(flymake_deps, forms_deps, gnus_deps, htmlfontify_deps)
(idlwave_deps, ido_deps, info_deps, mairix_el_deps, message_deps)
(mh_e_deps, newsticker_deps, nxml_mode_deps, org_deps)
(pcl_cvs_deps, pgg_deps, rcirc_deps, reftex_deps, remember_deps)
(sasl_deps, sc_deps, semantic_deps, ses_deps, sieve_deps)
(smtpmail_deps, speedbar_deps, srecode_deps, todo_mode_deps)
(tramp_deps, url_deps, vip_deps, viper_deps, widget_deps)
(wisent_deps, woman_deps): New variables. Use to reduce duplication.
* woman.texi (Top): Avoid mailto: in html output.
* Makefile.in (prefix, datarootdir, datadir, PACKAGE_TARNAME)
(docdir, dvidir, htmldir, pdfdir, psdir, GZIP_PROG, INSTALL)
(INSTALL_DATA): New, set by configure.
(HTML_OPTS, HTML_TARGETS, PS_TARGETS, DVIPS): New variables.
(.PHONY): Add html, ps, install-dvi, install-html, install-pdf,
install-ps ,install-doc, uninstall-dvi, uninstall-html, uninstall-pdf,
uninstall-ps, and uninstall-doc.
(.SUFFIXES): Add .ps and .dvi.
(.dvi.ps): New suffix rule.
(html, ps, ada-mode.html, auth.html, autotype.html, bovine.html)
(calc.html, cc-mode.html, cl.html, dbus.html, dired-x.html)
(ebrowse.html, ede.html, ediff.html, edt.html, eieio.html)
(emacs-gnutls.html, emacs-mime.html, epa.html, erc.html)
(ert.html, eshell.html, eudc.html, faq.html, flymake.html)
(forms.html, gnus.html, htmlfontify.html, idlwave.html)
(ido.html, mairix-el.html, message.html, mh-e.html)
(newsticker.html, nxml-mode.html, org.html, pgg.html)
(rcirc.html, reftex.html, remember.html, sasl.html, sc.html)
(semantic.html, sieve.html, smtpmail.html, speedbar.html)
(srecode.html, todo-mode.html, tramp.html, url.html, vip.html)
(viper.html, widget.html, wisent.html, woman.html, install-dvi)
(install-html, install-pdf, install-ps, install-doc, uninstall-dvi)
(uninstall-html, uninstall-ps, uninstall-pdf, uninstall-doc):
New rules.
(clean): Remove HTML_TARGETS and PS_TARGETS.
2013-08-10 Xue Fuqiao <xfq.free@gmail.com>
* ido.texi (Working Directories):

File diff suppressed because it is too large Load Diff

View File

@ -14796,14 +14796,16 @@ and says what authentication scheme to use. The default is
@item :leave
Non-@code{nil} if the mail is to be left on the @acronym{POP} server
after fetching. Mails once fetched will never be fetched again by the
@acronym{UIDL} control. Only the built-in @code{pop3-movemail} program
(the default) supports this keyword.
after fetching. Only the built-in @code{pop3-movemail} program (the
default) supports this keyword.
If this is neither @code{nil} nor a number, all mails will be left on
the server. If this is a number, leave mails on the server for this
many days since you first checked new mails. If this is @code{nil}
(the default), mails will be deleted on the server right after fetching.
If this is a number, leave mails on the server for this many days since
you first checked new mails. In that case, mails once fetched will
never be fetched again by the @acronym{UIDL} control. If this is
@code{nil} (the default), mails will be deleted on the server right
after fetching. If this is neither @code{nil} nor a number, all mails
will be left on the server, and you will end up getting the same mails
again and again.
@vindex pop3-uidl-file
The @code{pop3-uidl-file} variable specifies the file to which the

View File

@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
\def\texinfoversion{2013-06-23.10}
\def\texinfoversion{2013-08-09.09}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@ -2377,8 +2377,10 @@
\ifx\next,%
\else\ifx\next-%
\else\ifx\next.%
\else\ifx\next\.%
\else\ifx\next\comma%
\else\ptexslash
\fi\fi\fi
\fi\fi\fi\fi\fi
\aftersmartic
}
@ -2519,7 +2521,9 @@
\ifx\codedashprev\codedash
\else \discretionary{}{}{}\fi
\fi
\global\let\codedashprev=\next
% we need the space after the = for the case when \next itself is a
% space token; it would get swallowed otherwise. As in @code{- a}.
\global\let\codedashprev= \next
}
}
\def\normaldash{-}

View File

@ -67,7 +67,12 @@ modify this GNU manual.''
@display
As distributed with Emacs @value{EMACSVER}.
@ifnothtml
@email{F.J.Wright@@qmw.ac.uk, Francis J. Wright}
@end ifnothtml
@ifhtml
Francis J. Wright
@end ifhtml
@uref{http://centaur.maths.qmw.ac.uk/, School of Mathematical Sciences}
Queen Mary and Westfield College (University of London)
Mile End Road, London E1 4NS, UK

View File

@ -20,11 +20,10 @@
#include <stddef.h>
#include <stdio.h>
#if HAVE_STDIO_EXT_H
# include <stdio_ext.h>
#endif
#if HAVE_DECL___FPENDING
# if HAVE_STDIO_EXT_H
# include <stdio_ext.h>
# endif
#else
#ifndef __fpending
size_t __fpending (FILE *);
#endif

View File

@ -24,11 +24,12 @@
#endif
@PRAGMA_COLUMNS@
/* On Cygwin, <sys/time.h> includes itself recursively via <sys/select.h>.
/* On Cygwin and on many BSDish systems, <sys/time.h> includes itself
recursively via <sys/select.h>.
Simply delegate to the system's header in this case; it is a no-op.
Without this extra ifdef, the C++ gettimeofday declaration below
would be a forward declaration in gnulib's nested <sys/time.h>. */
#ifdef _CYGWIN_SYS_TIME_H
#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_
# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
#else

View File

@ -1,3 +1,13 @@
2013-08-12 Glenn Morris <rgm@gnu.org>
* format.el (format-annotate-function):
Handle read-only text properties in the source. (Bug#14887)
2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* net/eww.el (eww-display-html): Ignore coding system errors. One
web site uses "utf-8lias" as the coding system.
2013-08-11 Juanma Barranquero <lekktu@gmail.com>
* frameset.el (frameset-valid-p): Fix check; STATES can indeed be nil.

View File

@ -225,10 +225,12 @@ For most purposes, consider using `format-encode-region' instead."
(setq selective-display sel-disp)
(set-buffer-multibyte multibyte)
(setq buffer-file-coding-system coding-system))
(copy-to-buffer copy-buf from to)
(set-buffer copy-buf)
(format-insert-annotations write-region-annotations-so-far from)
(format-encode-run-method to-fn (point-min) (point-max) orig-buf)
(let ((inhibit-read-only t)) ; bug#14887
(copy-to-buffer copy-buf from to)
(set-buffer copy-buf)
(format-insert-annotations write-region-annotations-so-far from)
(format-encode-run-method to-fn (point-min) (point-max)
orig-buf))
(when (buffer-live-p copy-buf)
(with-current-buffer copy-buf
;; Set write-region-post-annotation-function to

View File

@ -1,3 +1,12 @@
2013-08-12 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-display-external): Run a timer for the temp files
deletion after a viewer exits; add a deletion timer for the needsterm
case, too.
* mm-decode.el (mm-display-external): Try to delete temporary files by
using a 1-min. timer.
2013-08-09 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-temp-files-to-be-deleted, mm-temp-files-cache-file):

View File

@ -954,10 +954,20 @@ external if displayed external."
method file (mm-handle-type handle))))
(unwind-protect
(if window-system
(start-process "*display*" nil
mm-external-terminal-program
"-e" shell-file-name
shell-command-switch command)
(set-process-sentinel
(start-process "*display*" nil
mm-external-terminal-program
"-e" shell-file-name
shell-command-switch command)
`(lambda (process state)
(if (eq 'exit (process-status process))
(run-at-time
60.0 nil
(lambda ()
(ignore-errors (delete-file ,file))
(ignore-errors (delete-directory
,(file-name-directory
file))))))))
(require 'term)
(require 'gnus-win)
(set-buffer
@ -971,11 +981,15 @@ external if displayed external."
(set-process-sentinel
(get-buffer-process buffer)
`(lambda (process state)
(if (eq 'exit (process-status process))
(gnus-configure-windows
',gnus-current-window-configuration))))
(when (eq 'exit (process-status process))
(ignore-errors (delete-file ,file))
(ignore-errors
(delete-directory ,(file-name-directory file)))
(gnus-configure-windows
',gnus-current-window-configuration))))
(gnus-configure-windows 'display-term))
(mm-handle-set-external-undisplayer handle (cons file buffer)))
(mm-handle-set-external-undisplayer handle (cons file buffer))
(add-to-list 'mm-temp-files-to-be-deleted file t))
(message "Displaying %s..." command))
'external)
(copiousoutput
@ -1023,6 +1037,12 @@ external if displayed external."
(handle handle))
(lambda (process state)
(when (eq (process-status process) 'exit)
(run-at-time
60.0 nil
(lambda ()
(ignore-errors (delete-file file))
(ignore-errors (delete-directory
(file-name-directory file)))))
(when (buffer-live-p outbuf)
(with-current-buffer outbuf
(let ((buffer-read-only nil)

View File

@ -199,7 +199,9 @@ word(s) will be searched for via `eww-search-prefix'."
(defun eww-display-html (charset url)
(unless (eq charset 'utf8)
(decode-coding-region (point) (point-max) charset))
(condition-case nil
(decode-coding-region (point) (point-max) charset)
(coding-system-error nil)))
(let ((document
(list
'base (list (cons 'href url))

View File

@ -1,4 +1,4 @@
# serial 19
# serial 20
# Copyright (C) 2000-2001, 2004-2013 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
@ -16,14 +16,19 @@ dnl we have to grub around in the FILE struct.
AC_DEFUN([gl_FUNC_FPENDING],
[
AC_CHECK_HEADERS_ONCE([stdio_ext.h])
AC_CHECK_FUNCS_ONCE([__fpending])
fp_headers='
# include <stdio.h>
# if HAVE_STDIO_EXT_H
# include <stdio_ext.h>
# endif
'
AC_CHECK_DECLS([__fpending], , , $fp_headers)
AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <stdio.h>
#if HAVE_STDIO_EXT_H
# include <stdio_ext.h>
#endif
]],
[[return ! __fpending (stdin);]])],
[gl_cv_func___fpending=yes],
[gl_cv_func___fpending=no])
])
])
AC_DEFUN([gl_PREREQ_FPENDING],

View File

@ -216,7 +216,7 @@ AC_DEFUN([gl_INIT],
gl_MODULE_INDICATOR([fdopendir])
gl_FILEMODE
gl_FUNC_FPENDING
if test $ac_cv_func___fpending = no; then
if test $gl_cv_func___fpending = no; then
AC_LIBOBJ([fpending])
gl_PREREQ_FPENDING
fi

View File

@ -1,3 +1,107 @@
2013-08-12 Dmitry Antipov <dmantipov@yandex.ru>
Avoid looping over all frame windows to freeze and unfreeze.
* window.h (struct window): Drop frozen_window_start_p.
(freeze_window_starts): Drop prototype.
* frame.h (struct frame): New frozen_window_starts flag.
(FRAME_WINDOWS_FROZEN): New macro.
* window.c (freeze_window_start, freeze_window_starts):
Remove.
(select_window, replace_window): Adjust users.
* xdisp.c (resize_mini_window): Use FRAME_WINDOWS_FROZEN.
(window_frozen_p): New function.
(redisplay_window): Use it.
2013-08-12 Paul Eggert <eggert@cs.ucla.edu>
Fix some fd issues when running subprocesses (Bug#15035).
Fix bugs that can leak files or file descriptors on errors.
Don't unlink open temp files, as that's hard for users to diagnose
when things go awry (e.g., temp disk exhausted).
Don't bother to lock temp files. Check for invalid recursion.
* callproc.c (synch_process_fd): Remove. All uses removed.
(synch_process_tempfile): New var or macro.
(CALLPROC_STDOUT, CALLPROC_STDERR, CALLPROC_PIPEREAD, CALLPROC_FDS):
New constants.
(record_kill_process): New arg, the temp name. All callers changed.
(delete_temp_file): Now just a simple wrapper around unlink.
(call_process_kill): New arg, the call_process_fd array.
Close them all. Clear synch_process_pid. Remove the temp file,
or arrange for it to be removed.
(call_process_cleanup) [MSDOS]: Arg no longer contains file name;
that's been moved to synch_process_tempfile. Caller changed.
Do not remove the tempfile; that's now call_process_kill's
responsibility.
(call_process_cleanup) [!MSDOS]: Do not record unwind-protect for
call_process_kill; the caller now does that.
(call_process_cleanup): Do not close the process fd; that's now
call_process_kill's responsibility.
(Fcall_process): Implement via new function call_process, which
has most of the old body of Fcall_process, but with a different API.
(call_process): New function that does not open or close filefd if
it is nonnegative. Record which fds need to be closed, and let
call_process_kill close (and remove the tempfile, on MSDOS) on error.
Signal an error if invoked recursively (could be done via a hook).
Simplify creation of the tempfile in the MSDOS case.
Don't create the output file until after checking for the executable.
Report any failure to open /dev/null.
Don't open /dev/null for writing twice; once is enough.
Don't create pipe if all output is being discarded or sent to file.
Don't worry about setting up the coding system or reading from the
pipe if all output is being discarded.
Hoist fd_error local into top level, to lessen block nesting.
Don't record deleted pid here; now done by Fcall_process_region.
(Fcall_process) [MSDOS]: Report mktemp failure immediately,
and note its success in synch_process_tempfile.
Do not leak resources when child_setup fails.
(Fcall_process) [!MSDOS && !WINDOWSNT]: Remove duplicate assignment
to child_errno. Remove unnecessary close of fd0; it's close-on-exec.
(create_temp_file): Now returns open fd, with an additional
Lisp_Object * argument to return the name. All callers changed.
Do not close the file; rewind it instead, and leave it open for
the caller. Do not lock the temp file. Unwind-protect the file
and the file-descriptor.
(Fcall_process_region): If the input is /dev/null, unwind-protect it.
If an asynchrounous process, record it here, not in call_process.
(syms_of_callproc) [MSDOS]: Initialize synch_process_tempfile.
* eval.c (set_unwind_protect): New function.
* fileio.c (write_region): New function, generalized from the
old Fwrite_region. Do not lock temp files.
(Fwrite_region): Use it.
* lisp.h (set_unwind_protect, write_region): New decls.
* process.c: Include <verify.h>.
(make_process): Mark fds as initially closed.
(deleted_pid_list): Now a list of pid-filename pairs.
All uses changed.
(close_process_fd): New function.
(SUBPROCESS_STDIN, WRITE_TO_SUBPROCESS, READ_FROM_SUBPROCESS)
(SUBPROCESS_STDOUT, READ_FROM_EXEC_MONITOR, EXEC_MONITOR_OUTPUT):
New constants. Verify that their number matches PROCESS_OPEN_FDS.
(create_process, create_pty, Fmake_serial_process)
(server_accept_connection): Record which fds need to be closed,
and let deactivate_process close them.
(Fmake_network_process): Do not discard the unwind-protect
until it's safe to do so.
(deactivate_process): Close the fds opened by create_process etc.
(Fprocess_send_eof): Adjust to new way of recording open fds.
Report an error if /dev/null can't be opened, instead of aborting.
* process.h (PROCESS_OPEN_FDS): New constant.
(struct Lisp_Process): New member open_fds.
(record_kill_process, record_deleted_pid): Adjust signatures.
(record_deleted_pid): Move decl here ...
* syswait.h (record_deleted_pid): ... from here.
2013-08-11 Paul Eggert <eggert@cs.ucla.edu>
* decompress.c: Fix bugs with large buffers and weird inputs.
Tune a bit. Reindent as per usual Emacs style.
(BUFFER_SIZE): Remove.
(Fdecompress_gzipped_region): Do not mishandle input buffers with
more than UINT_MAX bytes. Decompress into the gap instead of into
an auto buffer, as this should avoid copying. Return nil if
'inflate' returns Z_NEED_DICT, as we have no dictionary. Do not
set immediate_quit; we shouldn't trust zlib code that much.
2013-08-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
* decompress.c (Fdecompress_gzipped_region): Respect all zlib

File diff suppressed because it is too large Load Diff

View File

@ -27,48 +27,48 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "buffer.h"
#define BUFFER_SIZE 16384
struct decompress_unwind_data {
struct decompress_unwind_data
{
ptrdiff_t old_point, start;
z_stream *stream;
};
static void
unwind_decompress (void *ddata) {
unwind_decompress (void *ddata)
{
struct decompress_unwind_data *data = ddata;
inflateEnd (data->stream);
/* Delete any uncompressed data already inserted and restore
point. */
if (data->start) {
del_range (data->start, PT);
SET_PT (data->old_point);
}
/* Delete any uncompressed data already inserted and restore point. */
if (data->start)
{
del_range (data->start, PT);
SET_PT (data->old_point);
}
}
DEFUN ("decompress-gzipped-region", Fdecompress_gzipped_region,
Sdecompress_gzipped_region,
2, 2, 0,
doc: /* Decompress a gzip-compressed region.
The text in the region will be replaced by the decompressed data.
On failure, nil is returned and the data is left in place.
This function can only be called in unibyte buffers.*/)
Replace the text in the region by the decompressed data.
On failure, return nil and leave the data in place.
This function can be called only in unibyte buffers. */)
(Lisp_Object start, Lisp_Object end)
{
ptrdiff_t istart, iend, point = PT;
ptrdiff_t istart, iend, pos_byte;
z_stream stream;
int decompressed;
char out[16384];
int inflate_status;
struct decompress_unwind_data unwind_data;
ptrdiff_t count = SPECPDL_INDEX ();
validate_region (&start, &end);
if (! NILP (BVAR (current_buffer, enable_multibyte_characters)))
error ("This function can only be called in unibyte buffers");
error ("This function can be called only in unibyte buffers");
/* This is a unibyte buffer, so character positions and bytes are
the same. */
the same. */
istart = XINT (start);
iend = XINT (end);
move_gap_both (iend, iend);
@ -79,49 +79,55 @@ This function can only be called in unibyte buffers.*/)
stream.avail_in = 0;
stream.next_in = Z_NULL;
/* This magic number apparently means "this is gzip". */
/* This magic number apparently means "this is gzip". */
if (inflateInit2 (&stream, 16 + MAX_WBITS) != Z_OK)
return Qnil;
/* We're inserting the decompressed data at the end of the
compressed data. */
SET_PT (iend);
stream.avail_in = iend - istart;
stream.next_in = (char *) BYTE_POS_ADDR (istart);
unwind_data.start = iend;
unwind_data.stream = &stream;
unwind_data.old_point = point;
unwind_data.old_point = PT;
record_unwind_protect_ptr (unwind_decompress, &unwind_data);
immediate_quit = 1;
/* Insert the decompressed data at the end of the compressed data. */
SET_PT (iend);
/* Run inflate() on input until the output buffer isn't full. */
do {
int result;
stream.avail_out = BUFFER_SIZE;
stream.next_out = out;
result = inflate (&stream, Z_NO_FLUSH);
if (result < 0) {
unbind_to (count, Qnil);
return Qnil;
pos_byte = istart;
/* Keep calling 'inflate' until it reports an error or end-of-input. */
do
{
/* Maximum number of bytes that one 'inflate' call should read and write.
zlib requires that these values not exceed UINT_MAX.
Do not make avail_out too large, as that might unduly delay C-g. */
ptrdiff_t avail_in = min (iend - pos_byte, UINT_MAX);
ptrdiff_t avail_out = min (1 << 14, UINT_MAX);
ptrdiff_t decompressed;
if (GAP_SIZE < avail_out)
make_gap (avail_out - GAP_SIZE);
stream.next_in = BYTE_POS_ADDR (pos_byte);
stream.avail_in = avail_in;
stream.next_out = GPT_ADDR;
stream.avail_out = avail_out;
inflate_status = inflate (&stream, Z_NO_FLUSH);
pos_byte += avail_in - stream.avail_in;
decompressed = avail_out - stream.avail_out;
insert_from_gap (decompressed, decompressed, 0);
QUIT;
}
while (inflate_status == Z_OK);
decompressed = BUFFER_SIZE - stream.avail_out;
insert_1_both (out, decompressed, decompressed, 0, 0, 0);
QUIT;
} while (stream.avail_out == 0);
immediate_quit = 0;
if (inflate_status != Z_STREAM_END)
return unbind_to (count, Qnil);
unwind_data.start = 0;
unbind_to (count, Qnil);
/* Delete the compressed data. */
/* Delete the compressed data. */
del_range (istart, iend);
return Qt;
return unbind_to (count, Qt);
}

View File

@ -3301,6 +3301,16 @@ clear_unwind_protect (ptrdiff_t count)
It need not be at the top of the stack. Discard the entry's
previous value without invoking it. */
void
set_unwind_protect (ptrdiff_t count, void (*func) (Lisp_Object),
Lisp_Object arg)
{
union specbinding *p = specpdl + count;
p->unwind.kind = SPECPDL_UNWIND;
p->unwind.func = func;
p->unwind.arg = arg;
}
void
set_unwind_protect_ptr (ptrdiff_t count, void (*func) (void *), void *arg)
{

View File

@ -4746,25 +4746,39 @@ This does code conversion according to the value of
This calls `write-region-annotate-functions' at the start, and
`write-region-post-annotation-function' at the end. */)
(Lisp_Object start, Lisp_Object end, Lisp_Object filename, Lisp_Object append, Lisp_Object visit, Lisp_Object lockname, Lisp_Object mustbenew)
(Lisp_Object start, Lisp_Object end, Lisp_Object filename, Lisp_Object append,
Lisp_Object visit, Lisp_Object lockname, Lisp_Object mustbenew)
{
return write_region (start, end, filename, append, visit, lockname, mustbenew,
-1);
}
/* Like Fwrite_region, except that if DESC is nonnegative, it is a file
descriptor for FILENAME, so do not open or close FILENAME. */
Lisp_Object
write_region (Lisp_Object start, Lisp_Object end, Lisp_Object filename,
Lisp_Object append, Lisp_Object visit, Lisp_Object lockname,
Lisp_Object mustbenew, int desc)
{
int desc;
int open_flags;
int mode;
off_t offset IF_LINT (= 0);
bool open_and_close_file = desc < 0;
bool ok;
int save_errno = 0;
const char *fn;
struct stat st;
EMACS_TIME modtime;
ptrdiff_t count = SPECPDL_INDEX ();
ptrdiff_t count1;
ptrdiff_t count1 IF_LINT (= 0);
Lisp_Object handler;
Lisp_Object visit_file;
Lisp_Object annotations;
Lisp_Object encoded_filename;
bool visiting = (EQ (visit, Qt) || STRINGP (visit));
bool quietly = !NILP (visit);
bool file_locked = 0;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
struct buffer *given_buffer;
struct coding_system coding;
@ -4832,7 +4846,6 @@ This calls `write-region-annotate-functions' at the start, and
record_unwind_protect (build_annotations_unwind,
Vwrite_region_annotation_buffers);
Vwrite_region_annotation_buffers = list1 (Fcurrent_buffer ());
count1 = SPECPDL_INDEX ();
given_buffer = current_buffer;
@ -4871,8 +4884,11 @@ This calls `write-region-annotate-functions' at the start, and
coding.mode |= CODING_MODE_SELECTIVE_DISPLAY;
#ifdef CLASH_DETECTION
if (!auto_saving)
lock_file (lockname);
if (open_and_close_file && !auto_saving)
{
lock_file (lockname);
file_locked = 1;
}
#endif /* CLASH_DETECTION */
encoded_filename = ENCODE_FILE (filename);
@ -4889,19 +4905,23 @@ This calls `write-region-annotate-functions' at the start, and
mode = auto_saving ? auto_save_mode_bits : 0666;
#endif
desc = emacs_open (fn, open_flags, mode);
if (desc < 0)
if (open_and_close_file)
{
int open_errno = errno;
desc = emacs_open (fn, open_flags, mode);
if (desc < 0)
{
int open_errno = errno;
#ifdef CLASH_DETECTION
if (!auto_saving) unlock_file (lockname);
if (file_locked)
unlock_file (lockname);
#endif /* CLASH_DETECTION */
UNGCPRO;
report_file_errno ("Opening output file", filename, open_errno);
}
UNGCPRO;
report_file_errno ("Opening output file", filename, open_errno);
}
record_unwind_protect_int (close_file_unwind, desc);
count1 = SPECPDL_INDEX ();
record_unwind_protect_int (close_file_unwind, desc);
}
if (NUMBERP (append))
{
@ -4910,7 +4930,8 @@ This calls `write-region-annotate-functions' at the start, and
{
int lseek_errno = errno;
#ifdef CLASH_DETECTION
if (!auto_saving) unlock_file (lockname);
if (file_locked)
unlock_file (lockname);
#endif /* CLASH_DETECTION */
UNGCPRO;
report_file_errno ("Lseek error", filename, lseek_errno);
@ -4945,9 +4966,9 @@ This calls `write-region-annotate-functions' at the start, and
immediate_quit = 0;
/* fsync is not crucial for auto-save files, since they might lose
some work anyway. */
if (!auto_saving && !write_region_inhibit_fsync)
/* fsync is not crucial for temporary files. Nor for auto-save
files, since they might lose some work anyway. */
if (open_and_close_file && !auto_saving && !write_region_inhibit_fsync)
{
/* Transfer data and metadata to disk, retrying if interrupted.
fsync can report a write failure here, e.g., due to disk full
@ -4971,12 +4992,15 @@ This calls `write-region-annotate-functions' at the start, and
ok = 0, save_errno = errno;
}
/* NFS can report a write failure now. */
if (emacs_close (desc) < 0)
ok = 0, save_errno = errno;
if (open_and_close_file)
{
/* NFS can report a write failure now. */
if (emacs_close (desc) < 0)
ok = 0, save_errno = errno;
/* Discard the unwind protect for close_file_unwind. */
specpdl_ptr = specpdl + count1;
/* Discard the unwind protect for close_file_unwind. */
specpdl_ptr = specpdl + count1;
}
/* Some file systems have a bug where st_mtime is not updated
properly after a write. For example, CIFS might not see the
@ -5052,7 +5076,7 @@ This calls `write-region-annotate-functions' at the start, and
unbind_to (count, Qnil);
#ifdef CLASH_DETECTION
if (!auto_saving)
if (file_locked)
unlock_file (lockname);
#endif /* CLASH_DETECTION */

View File

@ -410,6 +410,10 @@ struct frame
/* Nonzero means that the pointer is invisible. */
unsigned pointer_invisible :1;
/* Nonzero means that all windows except mini-window and
selected window on this frame have frozen window starts. */
unsigned frozen_window_starts : 1;
/* Nonzero if we should actually display the scroll bars on this frame. */
enum vertical_scroll_bar_type vertical_scroll_bar_type;
@ -761,6 +765,10 @@ default_pixels_per_inch_y (void)
/* Not really implemented. */
#define FRAME_WANTS_MODELINE_P(f) (f)->wants_modeline
/* Nonzero if all windows except selected window and mini window
are frozen on frame F. */
#define FRAME_WINDOWS_FROZEN(f) (f)->frozen_window_starts
/* Nonzero if a size change has been requested for frame F
but not yet really put into effect. This can be true temporarily
when an X event comes in at a bad time. */

View File

@ -3751,11 +3751,12 @@ extern Lisp_Object internal_condition_case_n
Lisp_Object, Lisp_Object (*) (Lisp_Object, ptrdiff_t, Lisp_Object *));
extern void specbind (Lisp_Object, Lisp_Object);
extern void record_unwind_protect (void (*) (Lisp_Object), Lisp_Object);
extern void record_unwind_protect_int (void (*) (int), int);
extern void record_unwind_protect_ptr (void (*) (void *), void *);
extern void record_unwind_protect_int (void (*) (int), int);
extern void record_unwind_protect_void (void (*) (void));
extern void record_unwind_protect_nothing (void);
extern void clear_unwind_protect (ptrdiff_t);
extern void set_unwind_protect (ptrdiff_t, void (*) (Lisp_Object), Lisp_Object);
extern void set_unwind_protect_ptr (ptrdiff_t, void (*) (void *), void *);
extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object);
extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
@ -3835,6 +3836,9 @@ extern Lisp_Object Qfile_directory_p;
extern Lisp_Object Qinsert_file_contents;
extern Lisp_Object Qfile_name_history;
extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
extern Lisp_Object write_region (Lisp_Object, Lisp_Object, Lisp_Object,
Lisp_Object, Lisp_Object, Lisp_Object,
Lisp_Object, int);
EXFUN (Fread_file_name, 6); /* Not a normal DEFUN. */
extern void close_file_unwind (int);
extern void fclose_unwind (void *);

View File

@ -92,6 +92,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <c-ctype.h>
#include <sig2str.h>
#include <verify.h>
#endif /* subprocesses */
@ -722,6 +723,8 @@ make_process (Lisp_Object name)
non-Lisp data, so do it only for slots which should not be zero. */
p->infd = -1;
p->outfd = -1;
for (i = 0; i < PROCESS_OPEN_FDS; i++)
p->open_fd[i] = -1;
#ifdef HAVE_GNUTLS
p->gnutls_initstage = GNUTLS_STAGE_EMPTY;
@ -818,13 +821,17 @@ get_process (register Lisp_Object name)
treated by the SIGCHLD handler and waitpid has been invoked on them;
otherwise they might fill up the kernel's process table.
Some processes created by call-process are also put onto this list. */
Some processes created by call-process are also put onto this list.
Members of this list are (process-ID . filename) pairs. The
process-ID is a number; the filename, if a string, is a file that
needs to be removed after the process exits. */
static Lisp_Object deleted_pid_list;
void
record_deleted_pid (pid_t pid)
record_deleted_pid (pid_t pid, Lisp_Object filename)
{
deleted_pid_list = Fcons (make_fixnum_or_float (pid),
deleted_pid_list = Fcons (Fcons (make_fixnum_or_float (pid), filename),
/* GC treated elements set to nil. */
Fdelq (Qnil, deleted_pid_list));
@ -852,7 +859,7 @@ nil, indicating the current buffer's process. */)
else
{
if (p->alive)
record_kill_process (p);
record_kill_process (p, Qnil);
if (p->infd >= 0)
{
@ -1605,17 +1612,45 @@ start_process_unwind (Lisp_Object proc)
remove_process (proc);
}
/* If *FD_ADDR is nonnegative, close it, and mark it as closed. */
static void
close_process_fd (int *fd_addr)
{
int fd = *fd_addr;
if (0 <= fd)
{
*fd_addr = -1;
emacs_close (fd);
}
}
/* Indexes of file descriptors in open_fds. */
enum
{
/* The pipe from Emacs to its subprocess. */
SUBPROCESS_STDIN,
WRITE_TO_SUBPROCESS,
/* The main pipe from the subprocess to Emacs. */
READ_FROM_SUBPROCESS,
SUBPROCESS_STDOUT,
/* The pipe from the subprocess to Emacs that is closed when the
subprocess execs. */
READ_FROM_EXEC_MONITOR,
EXEC_MONITOR_OUTPUT
};
verify (PROCESS_OPEN_FDS == EXEC_MONITOR_OUTPUT + 1);
static void
create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
{
struct Lisp_Process *p = XPROCESS (process);
int inchannel, outchannel;
pid_t pid;
int vfork_errno;
int sv[2];
#ifndef WINDOWSNT
int wait_child_setup[2];
#endif
int forkin, forkout;
bool pty_flag = 0;
char pty_name[PTY_NAME_SIZE];
@ -1629,6 +1664,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
if (inchannel >= 0)
{
p->open_fd[READ_FROM_SUBPROCESS] = inchannel;
#if ! defined (USG) || defined (USG_SUBTTY_WORKS)
/* On most USG systems it does not work to open the pty's tty here,
then close it and reopen it in the child. */
@ -1637,6 +1673,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
forkout = forkin = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0);
if (forkin < 0)
report_file_error ("Opening pty", Qnil);
p->open_fd[SUBPROCESS_STDIN] = forkin;
#else
forkin = forkout = -1;
#endif /* not USG, or USG_SUBTTY_WORKS */
@ -1645,23 +1682,17 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
}
else
{
if (emacs_pipe (sv) != 0)
if (emacs_pipe (p->open_fd + SUBPROCESS_STDIN) != 0
|| emacs_pipe (p->open_fd + READ_FROM_SUBPROCESS) != 0)
report_file_error ("Creating pipe", Qnil);
inchannel = sv[0];
forkout = sv[1];
if (emacs_pipe (sv) != 0)
{
int pipe_errno = errno;
emacs_close (inchannel);
emacs_close (forkout);
report_file_errno ("Creating pipe", Qnil, pipe_errno);
}
outchannel = sv[1];
forkin = sv[0];
forkin = p->open_fd[SUBPROCESS_STDIN];
outchannel = p->open_fd[WRITE_TO_SUBPROCESS];
inchannel = p->open_fd[READ_FROM_SUBPROCESS];
forkout = p->open_fd[SUBPROCESS_STDOUT];
}
#ifndef WINDOWSNT
if (emacs_pipe (wait_child_setup) != 0)
if (emacs_pipe (p->open_fd + READ_FROM_EXEC_MONITOR) != 0)
report_file_error ("Creating pipe", Qnil);
#endif
@ -1670,16 +1701,16 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
/* Record this as an active process, with its channels. */
chan_process[inchannel] = process;
XPROCESS (process)->infd = inchannel;
XPROCESS (process)->outfd = outchannel;
p->infd = inchannel;
p->outfd = outchannel;
/* Previously we recorded the tty descriptor used in the subprocess.
It was only used for getting the foreground tty process, so now
we just reopen the device (see emacs_get_tty_pgrp) as this is
more portable (see USG_SUBTTY_WORKS above). */
XPROCESS (process)->pty_flag = pty_flag;
pset_status (XPROCESS (process), Qrun);
p->pty_flag = pty_flag;
pset_status (p, Qrun);
FD_SET (inchannel, &input_wait_mask);
FD_SET (inchannel, &non_keyboard_wait_mask);
@ -1699,25 +1730,21 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
{
Lisp_Object volatile encoded_current_dir_volatile = encoded_current_dir;
Lisp_Object volatile lisp_pty_name_volatile = lisp_pty_name;
Lisp_Object volatile process_volatile = process;
char **volatile new_argv_volatile = new_argv;
int volatile forkin_volatile = forkin;
int volatile forkout_volatile = forkout;
int volatile wait_child_setup_0_volatile = wait_child_setup[0];
int volatile wait_child_setup_1_volatile = wait_child_setup[1];
struct Lisp_Process *p_volatile = p;
pid = vfork ();
encoded_current_dir = encoded_current_dir_volatile;
lisp_pty_name = lisp_pty_name_volatile;
process = process_volatile;
new_argv = new_argv_volatile;
forkin = forkin_volatile;
forkout = forkout_volatile;
wait_child_setup[0] = wait_child_setup_0_volatile;
wait_child_setup[1] = wait_child_setup_1_volatile;
p = p_volatile;
pty_flag = XPROCESS (process)->pty_flag;
pty_flag = p->pty_flag;
}
if (pid == 0)
@ -1833,42 +1860,42 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
/* Back in the parent process. */
vfork_errno = errno;
XPROCESS (process)->pid = pid;
p->pid = pid;
if (pid >= 0)
XPROCESS (process)->alive = 1;
p->alive = 1;
/* Stop blocking in the parent. */
unblock_child_signal ();
unblock_input ();
if (forkin >= 0)
emacs_close (forkin);
if (forkin != forkout && forkout >= 0)
emacs_close (forkout);
if (pid < 0)
report_file_errno ("Doing vfork", Qnil, vfork_errno);
else
{
/* vfork succeeded. */
/* Close the pipe ends that the child uses, or the child's pty. */
close_process_fd (&p->open_fd[SUBPROCESS_STDIN]);
close_process_fd (&p->open_fd[SUBPROCESS_STDOUT]);
#ifdef WINDOWSNT
register_child (pid, inchannel);
#endif /* WINDOWSNT */
pset_tty_name (XPROCESS (process), lisp_pty_name);
pset_tty_name (p, lisp_pty_name);
#ifndef WINDOWSNT
/* Wait for child_setup to complete in case that vfork is
actually defined as fork. The descriptor wait_child_setup[1]
actually defined as fork. The descriptor
XPROCESS (proc)->open_fd[EXEC_MOINTOR_OUTPUT]
of a pipe is closed at the child side either by close-on-exec
on successful execve or the _exit call in child_setup. */
{
char dummy;
emacs_close (wait_child_setup[1]);
emacs_read (wait_child_setup[0], &dummy, 1);
emacs_close (wait_child_setup[0]);
close_process_fd (&p->open_fd[EXEC_MONITOR_OUTPUT]);
emacs_read (p->open_fd[READ_FROM_EXEC_MONITOR], &dummy, 1);
close_process_fd (&p->open_fd[READ_FROM_EXEC_MONITOR]);
}
#endif
}
@ -1877,16 +1904,13 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
static void
create_pty (Lisp_Object process)
{
struct Lisp_Process *p = XPROCESS (process);
char pty_name[PTY_NAME_SIZE];
int inchannel, outchannel;
int pty_fd = NILP (Vprocess_connection_type) ? -1 : allocate_pty (pty_name);
inchannel = outchannel = -1;
if (!NILP (Vprocess_connection_type))
outchannel = inchannel = allocate_pty (pty_name);
if (inchannel >= 0)
if (pty_fd >= 0)
{
p->open_fd[SUBPROCESS_STDIN] = pty_fd;
#if ! defined (USG) || defined (USG_SUBTTY_WORKS)
/* On most USG systems it does not work to open the pty's tty here,
then close it and reopen it in the child. */
@ -1895,6 +1919,7 @@ create_pty (Lisp_Object process)
int forkout = emacs_open (pty_name, O_RDWR | O_NOCTTY, 0);
if (forkout < 0)
report_file_error ("Opening pty", Qnil);
p->open_fd[WRITE_TO_SUBPROCESS] = forkout;
#if defined (DONT_REOPEN_PTY)
/* In the case that vfork is defined as fork, the parent process
(Emacs) may send some data before the child process completes
@ -1903,33 +1928,32 @@ create_pty (Lisp_Object process)
#endif /* DONT_REOPEN_PTY */
#endif /* not USG, or USG_SUBTTY_WORKS */
fcntl (inchannel, F_SETFL, O_NONBLOCK);
fcntl (outchannel, F_SETFL, O_NONBLOCK);
fcntl (pty_fd, F_SETFL, O_NONBLOCK);
/* Record this as an active process, with its channels.
As a result, child_setup will close Emacs's side of the pipes. */
chan_process[inchannel] = process;
XPROCESS (process)->infd = inchannel;
XPROCESS (process)->outfd = outchannel;
chan_process[pty_fd] = process;
p->infd = pty_fd;
p->outfd = pty_fd;
/* Previously we recorded the tty descriptor used in the subprocess.
It was only used for getting the foreground tty process, so now
we just reopen the device (see emacs_get_tty_pgrp) as this is
more portable (see USG_SUBTTY_WORKS above). */
XPROCESS (process)->pty_flag = 1;
pset_status (XPROCESS (process), Qrun);
p->pty_flag = 1;
pset_status (p, Qrun);
setup_process_coding_systems (process);
FD_SET (inchannel, &input_wait_mask);
FD_SET (inchannel, &non_keyboard_wait_mask);
if (inchannel > max_process_desc)
max_process_desc = inchannel;
FD_SET (pty_fd, &input_wait_mask);
FD_SET (pty_fd, &non_keyboard_wait_mask);
if (pty_fd > max_process_desc)
max_process_desc = pty_fd;
pset_tty_name (XPROCESS (process), build_string (pty_name));
pset_tty_name (p, build_string (pty_name));
}
XPROCESS (process)->pid = -2;
p->pid = -2;
}
@ -2535,6 +2559,7 @@ usage: (make-serial-process &rest ARGS) */)
p = XPROCESS (proc);
fd = serial_open (port);
p->open_fd[SUBPROCESS_STDIN] = fd;
p->infd = fd;
p->outfd = fd;
if (fd > max_process_desc)
@ -3297,12 +3322,6 @@ usage: (make-network-process &rest ARGS) */)
}
#endif
/* Discard the unwind protect for closing S, if any. */
specpdl_ptr = specpdl + count1;
/* Unwind bind_polling_period and request_sigio. */
unbind_to (count, Qnil);
if (s < 0)
{
/* If non-blocking got this far - and failed - assume non-blocking is
@ -3344,8 +3363,17 @@ usage: (make-network-process &rest ARGS) */)
if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
pset_command (p, Qt);
p->pid = 0;
p->open_fd[SUBPROCESS_STDIN] = inch;
p->infd = inch;
p->outfd = outch;
/* Discard the unwind protect for closing S, if any. */
specpdl_ptr = specpdl + count1;
/* Unwind bind_polling_period and request_sigio. */
unbind_to (count, Qnil);
if (is_server && socktype != SOCK_DGRAM)
pset_status (p, Qlisten);
@ -3784,17 +3812,15 @@ FLAGS is the current flags of the interface. */)
static void
deactivate_process (Lisp_Object proc)
{
register int inchannel, outchannel;
register struct Lisp_Process *p = XPROCESS (proc);
int inchannel;
struct Lisp_Process *p = XPROCESS (proc);
int i;
#ifdef HAVE_GNUTLS
/* Delete GnuTLS structures in PROC, if any. */
emacs_gnutls_deinit (proc);
#endif /* HAVE_GNUTLS */
inchannel = p->infd;
outchannel = p->outfd;
#ifdef ADAPTIVE_READ_BUFFERING
if (p->read_output_delay > 0)
{
@ -3805,16 +3831,17 @@ deactivate_process (Lisp_Object proc)
}
#endif
inchannel = p->infd;
/* Beware SIGCHLD hereabouts. */
if (inchannel >= 0)
flush_pending_output (inchannel);
for (i = 0; i < PROCESS_OPEN_FDS; i++)
close_process_fd (&p->open_fd[i]);
if (inchannel >= 0)
{
/* Beware SIGCHLD hereabouts. */
flush_pending_output (inchannel);
emacs_close (inchannel);
if (outchannel >= 0 && outchannel != inchannel)
emacs_close (outchannel);
p->infd = -1;
p->outfd = -1;
#ifdef DATAGRAM_SOCKETS
if (DATAGRAM_CHAN_P (inchannel))
{
@ -4095,6 +4122,7 @@ server_accept_connection (Lisp_Object server, int channel)
/* Discard the unwind protect for closing S. */
specpdl_ptr = specpdl + count;
p->open_fd[SUBPROCESS_STDIN] = s;
p->infd = s;
p->outfd = s;
pset_status (p, Qrun);
@ -6014,7 +6042,8 @@ process has been transmitted to the serial port. */)
}
else
{
int old_outfd, new_outfd;
int old_outfd = XPROCESS (proc)->outfd;
int new_outfd;
#ifdef HAVE_SHUTDOWN
/* If this is a network connection, or socketpair is used
@ -6022,18 +6051,15 @@ process has been transmitted to the serial port. */)
(In some old system, shutdown to socketpair doesn't work.
Then we just can't win.) */
if (EQ (XPROCESS (proc)->type, Qnetwork)
|| XPROCESS (proc)->outfd == XPROCESS (proc)->infd)
shutdown (XPROCESS (proc)->outfd, 1);
/* In case of socketpair, outfd == infd, so don't close it. */
if (XPROCESS (proc)->outfd != XPROCESS (proc)->infd)
emacs_close (XPROCESS (proc)->outfd);
#else /* not HAVE_SHUTDOWN */
emacs_close (XPROCESS (proc)->outfd);
#endif /* not HAVE_SHUTDOWN */
|| XPROCESS (proc)->infd == old_outfd)
shutdown (old_outfd, 1);
#endif
close_process_fd (&XPROCESS (proc)->open_fd[WRITE_TO_SUBPROCESS]);
new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
if (new_outfd < 0)
emacs_abort ();
old_outfd = XPROCESS (proc)->outfd;
report_file_error ("Opening null device", Qnil);
XPROCESS (proc)->open_fd[WRITE_TO_SUBPROCESS] = new_outfd;
XPROCESS (proc)->outfd = new_outfd;
if (!proc_encode_coding_system[new_outfd])
proc_encode_coding_system[new_outfd]
@ -6042,8 +6068,6 @@ process has been transmitted to the serial port. */)
= *proc_encode_coding_system[old_outfd];
memset (proc_encode_coding_system[old_outfd], 0,
sizeof (struct coding_system));
XPROCESS (proc)->outfd = new_outfd;
}
return process;
}
@ -6120,7 +6144,8 @@ handle_child_signal (int sig)
bool all_pids_are_fixnums
= (MOST_NEGATIVE_FIXNUM <= TYPE_MINIMUM (pid_t)
&& TYPE_MAXIMUM (pid_t) <= MOST_POSITIVE_FIXNUM);
Lisp_Object xpid = XCAR (tail);
Lisp_Object head = XCAR (tail);
Lisp_Object xpid = XCAR (head);
if (all_pids_are_fixnums ? INTEGERP (xpid) : NUMBERP (xpid))
{
pid_t deleted_pid;
@ -6129,7 +6154,11 @@ handle_child_signal (int sig)
else
deleted_pid = XFLOAT_DATA (xpid);
if (child_status_changed (deleted_pid, 0, 0))
XSETCAR (tail, Qnil);
{
if (STRINGP (XCDR (head)))
unlink (SSDATA (XCDR (head)));
XSETCAR (tail, Qnil);
}
}
}

View File

@ -31,6 +31,11 @@ INLINE_HEADER_BEGIN
# define PROCESS_INLINE INLINE
#endif
/* Bound on number of file descriptors opened on behalf of a process,
that need to be closed. */
enum { PROCESS_OPEN_FDS = 6 };
/* This structure records information about a subprocess
or network connection. */
@ -115,6 +120,9 @@ struct Lisp_Process
int infd;
/* Descriptor by which we write to this process */
int outfd;
/* Descriptors that were created for this process and that need
closing. Unused entries are negative. */
int open_fd[PROCESS_OPEN_FDS];
/* Event-count of last event in which this process changed status. */
EMACS_INT tick;
/* Event-count of last such event reported. */
@ -210,13 +218,16 @@ enum
extern void block_child_signal (void);
extern void unblock_child_signal (void);
extern void record_kill_process (struct Lisp_Process *);
extern void record_kill_process (struct Lisp_Process *, Lisp_Object);
/* Defined in process.c. */
/* Defined in sysdep.c. */
extern Lisp_Object list_system_processes (void);
extern Lisp_Object system_process_attributes (Lisp_Object);
/* Defined in process.c. */
extern void record_deleted_pid (pid_t, Lisp_Object);
extern void hold_keyboard_input (void);
extern void unhold_keyboard_input (void);
extern bool kbd_on_hold_p (void);

View File

@ -52,9 +52,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define WTERMSIG(status) ((status) & 0x7f)
#endif
/* Defined in process.c. */
extern void record_deleted_pid (pid_t);
/* Defined in sysdep.c. */
extern void wait_for_termination (pid_t, int *, bool);
extern pid_t child_status_changed (pid_t, int *, int);

View File

@ -72,7 +72,6 @@ static int get_leaf_windows (struct window *, struct window **, int);
static void window_scroll (Lisp_Object, EMACS_INT, bool, int);
static void window_scroll_pixel_based (Lisp_Object, int, bool, int);
static void window_scroll_line_based (Lisp_Object, int, bool, int);
static int freeze_window_start (struct window *, void *);
static Lisp_Object window_list (void);
static int add_window_to_list (struct window *, void *);
static Lisp_Object next_window (Lisp_Object, Lisp_Object,
@ -502,7 +501,6 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap)
CHECK_LIVE_WINDOW (window);
w = XWINDOW (window);
w->frozen_window_start_p = 0;
/* Make the selected window's buffer current. */
Fset_buffer (w->contents);
@ -2058,7 +2056,6 @@ replace_window (Lisp_Object old, Lisp_Object new, int setflag)
wset_window_end_vpos (n, make_number (0));
wset_window_end_pos (n, make_number (0));
n->window_end_valid = 0;
n->frozen_window_start_p = 0;
}
tem = o->next;
@ -6459,38 +6456,6 @@ foreach_window_1 (struct window *w, int (*fn) (struct window *, void *), void *u
return cont;
}
/* Freeze or unfreeze the window start of W unless it is a
mini-window or the selected window. FREEZE_P non-null means freeze
the window start. */
static int
freeze_window_start (struct window *w, void *freeze_p)
{
if (MINI_WINDOW_P (w)
|| (WINDOWP (selected_window) /* Can be nil in corner cases. */
&& (w == XWINDOW (selected_window)
|| (MINI_WINDOW_P (XWINDOW (selected_window))
&& ! NILP (Vminibuf_scroll_window)
&& w == XWINDOW (Vminibuf_scroll_window)))))
freeze_p = NULL;
w->frozen_window_start_p = freeze_p != NULL;
return 1;
}
/* Freeze or unfreeze the window starts of all leaf windows on frame
F, except the selected window and a mini-window. FREEZE_P non-zero
means freeze the window start. */
void
freeze_window_starts (struct frame *f, bool freeze_p)
{
foreach_window (f, freeze_window_start, freeze_p ? f : 0);
}
/***********************************************************************
Initialization
***********************************************************************/

View File

@ -316,11 +316,6 @@ struct window
Currently only used for menu bar windows of frames. */
unsigned pseudo_window_p : 1;
/* 1 means the window start of this window is frozen and may not
be changed during redisplay. If point is not in the window,
accept that. */
unsigned frozen_window_start_p : 1;
/* Non-zero means fringes are drawn outside display margins.
Otherwise draw them between margin areas and text. */
unsigned fringes_outside_margins : 1;
@ -888,7 +883,6 @@ extern Lisp_Object window_from_coordinates (struct frame *, int, int,
extern void resize_frame_windows (struct frame *, int, bool);
extern void restore_window_configuration (Lisp_Object);
extern void delete_all_child_windows (Lisp_Object);
extern void freeze_window_starts (struct frame *, bool);
extern void grow_mini_window (struct window *, int);
extern void shrink_mini_window (struct window *);
extern int window_relative_x_coord (struct window *, enum window_part, int);

View File

@ -10516,7 +10516,8 @@ resize_mini_window (struct window *w, int exact_p)
if (height > WINDOW_TOTAL_LINES (w))
{
int old_height = WINDOW_TOTAL_LINES (w);
freeze_window_starts (f, 1);
FRAME_WINDOWS_FROZEN (f) = 1;
grow_mini_window (w, height - WINDOW_TOTAL_LINES (w));
window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height;
}
@ -10524,7 +10525,8 @@ resize_mini_window (struct window *w, int exact_p)
&& (exact_p || BEGV == ZV))
{
int old_height = WINDOW_TOTAL_LINES (w);
freeze_window_starts (f, 0);
FRAME_WINDOWS_FROZEN (f) = 0;
shrink_mini_window (w);
window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height;
}
@ -10535,19 +10537,21 @@ resize_mini_window (struct window *w, int exact_p)
if (height > WINDOW_TOTAL_LINES (w))
{
int old_height = WINDOW_TOTAL_LINES (w);
freeze_window_starts (f, 1);
FRAME_WINDOWS_FROZEN (f) = 1;
grow_mini_window (w, height - WINDOW_TOTAL_LINES (w));
window_height_changed_p = WINDOW_TOTAL_LINES (w) != old_height;
}
else if (height < WINDOW_TOTAL_LINES (w))
{
int old_height = WINDOW_TOTAL_LINES (w);
freeze_window_starts (f, 0);
FRAME_WINDOWS_FROZEN (f) = 0;
shrink_mini_window (w);
if (height)
{
freeze_window_starts (f, 1);
FRAME_WINDOWS_FROZEN (f) = 1;
grow_mini_window (w, height - WINDOW_TOTAL_LINES (w));
}
@ -10930,6 +10934,31 @@ mode_line_update_needed (struct window *w)
&& (w->column_number_displayed != current_column ()));
}
/* Nonzero if window start of W is frozen and may not be changed during
redisplay. */
static bool
window_frozen_p (struct window *w)
{
if (FRAME_WINDOWS_FROZEN (XFRAME (WINDOW_FRAME (w))))
{
Lisp_Object window;
XSETWINDOW (window, w);
if (MINI_WINDOW_P (w))
return 0;
else if (EQ (window, selected_window))
return 0;
else if (MINI_WINDOW_P (XWINDOW (selected_window))
&& EQ (window, Vminibuf_scroll_window))
/* This special window can't be frozen too. */
return 0;
else
return 1;
}
return 0;
}
/***********************************************************************
Mode Lines and Frame Titles
***********************************************************************/
@ -15573,7 +15602,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
/* Handle case where place to start displaying has been specified,
unless the specified location is outside the accessible range. */
if (w->force_start || w->frozen_window_start_p)
if (w->force_start || window_frozen_p (w))
{
/* We set this later on if we have to adjust point. */
int new_vpos = -1;
@ -15618,7 +15647,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
goto need_larger_matrices;
}
if (w->cursor.vpos < 0 && !w->frozen_window_start_p)
if (w->cursor.vpos < 0 && !window_frozen_p (w))
{
/* If point does not appear, try to move point so it does
appear. The desired matrix has been built above, so we