Merge from origin/emacs-26

a427de9 (origin/emacs-26) Fix bug #11732
3a04e15 Improve documentation of 'emacs-lock-mode'
9d6ca5a * lisp/imenu.el (imenu-generic-expression): Doc fix.  (Bug#32...
fdd7e7d Improve indexing of 'eval-defun' in ELisp manual
10af989 Fix (length CIRCULAR) documentation
271d1f7 Tramp editorials
4abf94f Clarify and improve doc strings of 'eval-last-sexp' and friends
6cfc7a7 Automate upload of Emacs manuals to gnu.org
b73cde5 Fix MH-E mail composition with GNU Mailutils (SF#485)
0dce5e5 Speed up 'replace-buffer-contents' some more
00fdce0 * doc/emacs/docstyle.texi: Avoid messing up the html output.

Conflicts:
	admin/make-tarball.txt
This commit is contained in:
Glenn Morris 2018-07-07 09:27:44 -07:00
commit d3e0fdc24f
19 changed files with 655 additions and 74 deletions

View file

@ -261,8 +261,12 @@ ROOT should be the root of an Emacs source tree."
ROOT should be the root of an Emacs source tree.
Interactively with a prefix argument, prompt for TYPE.
Optional argument TYPE is type of output (nil means all)."
(interactive (let ((root (read-directory-name "Emacs root directory: "
source-directory nil t)))
(interactive (let ((root
(if noninteractive
(or (pop command-line-args-left)
default-directory)
(read-directory-name "Emacs root directory: "
source-directory nil t))))
(list root
(if current-prefix-arg
(completing-read
@ -717,8 +721,12 @@ style=\"text-align:left\">")
ROOT should be the root of an Emacs source tree.
Interactively with a prefix argument, prompt for TYPE.
Optional argument TYPE is type of output (nil means all)."
(interactive (let ((root (read-directory-name "Emacs root directory: "
source-directory nil t)))
(interactive (let ((root
(if noninteractive
(or (pop command-line-args-left)
default-directory)
(read-directory-name "Emacs root directory: "
source-directory nil t))))
(list root
(if current-prefix-arg
(completing-read

214
admin/make-manuals Executable file
View file

@ -0,0 +1,214 @@
#!/bin/bash
### make-manuals - create the Emacs manuals to upload to the gnu.org website
## Copyright 2018 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## This file is part of GNU Emacs.
## GNU Emacs is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
## GNU Emacs is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
## This is a helper script to create the Emacs manuals as used on the
## gnu.org website. After this, use upload-manuals to upload them.
##
## Usage:
## Call from the top-level directory of an Emacs source tree.
## This should normally be a release.
## The info files should exist.
### Code:
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
usage ()
{
cat 1>&2 <<EOF
Usage: ${PN} [-c] [-e emacs]
Create the Emacs manuals for the gnu.org website.
Call this script from the top-level of the Emacs source tree that
contains the manuals you want to use (normally a release).
The admin/ directory is required.
Options:
-c: do not delete any pre-existing $outdir/ directory
-e: Emacs executable to use (default $emacs)
EOF
exit 1
}
## Defaults.
continue=
emacs=emacs
## Parameters.
outdir=manual
gzip="gzip --best --no-name"
tar="tar --numeric-owner --owner=0 --group=0 --mode=go+u,go-w"
## Requires GNU tar >= 1.28 so that the tarballs are more reproducible.
## (Personally I think this is way OOT. I'm not even sure if anyone
## uses these tarfiles, let alone cares whether they are reproducible.)
tar --help | grep -- '--sort.*name' >& /dev/null && tar="$tar --sort=name"
while getopts ":hce:" option ; do
case $option in
(h) usage ;;
(c) continue=t ;;
(e) emacs=$OPTARG ;;
(\?) die "Bad option -$OPTARG" ;;
(:) die "Option -$OPTARG requires an argument" ;;
(*) die "getopts error" ;;
esac
done
shift $(( --OPTIND ))
OPTIND=1
[ $# -eq 0 ] || usage
[ -e admin/admin.el ] || die "admin/admin.el not found"
tempfile=/tmp/$PN.$$
trap "rm -f $tempfile 2> /dev/null" EXIT
[ "$continue" ] || rm -rf $outdir
if [ -e $outdir ]; then
## Speed up repeat invocation.
echo "Re-using existing $outdir/ directory"
else
## This creates the manuals in a manual/ directory.
## Note makeinfo >= 5 is much slower than makeinfo 4.
echo "Making manuals (slow)..."
$emacs --batch -Q -l admin/admin.el -f make-manuals \
>| $tempfile 2>&1 || {
cat $tempfile 1>&2
die "error running make-manuals"
}
fi
find $outdir -name '*~' -exec rm {} +
echo "Adding compressed html files..."
for f in emacs elisp; do
$tar -C $outdir/html_node -cf - $f | $gzip \
> $outdir/$f.html_node.tar.gz || die "error for $f"
done
echo "Making manual tarfiles..."
$emacs --batch -Q -l admin/admin.el -f make-manuals-dist \
>| $tempfile || {
cat $tempfile 1>&2
die "error running make-manuals-dist"
}
o=$outdir/texi
mkdir -p $o
for f in $outdir/*.tar; do
of=${f##*/}
of=${of#emacs-}
of=${of%%-[0-9]*}.texi.tar
of=${of/lispintro/eintr}
of=${of/lispref/elisp}
of=${of/manual/emacs}
of=$o/$of
mv $f $of
$gzip $of || die "error compressing $f"
done
echo "Making refcards..."
make -C etc/refcards dist >| $tempfile 2>&1 || {
cat $tempfile 1>&2
die "failed make dist"
}
## This may hang if eg german.sty is missing.
make -k -C etc/refcards pdf >| $tempfile 2>&1 || {
cat $tempfile 1>&2
echo "Warning: ignored failure(s) from make pdf"
}
## Newer Texlive only provide mex (used by pl refcards) for pdf, AFAICS.
make -k -C etc/refcards ps >| $tempfile 2>&1 || {
cat $tempfile 1>&2
echo "Warning: ignored failure(s) from make ps"
}
## Note that in the website, refcards/ is not a subdirectory of manual/.
refdir=$outdir/refcards
mkdir -p $refdir
mv etc/refcards/emacs-refcards.tar $refdir
$gzip $refdir/emacs-refcards.tar
for fmt in pdf ps; do
o=$refdir/$fmt
mkdir -p $o
[ $fmt = pdf ] && {
cp etc/refcards/*.$fmt $o
rm $o/gnus-logo.pdf
continue
}
for f in etc/refcards/*.$fmt; do
$gzip < $f > $o/${f##*/}.gz
done
done
make -C etc/refcards extraclean > /dev/null
echo "Adding compressed info files..."
o=$outdir/info
mkdir -p $o
for f in eintr.info elisp.info emacs.info; do
$gzip < info/$f > $o/$f.gz || die "error for $f"
done
echo "Finished OK, you might want to run upload-manuals now"
exit 0

View file

@ -202,50 +202,14 @@ The pages to update are:
emacs.html (for a new major release, a more thorough update is needed)
history.html
add the new NEWS file as news/NEWS.xx.y
For every new release, a banner is displayed on top of the emacs.html
page. Uncomment and the release banner in emacs.html. Keep it on the
page for about a month, then comment it again.
Use M-x make-manuals from admin/admin.el to regenerate the html
manuals in manual/. If there are new manuals, add appropriate index
pages in manual/ and add them to manual/index.html. In the
manual/html_node directory, delete any old manual pages that are no
longer present.
Tar up the generated html_node/emacs/ and elisp/ directories and update
the files manual/elisp.html_node.tar.gz and emacs.html_node.tar.gz.
Use GNU Tar 1.28 or later so that the tarballs are more reproducible,
as follows:
cd manual
tar='tar --numeric-owner --owner=0 --group=0 --mode=go+u,go-w --sort=name'
gzip='gzip --best --no-name'
$tar -cf - html_node/emacs | $gzip >emacs.html_node.tar.gz
$tar -cf - html_node/elisp | $gzip >elisp.html_node.tar.gz
Use M-x make-manuals-dist from admin/admin.el to update the
manual/*.tar files.
Add compressed copies of the main info pages from the tarfile to manual/info/
as follows:
cd manual
mkdir info
gzip --best --no-name <../info/eintr.info >info/eintr.info.gz
gzip --best --no-name <../info/elisp.info >info/elisp.info.gz
gzip --best --no-name <../info/emacs.info >info/emacs.info.gz
Update the refcards/pdf/ and ps/ directories, and also
refcards/emacs-refcards.tar.gz (use make -C etc/refcards pdf ps dist).
FIXME: The above instructions are not quite complete, as they do not
specify the manual procedure used to copy the generated files in the
'manual' directory to the corresponding web files, and to cvs remove
and add files as needed. Also, they are missing some files, e.g.,
they generate manual/html_mono/ada-mode.html but do not generate the
top-level ada-mode.html file for the one-node-per-page version; this
is currently done by hand.
Regenerate the various manuals in manual/.
The scripts admin/make-manuals and admin/upload-manuals summarize the process.
Browsing <https://web.cvs.savannah.gnu.org/viewvc/?root=emacs> is one
way to check for any files that still need updating.

376
admin/upload-manuals Executable file
View file

@ -0,0 +1,376 @@
#!/bin/bash
### upload-manuals - upload the Emacs manuals to the gnu.org website
## Copyright 2018 Free Software Foundation, Inc.
## Author: Glenn Morris <rgm@gnu.org>
## This file is part of GNU Emacs.
## GNU Emacs is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
## GNU Emacs is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
### Commentary:
## Run this on the output of make-manuals.
## We assume you have already checked out a local copy of the website
## following the instructions at
## https://savannah.gnu.org/cvs/?group=emacs
## Usage:
## Call from the manual/ directory created by make-manual.
## upload-manuals /path/to/cvs/checkout
### Code:
die () # write error to stderr and exit
{
[ $# -gt 0 ] && echo "$PN: $@" >&2
exit 1
}
PN=${0##*/} # basename of script
usage ()
{
cat 1>&2 <<EOF
Usage: ${PN} [-m message] [-n] /path/to/cvs/checkout
Upload the Emacs manuals to the gnu.org website.
Call this script from the manual/ directory created by make-manuals.
This script destructively modifies the source directory.
Options:
-m: commit message to use (default "$message")
-n: dry-run (do not commit files)
EOF
exit 1
}
## Parameters
version=$(gunzip -c info/emacs.info.gz 2> /dev/null | sed -n '0,/updated for Emacs version/s/.*updated for Emacs version \([0-9.]*\).*\.$/\1/p')
## Defaults
cvs=cvs
message="Regenerate manuals for Emacs $version"
umessage=
while getopts ":hm:n" option ; do
case $option in
(h) usage ;;
(m) umessage=t ; message="$OPTARG" ;;
(n) cvs="echo $cvs" ;;
(\?) die "Bad option -$OPTARG" ;;
(:) die "Option -$OPTARG requires an argument" ;;
(*) die "getopts error" ;;
esac
done
shift $(( --OPTIND ))
OPTIND=1
[ $# -eq 1 ] || usage
[ "$version$umessage" ] || \
die "Could not get version to use for commit message"
webdir=$1
[ -e $webdir/CVS/Entries ] && [ -e $webdir/refcards/pdf/refcard.pdf ] || \
die "$webdir does not look like a checkout of the Emacs webpages"
[ -e html_mono/emacs.html ] && [ -e html_node/emacs/index.html ] || \
die "Current directory does not like the manual/ directory"
echo "Doing refcards..."
mv refcards/emacs-refcards.tar.gz $webdir/refcards/
(
cd $webdir/refcards
$cvs commit -m "$message" emacs-refcards.tar.gz || die "commit error"
)
## For refcards, we assume a missing file is due to a tex failure,
## rather than a refcard that should be deleted.
for fmt in pdf ps.gz; do
clist=
for f in $webdir/refcards/${fmt%.gz}/*.$fmt; do
s=${f#$webdir/}
if [ -e $s ]; then
mv $s $f
clist="$clist ${f##*/}"
else
echo "$s seems to be missing"
fi
done
## Check for new files.
new=
for f in refcards/${fmt%.gz}/*.$fmt; do
[ -e $f ] || break
new="$new $f"
clist="$clist ${f##*/}"
done
[ "$new" ] && mv $new $webdir/refcards/${fmt%.gz}/
[ "$clist" ] && (
cd $webdir
[ "$new" ] && {
echo "Adding new files: $new"
$cvs add -kb $new || die "add error"
echo "Remember to add new refcards to refcards/index.html"
}
cd refcards/${fmt%.gz}
$cvs commit -m "$message" $clist || die "commit error"
)
done # $fmt
echo "Doing non-html manuals..."
for fmt in info pdf ps texi; do
clist=
for f in $webdir/manual/$fmt/*; do
[ ${f##*/} = CVS ] && continue
s=$fmt/${f##*/}
if [ -e $s ]; then
mv $s $f
clist="$clist ${f##*/}"
else
case ${f##*/} in
*_7x9*.pdf) continue ;;
esac
echo "$s seems to be missing"
fi
done
## Check for new files.
new=
for f in $fmt/*.$fmt*; do
[ -e $f ] || break
new="$new $f"
clist="$clist ${f##*/}"
done
[ "$new" ] && mv $new $webdir/manual/$fmt/
[ "$clist" ] && (
cd $webdir/manual
[ "$new" ] && {
echo "Adding new files: $new"
$cvs add $new || die "add error"
echo "Remember to add new files to the appropriate index pages"
}
cd $fmt
$cvs commit -m "$message" $clist || die "commit error"
)
done
echo "Doing tarred html..."
clist=
for f in $webdir/manual/*html*.tar*; do
s=${f##*/}
if [ -e $s ]; then
mv $s $f
clist="$clist ${f##*/}"
else
echo "$s seems to be missing"
fi
done
## Check for new files.
new=
for f in *html*.tar*; do
[ -e $f ] || break
new="$new $f"
clist="$clist ${f##*/}"
done
[ "$new" ] && mv $new $webdir/manual
[ "$clist" ] && (
cd $webdir/manual
[ "$new" ] && {
echo "Adding new files: $new"
$cvs add -kb $new || die "add error"
echo "Remember to add new files to the appropriate index pages"
}
$cvs commit -m "$message" $clist || die "commit error"
)
## This happens so rarely it would be less effort to do by hand...
new_manual () {
local t=eww
local i=$webdir/manual/$t.html # template
[ -r $i ] || die "Cannot read template $i"
local name o mono title
for name; do
name=${name##*/}
name=${name%.html}
o=$webdir/manual/$name.html
[ -e $o ] && die "$o already exists"
mono=$webdir/manual/html_mono/$name.html
[ -r $mono ] || die "Cannot read $mono"
title=$(sed -n 's|^<title>\(.*\)</title>|\1|p' $mono)
: ${title:?}
echo "$title" | grep -qi "Emacs" || title="Emacs $title"
echo "$title" | grep -qi "manual" || title="$title Manual"
## It is a pain to extract and insert a good "documenting...".
## Improve it by hand if you care.
sed -e "s|^<title>.*\( - GNU Project\)|<title>$title\1|" \
-e "s|^<h2>.*|<h2>$title</h2>|" \
-e "s/^documenting.*/documenting \"$title\"./" \
-e "s/$t/$name/" \
-e "s/&copy;.* Free/\&copy; $(date +%Y) Free/" $i > $o
(
cd $webdir/manual
$cvs add ${o##*/} || die "add error for $o"
)
done
return 0
}
echo "Doing html_mono..."
clist=
for f in $webdir/manual/html_mono/*.html; do
s=${f##*manual/}
if [ -e $s ]; then
mv $s $f
clist="$clist ${f##*/}"
else
echo "$s seems to be missing"
fi
done
## Check for new files.
new=
for f in html_mono/*.html; do
[ -e $f ] || break
new="$new $f"
clist="$clist ${f##*/}"
done
[ "$new" ] && mv $new $webdir/manual/html_mono/
## TODO: check for removed manuals.
[ "$clist" ] && (
cd $webdir/manual/html_mono
[ "$new" ] && {
echo "Adding new files: $new"
$cvs add $new || die "add error"
new_manual $new || die
echo "Remember to add new entries to manual/index.html"
}
$cvs commit -m "$message" $clist || die "commit error"
)
echo "Doing html_node..."
for d in html_node/*; do
[ -e $d ] || break
echo "Doing $d..."
[ -e $webdir/manual/$d ] || {
echo "New directory: $d"
mkdir $webdir/manual/$d
$cvs add $webdir/manual/$d || die "add error"
}
new=
for f in $d/*.html; do
[ -e $webdir/manual/$f ] || new="$new ${f##*/}"
done
stale=
for f in $webdir/manual/$d/*.html; do
[ -e ${f#$webdir/manual/} ] || stale="$stale ${f##*/}"
done
mv $d/*.html $webdir/manual/$d/
(
cd $webdir/manual/$d
[ "$new" ] && {
echo "Adding new files: $new"
$cvs add $new || die "add error"
}
[ "$stale" ] && {
echo "Removing stale files: $stale"
$cvs remove -f $stale || die "remove error"
}
## -f: create a new revision even if no change.
$cvs commit -f -m "$message" *.html $stale || die "commit error"
)
done
echo "Checking for stray files..."
find -type f
echo "Finished"
exit 0

View file

@ -8,9 +8,11 @@
@end ignore
@set txicodequoteundirected
@set txicodequotebacktick
@iftex
@c It turns out TeX sometimes fails to hyphenate, so we help it here
@hyphenation{au-to-mat-i-cal-ly}
@hyphenation{spec-i-fied}
@hyphenation{work-a-round}
@hyphenation{work-a-rounds}
@hyphenation{un-marked}
@end iftex

View file

@ -321,6 +321,7 @@ If a @code{defcustom} does not specify any @code{:group}, the last group
defined with @code{defgroup} in the same file will be used. This way, most
@code{defcustom} do not need an explicit @code{:group}.
@cindex @code{eval-defun}, and @code{defcustom} forms
When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
mode (@code{eval-defun}), a special feature of @code{eval-defun}
arranges to set the variable unconditionally, without testing whether

View file

@ -336,6 +336,7 @@ which is not currently set up to break on change.
@cindex debugger, explicit entry
@cindex force entry to debugger
@cindex @code{eval-defun}, and explicit entry to debugger
You can cause the debugger to be called at a certain point in your
program by writing the expression @code{(debug)} at that point. To do
this, visit the source file, insert the text @samp{(debug)} at the

View file

@ -2531,6 +2531,7 @@ However, if the customizations are subsequently removed, the
appearance of @var{face} will again be determined by its default face
spec.
@cindex @code{eval-defun}, and @code{defface} forms
As an exception, if you evaluate a @code{defface} form with
@kbd{C-M-x} in Emacs Lisp mode (@code{eval-defun}), a special feature
of @code{eval-defun} overrides any custom face specs on the face,

View file

@ -75,9 +75,9 @@ string, bool-vector, or char-table, @code{nil} otherwise.
@anchor{Definition of length}
This function returns the number of elements in @var{sequence}. If
@var{sequence} is a dotted list, a @code{wrong-type-argument} error is
signaled. Circular lists may cause an infinite loop. For a
char-table, the value returned is always one more than the maximum
Emacs character code.
signaled; if it is a circular list, a @code{circular-list} error is
signaled. For a char-table, the value returned is always one more
than the maximum Emacs character code.
@xref{Definition of safe-length}, for the related function @code{safe-length}.

View file

@ -461,6 +461,7 @@ form occurs in a @code{let} form with lexical binding enabled), then
@code{defvar} sets the dynamic value. The lexical binding remains in
effect until its binding construct exits. @xref{Variable Scoping}.
@cindex @code{eval-defun}, and @code{defvar} forms
When you evaluate a top-level @code{defvar} form with @kbd{C-M-x} in
Emacs Lisp mode (@code{eval-defun}), a special feature of
@code{eval-defun} arranges to set the variable unconditionally, without

View file

@ -2097,8 +2097,8 @@ installed. Usually, it is sufficient to open the file
@file{@trampfn{adb,,/}}. Then you can navigate in the filesystem via
@code{dired}.
Alternatively, applications such as @code{SSHDroid} that run
@command{sshd} process on the Android device can accept any
Alternatively, applications such as @code{Termux} or @code{SSHDroid}
that run @command{sshd} process on the Android device can accept any
@option{ssh}-based methods provided these settings are adjusted:
@itemize

View file

@ -97,7 +97,10 @@ It can be one of the following values:
exit -- Emacs cannot exit while the buffer is locked
kill -- the buffer cannot be killed, but Emacs can exit as usual
all -- the buffer is locked against both actions
nil -- the buffer is not locked")
nil -- the buffer is not locked
See also `emacs-lock-unlockable-modes', which exempts buffers under
some major modes from being locked under some circumstances.")
(put 'emacs-lock-mode 'permanent-local t)
(defvar-local emacs-lock--old-mode nil
@ -202,7 +205,10 @@ When called from Elisp code, ARG can be any locking mode:
kill -- the buffer cannot be killed, but Emacs can exit as usual
all -- the buffer is locked against both actions
Other values are interpreted as usual."
Other values are interpreted as usual.
See also `emacs-lock-unlockable-modes', which exempts buffers under
some major modes from being locked under some circumstances."
:init-value nil
:lighter (""
(emacs-lock--try-unlocking " locked:" " Locked:")

View file

@ -200,9 +200,9 @@ string (which specifies the title of a submenu into which the
matches are put).
REGEXP is a regular expression matching a definition construct
which is to be displayed in the menu. REGEXP may also be a
function, called without arguments. It is expected to search
backwards. It must return true and set `match-data' if it finds
another element.
function of no arguments. If REGEXP is a function, it is
expected to search backwards, return non-nil if it finds a
definition construct, and set `match-data' for that construct.
INDEX is an integer specifying which subexpression of REGEXP
matches the definition's name; this subexpression is displayed as
the menu item.

View file

@ -927,8 +927,10 @@ CONFIG is the window configuration before sending mail."
(list "-form" mh-comp-formfile)))
(setq new (make-temp-file "comp."))
(rename-file (concat temp-folder "/" "1") new t)
(delete-file (concat temp-folder "/" ".mh_sequences"))
(delete-directory temp-folder)
;; The temp folder could contain various metadata files. Rather
;; than trying to enumerate all the known files, just do a
;; recursive delete on the directory.
(delete-directory temp-folder t)
new))
(defun mh-read-draft (use initial-contents delete-contents-file)

View file

@ -544,7 +544,7 @@ The PATH environment variable should be set via `tramp-remote-path'.
The TERM environment variable should be set via `tramp-terminal-type'.
The INSIDE_EMACS environment variable will automatically be set
based on the TRAMP and Emacs versions, and should not be set here."
based on the Tramp and Emacs versions, and should not be set here."
:group 'tramp
:version "26.1"
:type '(repeat string))

View file

@ -1191,11 +1191,11 @@ current buffer.
Normally, this function truncates long output according to the
value of the variables `eval-expression-print-length' and
`eval-expression-print-level'. With a prefix argument of zero,
however, there is no such truncation. Such a prefix argument
also causes integers to be printed in several additional formats
\(octal, hexadecimal, and character when the prefix argument is
-1 or the integer is `eval-expression-print-maximum-character' or
less).
however, there is no such truncation.
Integer values are printed in several formats (decimal, octal,
and hexadecimal). When the prefix argument is -1 or the value
doesn't exceed `eval-expression-print-maximum-character', an
integer value is also printed as a character of that codepoint.
If `eval-expression-debug-on-error' is non-nil, which is the default,
this command arranges for all errors to enter the debugger."

View file

@ -1528,9 +1528,9 @@ This affects printing by `eval-expression' (via
:version "26.1")
(defun eval-expression-print-format (value)
"If VALUE in an integer, return a specially formatted string.
"If VALUE is an integer, return a specially formatted string.
This string will typically look like \" (#o1, #x1, ?\\C-a)\".
If VALUE is not an integer, nil is returned.
If VALUE is not an integer, return nil.
This function is used by commands like `eval-expression' that
display the result of expression evaluation."
(when (integerp value)
@ -1591,11 +1591,11 @@ non-nil (interactively, with a prefix argument of zero), however,
there is no such truncation.
If the resulting value is an integer, and CHAR-PRINT-LIMIT is
non-nil (interactively, unless given a positive prefix argument)
non-nil (interactively, unless given a non-zero prefix argument)
it will be printed in several additional formats (octal,
hexadecimal, and character). The character format is only used
if the value is below CHAR-PRINT-LIMIT (interactively, if the
prefix argument is -1 or the value is below
prefix argument is -1 or the value doesn't exceed
`eval-expression-print-maximum-character').
Runs the hook `eval-expression-minibuffer-setup-hook' on entering the

View file

@ -3139,6 +3139,9 @@ static unsigned short rbc_quitcounter;
/* Buffers to compare. */ \
struct buffer *buffer_a; \
struct buffer *buffer_b; \
/* BEGV of each buffer */ \
ptrdiff_t beg_a; \
ptrdiff_t beg_b; \
/* Whether each buffer is unibyte/plain-ASCII or not. */ \
bool a_unibyte; \
bool b_unibyte; \
@ -3222,6 +3225,8 @@ differences between the two buffers. */)
struct context ctx = {
.buffer_a = a,
.buffer_b = b,
.beg_a = min_a,
.beg_b = min_b,
.a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
.b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
.deletions = SAFE_ALLOCA (del_bytes),
@ -3361,8 +3366,8 @@ static bool
buffer_chars_equal (struct context *ctx,
ptrdiff_t pos_a, ptrdiff_t pos_b)
{
pos_a += BUF_BEGV (ctx->buffer_a);
pos_b += BUF_BEGV (ctx->buffer_b);
pos_a += ctx->beg_a;
pos_b += ctx->beg_b;
/* Allow the user to escape out of a slow compareseq call. */
rarely_quit (++rbc_quitcounter);

View file

@ -4550,13 +4550,13 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
set_ime_composition_window_fn (context, &form);
release_ime_context_fn (hwnd, context);
}
/* We should "goto dflt" here to pass WM_IME_STARTCOMPOSITION to
DefWindowProc, so that the composition window will actually
be displayed. But doing so causes trouble with displaying
dialog boxes, such as the file selection dialog or font
selection dialog. So something else is needed to fix the
former without breaking the latter. See bug#11732. */
break;
/* FIXME: somehow "goto dflt" here instead of "break" causes
popup dialogs, such as the ones shown by File->Open File and
w32-select-font, to become hidden behind their parent frame,
when focus-follows-mouse is in effect. See bug#11732. But
if we don't "goto dflt", users of IME cannot type text
supported by the input method... */
goto dflt;
case WM_IME_ENDCOMPOSITION:
ignore_ime_char = 0;