[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 3274b80: Merge from origin/emacs-27

From: Glenn Morris
Subject: master 3274b80: Merge from origin/emacs-27
Date: Sat, 7 Mar 2020 10:55:26 -0500 (EST)

branch: master
commit 3274b8090bf18dec00b6ce45d6a01bf5263982ed
Merge: c996fe1 72f87f8
Author: Glenn Morris <address@hidden>
Commit: Glenn Morris <address@hidden>

    Merge from origin/emacs-27
    72f87f8873 (origin/emacs-27) NS port documentation updates
    5b19db98ad ; * etc/NEWS: correctly describe what fido-mode is
    fc47e3ad99 Let fido-mode users force a minibuffer-exit
    e734961d4c icomplete-fido-exit: New command for the M-j binding
    335a9bd215 minibuffer-force-complete-and-exit: Allow input with no ma...
    34132d4bf6 ; * etc/NEWS: Mark 2 entries as fully documented.
    d28b73841b ; * etc/NEWS: Fix the 'mml-secure-openpgp-sign-with-sender...
    d1d56a9fd9 ; * etc/NEWS: 'thunk-let' and 'thunk-let*' are fully docum...
    fc4f4efabf ; * etc/NEWS: No need to document vc-hg and mergebase chan...
    9e8456cf0f ; * etc/NEWS: No need to document changes in Octave mode.
    25b4d6fa28 ; * etc/NEWS: No need to document changes in map.el and se...
    fc4d0f86da ; * etc/NEWS: No need to document Ido news.
    d4ac478cb3 ; * etc/NEWS: No need to document news of doc-view.el.
    08c042bd26 Document that 'byte-compile-dynamic' is obsolete
    512b66abd7 ; * etc/NEWS: No need to document 'goto-address-uri-scheme...
    3103c01c3e ; * etc/NEWS: Formatting fixes.
    98306fdfb8 ; * etc/NEWS: No need to document deprecation of 'cl'.
    6281ed58be ; * etc/NEWS: No need to document the change in 'list-proc...
    e252341e11 ; * etc/NEWS: 'backup-by-copying-when-privileged-mismatch'...
    ec5a267ddc ; * etc/NEWS: Mark 'byte-count-to-string-function' as undo...
    89307ebccd ; * etc/NEWS: Mark 'completion-common-part' face entry as ...
    fdbe7cacfb Document the changes in 'read-answer'
    10c58356e4 Document changes in lexical-binding
    5cb312b5b9 Update ERC mailing list address
    cb1877321b Use regexp-opt to define bibtex-autokey-transcriptions.  (...
    3f9c340de0 Improve documentation of 'table-generate-source'
    33b31dc314 Attempt to avoid rare segfaults in show_mouse_face
    88c6db9196 Avoid crashes when a fontset has strange entries
    1814c7e158 Fix rx error with ? and ??
    40fb20061e * lisp/emacs-lisp/rx.el (rx--string-to-intervals): Fix err...
    08d7d28d35 Fix args in 'window-text-pixel-size' call in 'fit-window-t...
    cb1e30910e Have pulse.el preserve existing overlay priorities
    # Conflicts:
    #   etc/NEWS
 doc/emacs/macos.texi             | 69 +++++++++++++++++++++++++++++++++-------
 doc/lispref/compile.texi         |  6 +++-
 doc/lispref/minibuf.texi         | 20 ++++++------
 doc/lispref/variables.texi       | 10 ++++--
 etc/NEWS.27                      | 64 +++++++++++++++++++++++++++----------
 lisp/cedet/pulse.el              |  2 ++
 lisp/emacs-lisp/rx.el            |  4 +--
 lisp/erc/erc.el                  |  2 +-
 lisp/icomplete.el                | 15 +++++++--
 lisp/minibuffer.el               | 11 ++++++-
 lisp/textmodes/bibtex.el         | 50 +++++++++++++++--------------
 lisp/textmodes/table.el          | 21 ++++++------
 lisp/window.el                   |  4 +--
 src/fontset.c                    | 12 +++++--
 src/xdisp.c                      |  4 +++
 test/lisp/emacs-lisp/rx-tests.el |  4 ++-
 16 files changed, 213 insertions(+), 85 deletions(-)

diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi
index ae1b8d6..00daa8b 100644
--- a/doc/emacs/macos.texi
+++ b/doc/emacs/macos.texi
@@ -143,6 +143,64 @@ The variables for right-hand keys, like 
 may also be set to @code{left}, which means to use the same behavior as
 the corresponding left-hand key.
+@subsection Frame Variables
+@table @code
+@vindex ns-use-proxy-icon
+@item ns-use-proxy-icon
+This variable specifies whether to display the proxy icon in the
+@vindex ns-confirm-quit
+@item ns-confirm-quit
+This variable specifies whether to display a graphical confirmation
+dialogue on quitting.
+@vindex ns-auto-hide-menu-bar
+@item ns-auto-hide-menu-bar
+This variable specifies whether the macOS menu bar is hidden when an
+Emacs frame is selected.  If non-nil the menu bar is not shown unless
+the mouse pointer is moved near to the top of the screen.
+@vindex ns-use-native-fullscreen
+@item ns-use-native-fullscreen
+This variable controls whether to use native, or non-native
+fullscreen.  Native fullscreen is only available on macOS 10.7 and
+@end table
+@subsection macOS Trackpad/Mousewheel Variables
+These variables only apply to macOS 10.7 (Lion) and above.
+@table @code
+@vindex ns-use-mwheel-acceleration
+@item ns-use-mwheel-acceleration
+This variable controls whether Emacs ignores the system mousewheel
+acceleration.  When nil each `click' of the mousewheel will correspond
+exactly with one mousewheel event.  When non-nil, the default, each
+`click' may correspond with more than one mousewheel event, depending
+on the user's input.
+@vindex ns-use-mwheel-momentum
+@item ns-use-mwheel-momentum
+This variable controls whether Emacs ignores the system `momentum'
+when scrolling using a trackpad.  When non-nil, the default, scrolling
+rapidly may result in the buffer continuing to scroll for a short
+while after the user has lifted their fingers off the trackpad.
+@vindex ns-mwheel-line-height
+@item ns-mwheel-line-height
+This variable controls the sensitivity of scrolling with the trackpad.
+Apple trackpads scroll by pixels, not lines, so Emacs converts the
+system's pixel values into lines.  When set to a number, this variable
+sets the number of pixels Emacs will consider as one line.  When nil
+or a non-number the default line height is used.
+Setting a lower number makes the trackpad more sensitive, and a higher
+number makes the trackpad less sensitive.
+@end table
 @subsection Font Panel
 @findex ns-popup-font-panel
@@ -153,17 +211,6 @@ recently used or clicked on.
 @c  To make the setting permanent, use @samp{Save Options} in the
 @c Options menu, or run @code{menu-bar-options-save}.
-@cindex Core Text, on macOS
-@cindex font backend, on macOS
-In macOS, Emacs uses a Core Text based font backend
-by default.  If you prefer the older font style, enter the following
-at the command-line before starting Emacs:
-% defaults write org.gnu.Emacs FontBackend ns
-@end example
 @node Mac / GNUstep Events
 @section Windowing System Events under macOS / GNUstep
 @cindex events on macOS
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index 311b6f5..e979fda 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -302,7 +302,7 @@ function is called, it reads the full definition from the 
file, to
 replace the place-holder.
   The advantage of dynamic function loading is that loading the file
-becomes much faster.  This is a good thing for a file which contains
+should become faster.  This is a good thing for a file which contains
 many separate user-callable functions, if using one of them does not
 imply you will probably also use the rest.  A specialized mode which
 provides many keyboard commands often has that usage pattern: a user may
@@ -326,6 +326,10 @@ installed Emacs files.  But they are quite likely to 
happen with Lisp
 files that you are changing.  The easiest way to prevent these problems
 is to reload the new compiled file immediately after each recompilation.
+  @emph{Experience shows that using dynamic function loading provides
+benefits that are hardly measurable, so this feature is deprecated
+since Emacs 27.1.}
   The byte compiler uses the dynamic function loading feature if the
 variable @code{byte-compile-dynamic} is non-@code{nil} at compilation
 time.  Do not set this variable globally, since dynamic loading is
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index ac38b9d..2488fb3 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -2236,16 +2236,16 @@ the end of @var{question}.  The possible responses are 
provided in
 where @var{long-answer} is the complete text of the user response, a
 string; @var{short-answer} is a short form of the same response, a
-single character; and @var{help-message} is the text that describes
-the meaning of the answer.  If the variable @code{read-answer-short}
-is non-@code{nil}, the prompt will show the short variants of the
-possible answers and the user is expected to type the single
-characters shown in the prompt; otherwise the prompt will show the
-long variants of the answers, and the user is expected to type the
-full text of one of the answers and end by pressing @key{RET}.  If
-@code{use-dialog-box} is non-@code{nil}, and this function was invoked
-by mouse events, the question and the answers will be displayed in a
-GUI dialog box.
+single character or a function key; and @var{help-message} is the text
+that describes the meaning of the answer.  If the variable
+@code{read-answer-short} is non-@code{nil}, the prompt will show the
+short variants of the possible answers and the user is expected to
+type the single characters/keys shown in the prompt; otherwise the
+prompt will show the long variants of the answers, and the user is
+expected to type the full text of one of the answers and end by
+pressing @key{RET}.  If @code{use-dialog-box} is non-@code{nil}, and
+this function was invoked by mouse events, the question and the
+answers will be displayed in a GUI dialog box.
 The function returns the text of the @var{long-answer} selected by the
 user, regardless of whether long or short answers were shown in the
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 33897bb..abcd4bb 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1187,8 +1187,14 @@ When evaluating Emacs Lisp code directly using an 
@code{eval} call,
 lexical binding is enabled if the @var{lexical} argument to
 @code{eval} is non-@code{nil}.  @xref{Eval}.
-Lexical binding is also enabled in Lisp Interaction and IELM
-mode, used in the @file{*scratch*} and @file{*ielm*} buffers.
+@findex eval-expression@r{, and }lexical-binding
+Lexical binding is also enabled in Lisp Interaction and IELM mode,
+used in the @file{*scratch*} and @file{*ielm*} buffers, and also when
+evaluating expressions via @kbd{M-:} (@code{eval-expression}) and when
+processing the @option{--eval} command-line options of Emacs
+(@pxref{Action Arguments,,, emacs, The GNU Emacs Manual}) and
+@command{emacsclient} (@pxref{emacsclient Options,,, emacs, The GNU
+Emacs Manual}).
 @cindex special variables
   Even when lexical binding is enabled, certain variables will
diff --git a/etc/NEWS.27 b/etc/NEWS.27
index 8d0e0b6..1eff926 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -347,14 +347,18 @@ The default value is 30000, as the previously hard-coded 
 ** The function 'read-passwd' uses "*" as default character to hide passwords.
 ** The function 'read-answer' now accepts not only single character
 answers, but also function keys like 'F1', character events such as
 'C-M-h', and control characters like 'C-h'.
-** Lexical binding is now used when evaluating interactive Elisp forms.
-More specifically, 'lexical-binding' is now used for 'M-:', '--eval',
-as well as in 'lisp-interaction-mode' and 'ielm-mode', used in the
-"*scratch*" and "*ielm*" buffers.
+** Lexical binding is now used by default when evaluating interactive Elisp.
+More specifically, 'lexical-binding' is now used by default for 'M-:'
+and '--eval' (including in evaluations invoked from 'emacsclient' via
+its '--eval' command-line option), as well as in
+'lisp-interaction-mode' and 'ielm-mode', used in the "*scratch*" and
+"*ielm*" buffers.
 ** The new user option 'tooltip-resize-echo-area' avoids truncating
@@ -489,6 +493,7 @@ matches strings where the pattern appears as a subsequence. 
 simply, makes "foo" complete to both "barfoo" and "frodo".  Add 'flex'
 to 'completion-styles' or 'completion-category-overrides' to use it.
 ** The 'completion-common-part' face is now visible by default.
@@ -555,6 +560,7 @@ mode, they are described in the manual "(emacs) Display".
 ** New user option 'xref-file-name-display' controls the display of
 file names in xref buffers.
 ** New user option 'byte-count-to-string-function'.
 It is used for displaying file sizes and disk space in some cases.
@@ -586,6 +592,7 @@ The HIST argument of 'read-from-minibuffer' now works 
correctly with
 buffer-local variables.  This means that different buffers can have
 their own separated input history list if desired.
 ** 'backup-by-copying-when-privileged-mismatch' applies to file gid, too.
 In addition to checking the file owner uid, Emacs also checks that the
 group gid is not greater than 'backup-by-copying-when-privileged-mismatch';
@@ -739,9 +746,11 @@ non-nil.
 what they're named, and the 'battery-linux-sysfs-regexp' variable has
 been removed.
 ** The 'list-processes' command now includes port numbers in the
 network connection information (in addition to the host name).
 ** The 'cl' package is now officially deprecated in favor of 'cl-lib'.
@@ -750,51 +759,55 @@ network connection information (in addition to the host 
 *** When called interactively with a prefix arg 'C-u', 'desktop-read'
 now prompts the user for the directory containing the desktop file.
 ** display-line-numbers-mode
 *** New faces 'line-number-major-tick' and 'line-number-minor-tick',
 and user options 'display-line-numbers-major-tick' and
 'display-line-numbers-minor-tick' can be used to highlight the line
 numbers of lines multiple of certain numbers.
 *** New variable 'display-line-numbers-offset', when non-zero, adds
 an offset to absolute line numbers.
 ** winner
 *** A new user option, 'winner-boring-buffers-regexp', has been added.
 ** table
-*** 'table-generate-source' and friends now support outputting wiki and
-mediawiki format tables.
+*** 'table-generate-source' now supports wiki and mediawiki
+This command can now output wiki and mediawiki format tables.
 ** telnet-mode
 *** Reverting a buffer in 'telnet-mode' will restart a closed connection.
 ** goto-addr
 *** A way to more conveniently specify what URI address schemes should
 be ignored has been added via the 'goto-address-uri-schemes-ignored'
 ** tex-mode
 *** 'latex-noindent-commands' controls indentation of certain commands.
 You can use this new user option to control indentation of arguments of
 \emph, \footnote, and similar commands.
 ** byte compiler
 *** 'byte-compile-dynamic' is now obsolete.
 This is because on the one hand it suffers from misbehavior in corner
-cases that have plagued it for years, and on the other experiments indicated
-that it doesn't bring any measurable benefit.
+cases that have plagued it for years, and on the other hand experience
+indicates that it doesn't bring any measurable benefit.
 *** The 'g' keystroke in "*Compile-Log*" buffers has been bound to a
@@ -832,15 +845,19 @@ its functions.
 ** doc-view.el
 *** New commands 'doc-view-presentation' and 'doc-view-fit-window-to-page'.
 *** Added support for password-protected PDF files.
 *** A new user option 'doc-view-pdftotext-program-args' has been added
 to allow controlling how the conversion to text is done.
 ** Ido
 *** New user option 'ido-big-directories' to mark directories whose
 names match certain regular expressions as big.  Ido won't attempt to
 list the contents of such directories when completing file names.
@@ -871,6 +888,7 @@ at the end of the active minibuffer.
 *** Some commands that previously used 'read-char-choice' now read
 a character using the minibuffer by 'read-char-from-minibuffer'.
 ** map.el
 *** Now also understands plists.
@@ -882,6 +900,7 @@ a character using the minibuffer by 
 *** The 'type' arg can be a list '(hash-table :key1 VAL1 :key2 VAL2 ...)'.
 ** seq.el
 New convenience functions 'seq-first' and 'seq-rest' give easy access
 to respectively the first and all but the first elements of sequences.
@@ -941,6 +960,7 @@ functions 'windmove-coord-add', 
 'windmove-constrain-loc-for-movement', 'windmove-wrap-loc-for-movement',
 'windmove-reference-loc' and 'windmove-other-window-loc'.
 ** Octave mode
 The mode is automatically enabled in files that start with the
 'function' keyword.
@@ -1103,9 +1123,11 @@ for a revision.
 *** 'C-u C-x v D' ('vc-root-version-diff') prompts for two revisions
 and compares their entire trees.
 *** New user option 'vc-hg-revert-switches'.
 It specifies switches to pass to Hg's 'revert' command.
 *** 'C-x v M D' ('vc-diff-mergebase') and 'C-x v M L' ('vc-log-mergebase')
 print diffs and logs between the merge base (common ancestor) of two
 given revisions.
@@ -1475,9 +1497,9 @@ strings and report all the spelling mistakes.
 *** New minor mode Fido mode.
 This mode is based on Icomplete, and its name stands for "Fake Ido".
-The point of this mode is to be an 'ido-mode' workalike, but provide
-most of the functionality present in Icomplete that is not in
-'ido-mode', while being much more compatible with all of Emacs's
+The point of this mode is to be an 'ido-mode' workalike, providing
+most of the functionality present in 'ido-mode' that is not in
+Icomplete, which is much more compatible with all of Emacs's
 completion facilities.
 ** Ecomplete
@@ -1809,7 +1831,6 @@ keyboard macros.
 'isearch-yank-symbol-or-char'.  'isearch-del-char' is now bound to
 'M-s h l' invokes 'highlight-lines-matching-regexp' using the search
 string to highlight lines matching the search string.  This is similar
 to the existing binding 'M-s h r' ('highlight-regexp') that highlights
@@ -1964,6 +1985,7 @@ This is useful for games where lower scores are better, 
like time-based games.
 *** Completing file names in the minibuffer via 'C-TAB' now uses the
 styles as configured by the user option 'completion-styles'.
 ** New macros 'thunk-let' and 'thunk-let*'.
 These macros are analogue to 'let' and 'let*', but create bindings that
 are evaluated lazily.
@@ -2187,8 +2209,9 @@ are formatted as MIME digests.
 *** 'message-forward-included-headers' has changed its default to
 exclude most headers when forwarding.
 *** 'mml-secure-openpgp-sign-with-sender' sets also "gpg --sender".
-When 'mml-secure-openpgp-sign-with-sender' is non-nil message sender's
+When 'mml-secure-openpgp-sign-with-sender' is non-nil, message sender's
 email address (in addition to its old behavior) will also be used to
 set gpg's "--sender email@domain" option.
@@ -2640,6 +2663,7 @@ overrides all system and Emacs-provided defaults.  To get 
the old
 method back, set 'mailcap-prefer-mailcap-viewers' to nil.
 ** MH-E
 *** The hook 'mh-show-mode-hook' is now called before the message is inserted.
 Functions that want to affect the message text (for example, to change
@@ -3084,6 +3108,7 @@ with POSIX.1-2017.
 'decoded-time-weekday', 'decoded-time-dst' and 'decoded-time-zone'
 accessors can be used.
 *** The new functions 'date-days-in-month' (which will say how many
 days there are in a month in a specific year), 'date-ordinal-to-time'
 (that computes the date of an ordinal day), 'decoded-time-add' (for
@@ -3143,6 +3168,7 @@ throughput of reading from sub-processes that produces 
 ** The new user option 'quit-window-hook' is now run first when
 executing the 'quit-window' command.
 ** The user options 'help-enable-completion-auto-load',
 'help-enable-auto-load' and 'vhdl-project-auto-load', as well as the
 function 'vhdl-auto-load-project' have been renamed to have "autoload"
@@ -3623,15 +3649,18 @@ signal 'user-error' if there is no buffer to switch to.
 ** Battery status is now supported in all Cygwin builds.
 Previously it was supported only in the Cygwin-w32 build.
 ** Emacs now handles key combinations involving the macOS "command"
 and "option" modifier keys more correctly.
 ** MacOS modifier key behavior is now more adjustable.
 The behavior of the macOS "Option", "Command", "Control" and
 "Function" keys can now be specified separately for use with
 ordinary keys, function keys and mouse clicks.  This allows using them
 in their standard macOS way for composing characters.
 ** The special handling of 'frame-title-format' on NS where setting it
 to t would enable the macOS proxy icon has been replaced with a
 separate variable, 'ns-use-proxy-icon'.  'frame-title-format' will now
@@ -3682,6 +3711,7 @@ modifier keys in line with Apples guidelines.  This makes 
the drag and
 drop behavior more consistent, as previously the sending application
 was able to 'set' modifiers without the knowledge of the user.
 ** On NS multicolor font display is enabled again since it is also
 implemented in Emacs on free operating systems via Cairo drawing.
diff --git a/lisp/cedet/pulse.el b/lisp/cedet/pulse.el
index 5713a7b..16243e1 100644
--- a/lisp/cedet/pulse.el
+++ b/lisp/cedet/pulse.el
@@ -181,6 +181,7 @@ Optional argument FACE specifies the face to do the 
   (overlay-put o 'original-face (overlay-get o 'face))
   ;; Make this overlay take priority over the `transient-mark-mode'
   ;; overlay.
+  (overlay-put o 'original-priority (overlay-get o 'priority))
   (overlay-put o 'priority 1)
   (setq pulse-momentary-overlay o)
   (if (eq pulse-flag 'never)
@@ -214,6 +215,7 @@ Optional argument FACE specifies the face to do the 
     (let ((ol pulse-momentary-overlay))
       (overlay-put ol 'face (overlay-get ol 'original-face))
       (overlay-put ol 'original-face nil)
+      (overlay-put ol 'priority (overlay-get ol 'original-priority))
       ;; Clear the overlay if it needs deleting.
       (when (overlay-get ol 'pulse-delete) (delete-overlay ol)))
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index a0b2444..aa4b2ad 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -134,7 +134,7 @@ Each entry is:
                 (if (cdr def)
                     (error "Not an `rx' symbol definition: %s" form)
                   (car def)))))
-        ((consp form)
+        ((and (consp form) (symbolp (car form)))
          (let* ((op (car form))
                 (def (rx--lookup-def op)))
            (and def
@@ -360,7 +360,7 @@ character X becomes (?X . ?X).  Return the intervals in a 
                       (push (cons start end) intervals))
                       (error "Invalid rx `any' range: %s"
-                             (substring str i 3))))
+                             (substring str i (+ i 3)))))
                (setq i (+ i 3))))
              ;; Single character.
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index a467551..81325df 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -75,7 +75,7 @@
 (eval-when-compile (require 'subr-x))
 (defvar erc-official-location
-  "https://www.emacswiki.org/emacs/ERC (mailing list: address@hidden)"
+  "https://www.emacswiki.org/emacs/ERC (mailing list: address@hidden)"
   "Location of the ERC client on the Internet.")
 (defgroup erc nil
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index a1a67e2..66bc731 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -284,6 +284,17 @@ require user confirmation."
+(defun icomplete-fido-exit (force)
+  "Attempt to exit minibuffer immediately with current input.
+Unless FORCE is non-nil (interactively with a prefix argument),
+honour a non-nil REQUIRE-MATCH argument to `completing-read' by
+trying to complete as much as possible and disallowing the exit
+if that doesn't produce a completion match."
+  (interactive "P")
+  (if (and (not force) minibuffer--require-match)
+      (minibuffer-complete-and-exit)
+    (exit-minibuffer)))
 (defun icomplete-fido-backward-updir ()
   "Delete char before or go up directory, like `ido-mode'."
@@ -299,7 +310,7 @@ require user confirmation."
     (define-key map (kbd "RET") 'icomplete-fido-ret)
     (define-key map (kbd "C-m") 'icomplete-fido-ret)
     (define-key map (kbd "DEL") 'icomplete-fido-backward-updir)
-    (define-key map (kbd "M-j") 'exit-minibuffer)
+    (define-key map (kbd "M-j") 'icomplete-fido-exit)
     (define-key map (kbd "C-s") 'icomplete-forward-completions)
     (define-key map (kbd "C-r") 'icomplete-backward-completions)
     (define-key map (kbd "<right>") 'icomplete-forward-completions)
@@ -541,7 +552,7 @@ See `icomplete-mode' and `minibuffer-setup-hook'."
                           (if (window-minibuffer-p)
-                              (not minibuffer-completion-confirm)))))
+                              (eq minibuffer--require-match t)))))
                  (buffer-undo-list t)
             ;; Do nothing if while-no-input was aborted.
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 49daabc..7f5b597 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -1400,7 +1400,11 @@ scroll the window of possible completions."
    (minibuffer-prompt-end) (point-max) #'exit-minibuffer
    ;; If the previous completion completed to an element which fails
    ;; test-completion, then we shouldn't exit, but that should be rare.
-   (lambda () (minibuffer-message "Incomplete"))))
+   (lambda ()
+     (if minibuffer--require-match
+         (minibuffer-message "Incomplete")
+       ;; If a match is not required, exit after all.
+       (exit-minibuffer)))))
 (defun minibuffer-force-complete (&optional start end dont-cycle)
   "Complete the minibuffer to an exact match.
@@ -1464,6 +1468,9 @@ DONT-CYCLE tells the function not to setup cycling."
   "List of commands which cause an immediately following
 `minibuffer-complete-and-exit' to ask for extra confirmation.")
+(defvar minibuffer--require-match nil
+  "Value of REQUIRE-MATCH passed to `completing-read'.")
 (defun minibuffer-complete-and-exit ()
   "Exit if the minibuffer contains a valid completion.
 Otherwise, try to complete the minibuffer contents.  If
@@ -3748,8 +3755,10 @@ See `completing-read' for the meaning of the arguments."
   (let* ((minibuffer-completion-table collection)
          (minibuffer-completion-predicate predicate)
+         ;; FIXME: Remove/rename this var, see the next one.
          (minibuffer-completion-confirm (unless (eq require-match t)
+         (minibuffer--require-match require-match)
          (base-keymap (if require-match
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index a7be57e..670e763 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -1006,32 +1006,36 @@ See `bibtex-generate-autokey' for details."
   :type 'boolean)
 (defvar bibtex-autokey-transcriptions
-  '(;; language specific characters
-    ("\\\\aa" . "a")                      ; \aa           -> a
-    ("\\\\AA" . "A")                      ; \AA           -> A
-    ("\\\"a\\|\\\\\\\"a\\|\\\\ae" . "ae") ; "a,\"a,\ae    -> ae
-    ("\\\"A\\|\\\\\\\"A\\|\\\\AE" . "Ae") ; "A,\"A,\AE    -> Ae
-    ("\\\\i" . "i")                       ; \i            -> i
-    ("\\\\j" . "j")                       ; \j            -> j
-    ("\\\\l" . "l")                       ; \l            -> l
-    ("\\\\L" . "L")                       ; \L            -> L
-    ("\\\"o\\|\\\\\\\"o\\|\\\\o\\|\\\\oe" . "oe") ; "o,\"o,\o,\oe -> oe
-    ("\\\"O\\|\\\\\\\"O\\|\\\\O\\|\\\\OE" . "Oe") ; "O,\"O,\O,\OE -> Oe
-    ("\\\"s\\|\\\\\\\"s\\|\\\\3" . "ss")  ; "s,\"s,\3     -> ss
-    ("\\\"u\\|\\\\\\\"u" . "ue")          ; "u,\"u        -> ue
-    ("\\\"U\\|\\\\\\\"U" . "Ue")          ; "U,\"U        -> Ue
-    ;; accents
 . "")
-    ;; braces, quotes, concatenation.
-    ("[`'\"{}#]" . "")
-    ("\\\\-" . "")                        ; \-            ->
-    ;; spaces
-    ("\\\\?[ \t\n]+\\|~" . " "))
+  (nconc
+   (mapcar (lambda (a) (cons (regexp-opt (car a)) (cdr a)))
+           '(;; language specific characters
+             (("\\aa") . "a")                      ; \aa           -> a
+             (("\\AA") . "A")                      ; \AA           -> A
+             (("\"a" "\\\"a" "\\ae") . "ae")       ; "a,\"a,\ae    -> ae
+             (("\"A" "\\\"A" "\\AE") . "Ae")       ; "A,\"A,\AE    -> Ae
+             (("\\i") . "i")                       ; \i            -> i
+             (("\\j") . "j")                       ; \j            -> j
+             (("\\l") . "l")                       ; \l            -> l
+             (("\\L") . "L")                       ; \L            -> L
+             (("\"o" "\\\"o" "\\o" "\\oe") . "oe") ; "o,\"o,\o,\oe -> oe
+             (("\"O" "\\\"O" "\\O" "\\OE") . "Oe") ; "O,\"O,\O,\OE -> Oe
+             (("\"s" "\\\"s" "\\3") . "ss")        ; "s,\"s,\3     -> ss
+             (("\"u" "\\\"u") . "ue")              ; "u,\"u        -> ue
+             (("\"U" "\\\"U") . "Ue")              ; "U,\"U        -> Ue
+             ;; hyphen, accents
+             (("\\-" "\\`" "\\'" "\\^" "\\~" "\\=" "\\." "\\u" "\\v"
+               "\\H" "\\t" "\\c" "\\d" "\\b") . "")
+             ;; space
+             (("~") . " ")))
+   ;; more spaces
+   '(("[\s\t\n]*\\(?:\\\\\\)?[\s\t\n]+" . " ")
+     ;; braces, quotes, concatenation.
+     ("[`'\"{}#]" . "")))
   "Alist of (OLD-REGEXP . NEW-STRING) pairs.
