Commit a13d1f95 authored by Glenn Morris's avatar Glenn Morris

Merge from origin/emacs-27

0304f530 (origin/emacs-27) doc/misc/org.texi: Fix @dircategory
027da652 Fix display of minibuffer prompt in ido.el
5a21aaff rx: Use longest match for all-string 'or' forms (bug#37659)
2b12c2b6 Make sure not to mark directories
ff4ed4a0 ; Add a TODO
3a5129a1 vc-hg-dir-status-files: Fix when DIR is not repository root

# Conflicts:
#	etc/NEWS
parents 70d62e0c 0304f530
Pipeline #4783 passed with stage
in 59 minutes
......@@ -319,7 +319,10 @@ the echo area. See also @code{clear-message-function} that can be
used to clear the message displayed by this function.
The default value is the function that displays the message at the end
of the minibuffer when the minibuffer is active.
of the minibuffer when the minibuffer is active. However, if the text
shown in the active minibuffer has the @code{minibuffer-message} text
property (@pxref{Special Properties}) on some character, the message
will be displayed before the first character having that property.
@end defvar
@defvar clear-message-function
......@@ -332,8 +335,8 @@ after displaying an echo-area message. The function is expected to
clear the message displayed by its counterpart function specified by
@code{set-message-function}.
The default value is the function that clears the message displayed at
the end of the minibuffer when the minibuffer is active.
The default value is the function that clears the message displayed in
an active minibuffer.
@end defvar
@defvar inhibit-message
......
......@@ -1080,7 +1080,10 @@ Corresponding string regexp: @samp{@var{A}@var{B}@dots{}}
@cindex @code{or} in rx
@itemx @code{(| @var{rx}@dots{})}
@cindex @code{|} in rx
Match exactly one of the @var{rx}s, trying from left to right.
Match exactly one of the @var{rx}s.
If all arguments are string literals, the longest possible match
will always be used. Otherwise, either the longest match or the
first (in left-to-right order) will be used.
Without arguments, the expression will not match anything at all.@*
Corresponding string regexp: @samp{@var{A}\|@var{B}\|@dots{}}.
......
......@@ -3741,6 +3741,16 @@ single glyph composed from components. But the value of the property
itself is completely internal to Emacs and should not be manipulated
directly by, for instance, @code{put-text-property}.
@item minibuffer-message
@kindex minibuffer-message @r{(text property)}
This text property tells where to display temporary messages in an
active minibuffer. Specifically, the first character of the
minibuffer text which has this property will have the temporary
message displayed before it. The default is to display temporary
messages at the end of the minibuffer text. This text property is
used by the function that is the default value of
@code{set-message-function} (@pxref{Displaying Messages}).
@end table
@defvar inhibit-point-motion-hooks
......
......@@ -31,7 +31,7 @@ modify this GNU manual.''
@end quotation
@end copying
@dircategory Emacs
@dircategory Emacs editing modes
@direntry
* Org Mode: (org). Outline-based notes management and organizer.
@end direntry
......
......@@ -3590,6 +3590,12 @@ in other packages are now obsolete aliases of 'xor'.
Setting this on the first character of a help string disables
conversions via 'substitute-command-keys'.
+++
** New text property 'minibuffer-message'.
Setting this on a character of the minibuffer text will display the
temporary echo messages before that character, when messages need to
be displayed while minibuffer is active.
+++
** 'undo' can be made to ignore the active region for a command
by setting 'undo-inhibit-region' symbol property of that command to
......
......@@ -290,7 +290,7 @@ Return (REGEXP . PRECEDENCE)."
((null (cdr body)) ; Single item.
(rx--translate (car body)))
((rx--every #'stringp body) ; All strings.
(cons (list (regexp-opt body nil t))
(cons (list (regexp-opt body nil))
t))
((rx--every #'rx--charset-p body) ; All charsets.
(rx--translate-union nil body))
......
......@@ -4492,8 +4492,6 @@ For details of keybindings, see `ido-find-file'."
(ido-tidy))
(throw 'ido contents))))
(defvar ido--overlay nil)
(defun ido-exhibit ()
"Post command hook for Ido."
;; Find matching files and display a list in the minibuffer.
......@@ -4728,16 +4726,13 @@ For details of keybindings, see `ido-find-file'."
(let ((inf (ido-completions contents)))
(setq ido-show-confirm-message nil)
(ido-trace "inf" inf)
(when ido--overlay
(delete-overlay ido--overlay))
(let ((o (make-overlay (point-max) (point-max) nil t t)))
(when (> (length inf) 0)
;; For hacks that redefine ido-completions function (bug#39379)
(when (eq (aref inf 0) ?\n)
(setq inf (concat " " inf)))
(put-text-property 0 1 'cursor t inf))
(overlay-put o 'after-string inf)
(setq ido--overlay o)))
(let ((pos (point)))
(insert inf)
(if (< pos (point-max))
;; Tell set-minibuffer-message where to display the
;; overlay with temporary messages.
(put-text-property pos (1+ pos) 'minibuffer-message t)))
)
))))
(defun ido-completions (name)
......
......@@ -763,8 +763,21 @@ and `clear-minibuffer-message' called automatically via
(defvar minibuffer-message-timer nil)
(defvar minibuffer-message-overlay nil)
(defun minibuffer--message-overlay-pos ()
"Return position where `set-minibuffer-message' shall put message overlay."
;; Starting from point, look for non-nil 'minibuffer-message'
;; property, and return its position. If none found, return the EOB
;; position.
(let* ((pt (point))
(propval (get-text-property pt 'minibuffer-message)))
(if propval pt
(next-single-property-change pt 'minibuffer-message nil (point-max)))))
(defun set-minibuffer-message (message)
"Temporarily display MESSAGE at the end of the minibuffer.
If some part of the minibuffer text has the `minibuffer-message' property,
the message will be displayed before the first such character, instead of
at the end of the minibuffer.
The text is displayed for `minibuffer-message-clear-timeout' seconds
\(if the value is a number), or until the next input event arrives,
whichever comes first.
......@@ -784,8 +797,9 @@ via `set-message-function'."
(clear-minibuffer-message)
(setq minibuffer-message-overlay
(make-overlay (point-max) (point-max) nil t t))
(let ((ovpos (minibuffer--message-overlay-pos)))
(setq minibuffer-message-overlay
(make-overlay ovpos ovpos nil t t)))
(unless (zerop (length message))
;; The current C cursor code doesn't know to use the overlay's
;; marker's stickiness to figure out whether to place the cursor
......
......@@ -649,7 +649,7 @@ line."
(defun vc-dir-mark-all-files (arg)
"Mark all files with the same state as the current one.
With a prefix argument mark all files.
With a prefix argument mark all files (not directories).
If the current entry is a directory, mark all child files.
The commands operate on files that are on the same state.
......@@ -670,7 +670,8 @@ share the same state."
vc-ewoc)
(ewoc-map
(lambda (filearg)
(unless (vc-dir-fileinfo->marked filearg)
(unless (or (vc-dir-fileinfo->directory filearg)
(vc-dir-fileinfo->marked filearg))
(setf (vc-dir-fileinfo->marked filearg) t)
t))
vc-ewoc))
......
......@@ -1352,14 +1352,17 @@ REV is the revision to check out into WORKFILE."
;; Follows vc-exec-after.
(declare-function vc-set-async-update "vc-dispatcher" (process-buffer))
(defun vc-hg-dir-status-files (_dir files update-function)
(defun vc-hg-dir-status-files (dir files update-function)
;; XXX: We can't pass DIR directly to 'hg status' because that
;; returns all ignored files if FILES is non-nil (bug#22481).
;; If honoring DIR ever becomes important, try using '-I DIR/'.
(vc-hg-command (current-buffer) 'async files
"status"
(concat "-mardu" (if files "i"))
"-C")
(let ((default-directory dir))
;; TODO: Use "--config 'status.relative=1'" instead of "re:"
;; when we're allowed to depend on Mercurial 4.2+
;; (it's a bit faster).
(vc-hg-command (current-buffer) 'async files
"status" "re:" "-I" "."
(concat "-mardu" (if files "i"))
"-C"))
(vc-run-delayed
(vc-hg-after-dir-status update-function)))
......
......@@ -43,7 +43,7 @@
(should (equal (rx (or "ab" (| "c" nonl) "de"))
"ab\\|c\\|.\\|de"))
(should (equal (rx (or "ab" "abc" "a"))
"\\(?:ab\\|abc\\|a\\)"))
"\\(?:a\\(?:bc?\\)?\\)"))
(should (equal (rx (| nonl "a") (| "b" blank))
"\\(?:.\\|a\\)\\(?:b\\|[[:blank:]]\\)"))
(should (equal (rx (|))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment