diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 747ebf72d87..7a6627caa9b 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -2490,7 +2490,9 @@ argument. The optional argument @var{all-frames} has the same meaning as in @code{next-window}, like a @code{nil} @var{minibuf} argument to -@code{next-window}. +@code{next-window}. When called interactively, @var{all-frames} is +always @code{nil}, so only windows on the selected frame can be +selected. If the @code{other-window} parameter of the selected window is a function, and @code{ignore-window-parameters} is @code{nil}, that diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 85e94f0f91d..2c80231f18a 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -21168,6 +21168,29 @@ You may also consider doing something similar with @code{expunge}. If you say stuff like @code{[^abcd]*}, you may get unexpected results. That will match newlines, which might lead to, well, The Unknown. Say @code{[^abcd\n]*} instead. + +@item Continuation lines when scoring on other headers +When scoring on other headers using the @code{Head} or @code{All} match +keys and regexp matching, your regular expression must take into account +header continuation lines. For example, this naive attempt to match +messages including a particular address in the @code{To} field: + +@lisp +("head" "^To: .*\\bspwhitton@@spwhitton\\.name\\b" r) +@end lisp + +will fail to match a message with a @code{To} header like this: + +@example +To: A long description of the Emacs devel list , + spwhitton@@spwhitton.name, 12345@@debbugs.gnu.org +@end example + +You can handle this issue with a regexp of this form: + +@lisp +("head" "^To: .*\\(?:\n[\s\t].*\\)*\\bspwhitton@@spwhitton\\.name\\b" r) +@end lisp @end table diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 2d0a5870be9..5da83fefeb1 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -2678,6 +2678,18 @@ terminals, for example, like this: This disables 'auto-composition-mode' on frames that display on terminals of this type. +** Screen readers get confused about character position + +The Emacs display code sometimes emits TAB characters purely for motion +on the terminal, even when those characters do not exist in the buffer. +This can confuse screen reader software under certain terminal emulators +(rxvt and vte have been cited). Switching to destructive tabs by running + + stty -tabs + +in the terminal before starting Emacs may mitigate this. See also the +discussion in Bug#78474 . + * Runtime problems specific to individual Unix variants ** GNU/Linux diff --git a/lisp/emacs-lisp/loaddefs-gen.el b/lisp/emacs-lisp/loaddefs-gen.el index 998a7e4ed3d..a8500759cf8 100644 --- a/lisp/emacs-lisp/loaddefs-gen.el +++ b/lisp/emacs-lisp/loaddefs-gen.el @@ -557,7 +557,7 @@ If COMPILE, don't include a \"don't compile\" cookie." file 'loaddefs-generate :title (concat "automatically extracted " (or type "autoloads")) :commentary (and (string-match "/lisp/loaddefs\\.el\\'" file) - "This file will be copied to ldefs-boot.el and checked in periodically.")) + "This file will be copied to ldefs-boot.el and checked in periodically. Note: When checking in ldefs-boot.el, don't include changes to any other files in the commit.")) (when lp (insert "(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))\n\n")) diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index 11efb428799..def51b0c0cb 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -568,7 +568,7 @@ ends in a newline." (eshell-output-object object handle) (when (and eshell-ensure-newline-p (not (and (stringp object) - (string-suffix-p object "\n")))) + (string-suffix-p "\n" object)))) (eshell-maybe-output-newline handle))) (defsubst eshell-print-maybe-n (object) diff --git a/lisp/faces.el b/lisp/faces.el index cf81013118b..cd4086a12f2 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -95,9 +95,10 @@ a font height that isn't optimal." (internal-set-font-selection-order value))) -;; In the absence of Fontconfig support, Monospace and Sans Serif are -;; unavailable, and we fall back on the courier and helv families, -;; which are generally available. +;; We use Fontconfig if we have it. This list is an alternative +;; mechanism to fall back to in the absence of Fontconfig. +;; In that situation, Monospace and Sans Serif are unavailable, and we +;; turn to the courier and helv families, which are generally available. (defcustom face-font-family-alternatives '(("Monospace" "Cascadia Code" "Lucida Console" "courier" "fixed") @@ -2461,6 +2462,10 @@ If you set `term-file-prefix' to nil, this function does nothing." "Basic underlined face." :group 'basic-faces) +;; Ideally, in Emacs's default look, we'd like the default and +;; fixed-pitch faces to use two different monospace typefaces so that +;; they're visually distinct. At present, that's achieved on MS-Windows +;; and macOS, but not on platforms that use Fontconfig. See bug#79083. (defface fixed-pitch '((t :family "Monospace")) "The basic fixed-pitch face." diff --git a/lisp/international/quail.el b/lisp/international/quail.el index 2b66a0bc0f7..20649082941 100644 --- a/lisp/international/quail.el +++ b/lisp/international/quail.el @@ -835,6 +835,8 @@ The format of KBD-LAYOUT is the same as `quail-keyboard-layout'." (format "\t%c\t" upper)) (string upper)))) (insert (bidi-string-mark-left-to-right lower) + ;; This invisible space is here to prevent the display + ;; engine from composing these two characters on display. (propertize " " 'invisible t) (bidi-string-mark-left-to-right upper)) (if (< (string-width upper) 2) diff --git a/lisp/window.el b/lisp/window.el index 0af6d7bd644..1369216c59a 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4017,7 +4017,8 @@ COUNT and ALL-FRAMES. Otherwise, do not return a window for which This function uses `next-window' for finding the window to select. The argument ALL-FRAMES has the same meaning as in `next-window', but the MINIBUF argument of `next-window' is -always effectively nil." +always effectively nil. Interactively, ALL-FRAMES is always +nil, which considers all windows on the selected frame." (interactive "p\ni\np") (let* ((window (selected-window)) (original-window window) diff --git a/test/lisp/eshell/esh-io-tests.el b/test/lisp/eshell/esh-io-tests.el index d95b52297c7..87fc32390d2 100644 --- a/test/lisp/eshell/esh-io-tests.el +++ b/test/lisp/eshell/esh-io-tests.el @@ -40,6 +40,28 @@ ;;; Tests: + +;; Newlines + +(ert-deftest esh-io-test/output-newline/add-newline () + "Ensure we add a newline when writing a string to stdout." + (with-temp-eshell + (eshell-match-command-output "(concat \"hello\")" "\\`hello\n\\'"))) + +(ert-deftest esh-io-test/output-newline/no-newline () + "Ensure we don't add a newline when writing a string to a buffer." + (eshell-with-temp-buffer bufname "" + (with-temp-eshell + (eshell-match-command-output + (format "(concat \"hello\") > #<%s>" bufname) + "\\`\\'")) + (should (equal (buffer-string) "hello")))) + +(ert-deftest esh-io-test/output-newline/no-extra-newline () + "Ensure we don't add an extra newline when writing to stdout." + (with-temp-eshell + (eshell-match-command-output "(concat \"hello\n\")" "\\`hello\n\\'"))) + ;; Basic redirection