-Used by the default values of `bibtex-autokey-name-change-strings' and
+Used as default values of `bibtex-autokey-name-change-strings' and
 `bibtex-autokey-titleword-change-strings'.  Defaults to translating some
 language specific characters to their ASCII transcriptions, and
-removing any character accents.")
+removing any accent characters.")
 (defcustom bibtex-autokey-name-change-strings
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index 7f87ee3..33f181b 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -2914,16 +2914,17 @@ WHERE is provided the cell and table at that location 
is reported."
 (defun table-generate-source (language &optional dest-buffer caption)
   "Generate source of the current table in the specified language.
 LANGUAGE is a symbol that specifies the language to describe the
-structure of the table.  It must be either `html', `latex' or `cals'.
-The resulted source text is inserted into DEST-BUFFER and the buffer
-object is returned.  When DEST-BUFFER is omitted or nil the default
-buffer specified in `table-dest-buffer-name' is used.  In this case
-the content of the default buffer is erased prior to the generation.
-When DEST-BUFFER is non-nil it is expected to be either a destination
-buffer or a name of the destination buffer.  In this case the
-generated result is inserted at the current point in the destination
-buffer and the previously existing contents in the buffer are
+structure of the table.  It must be either `html', `latex', `cals',
+`wiki', or `mediawiki'.
+The function inserts the resulting source text into DEST-BUFFER, and
+returns the buffer object.  When DEST-BUFFER is omitted or nil, the
+function uses the default buffer specified in `table-dest-buffer-name'.
+In this case, the function erases the default buffer prior to the
+source generation.
+When DEST-BUFFER is non-nil, it should be either a destination
+buffer or a name of the destination buffer.  In that case, the
+function inserts the generated result at point in the destination
+buffer, and leaves the previous contents of the buffer untouched.
 References used for this implementation:
diff --git a/lisp/window.el b/lisp/window.el
index bbd4e9b..5824b1c 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -9125,8 +9125,8 @@ accessible position."
               ;; wider than its frame's pixel width, its height
               ;; remains unaltered.
               (width (+ (car (window-text-pixel-size
-                              window (window-start) (point-max)
-                              (frame-pixel-width)
+                              window (window-start window) nil
+                              (frame-pixel-width (window-frame window))
                               ;; Add one line-height to assure that
                               ;; we're on the safe side.  This
                               ;; overshoots when the first line below
diff --git a/src/fontset.c b/src/fontset.c
index bca9452..c2bb8b2 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -367,8 +367,14 @@ fontset_add (Lisp_Object fontset, Lisp_Object range, 
Lisp_Object elt, Lisp_Objec
 static int
 fontset_compare_rfontdef (const void *val1, const void *val2)
-  return (RFONT_DEF_SCORE (*(Lisp_Object *) val1)
-         - RFONT_DEF_SCORE (*(Lisp_Object *) val2));
+  Lisp_Object v1 = *(Lisp_Object *) val1, v2 = *(Lisp_Object *) val2;
+  if (NILP (v1) && NILP (v2))
+    return 0;
+  else if (NILP (v1))
+    return INT_MIN;
+  else if (NILP (v2))
+    return INT_MAX;
+  return (RFONT_DEF_SCORE (v1) - RFONT_DEF_SCORE (v2));
 /* Update a cons cell which has this form:
@@ -400,6 +406,8 @@ reorder_font_vector (Lisp_Object font_group, struct font 
   for (i = 0; i < size; i++)
       Lisp_Object rfont_def = AREF (vec, i);
+      if (NILP (rfont_def))
+       continue;
       Lisp_Object font_def = RFONT_DEF_FONT_DEF (rfont_def);
       Lisp_Object font_spec = FONT_DEF_SPEC (font_def);
       int score = RFONT_DEF_SCORE (rfont_def) & 0xFF;
diff --git a/src/xdisp.c b/src/xdisp.c
index c2aa314..3c594b5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -31441,6 +31441,10 @@ show_mouse_face (Mouse_HLInfo *hlinfo, enum 
draw_glyphs_face draw)
   struct window *w = XWINDOW (hlinfo->mouse_face_window);
   struct frame *f = XFRAME (WINDOW_FRAME (w));
+  /* Don't bother doing anything if we are on a wrong frame.  */
+  if (f != hlinfo->mouse_face_mouse_frame)
+    return;
   if (/* If window is in the process of being destroyed, don't bother
         to do anything.  */
       w->current_matrix != NULL
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 4888e1d..0fece40 100644
--- a/test/lisp/emacs-lisp/rx-tests.el
+++ b/test/lisp/emacs-lisp/rx-tests.el
@@ -316,7 +316,9 @@
   (should (equal (rx (not (or (in "abc") (char "bcd"))))
   (should (equal (rx (or (not (in "abc")) (not (char "bcd"))))
-                 "[^bc]")))
+                 "[^bc]"))
+  (should (equal (rx (or "x" (? "yz")))
+                 "x\\|\\(?:yz\\)?")))
 (ert-deftest rx-def-in-charset-or ()
   (rx-let ((a (any "badc"))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]