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:
commit
5ff84f8a17
28
ChangeLog
28
ChangeLog
@ -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.
|
||||
|
80
Makefile.in
80
Makefile.in
@ -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.
|
||||
|
@ -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@
|
||||
|
@ -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
144
autogen/configure
vendored
@ -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
|
||||
|
34
configure.ac
34
configure.ac
@ -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}"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
@ -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
|
||||
|
@ -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{-}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
@ -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],
|
||||
|
@ -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
|
||||
|
104
src/ChangeLog
104
src/ChangeLog
@ -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
|
||||
|
782
src/callproc.c
782
src/callproc.c
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
10
src/eval.c
10
src/eval.c
@ -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)
|
||||
{
|
||||
|
74
src/fileio.c
74
src/fileio.c
@ -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 */
|
||||
|
||||
|
@ -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. */
|
||||
|
@ -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 *);
|
||||
|
225
src/process.c
225
src/process.c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
35
src/window.c
35
src/window.c
@ -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
|
||||
***********************************************************************/
|
||||
|
@ -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);
|
||||
|
43
src/xdisp.c
43
src/xdisp.c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user