Merge from origin/emacs-27

59f71d20ea (origin/emacs-27) Fix tar-mode reading the oldgnu Tar format
e3ec84fd7d Ensure mini-window is resized to show active minibuffer co...
450633f85a Fix mini-window resizing under resize-mini-windows = t
219d47893a (emacs-27) Fixes for makeinfo 4.13
4bbfd2b42f ; fix previous NEWS entry
81b697d106 Fix crash under -nw on macOS properly this time
9ce4207969 Revert "Check for GUI frame in ns_color_index_to_rgba"
732dcfc850 Ignore all color fonts when using XFT
aa0c679f48 Avoid unbounded growth of cl-random-state components (bug#...

# Conflicts:
#	etc/NEWS
#	src/nsterm.m
This commit is contained in:
Glenn Morris 2019-12-30 09:12:25 -08:00
commit 90083b7d78
10 changed files with 87 additions and 29 deletions

View file

@ -431,8 +431,7 @@ the build-time context. This also has the side-effect that the
@kindex local@r{, @code{defcustom} keyword}
If the @var{value} is @code{t}, mark @var{option} as automatically
buffer-local; if the value is @code{permanent}, also set @var{option}s
@code{permanent-local} property to @code{t}. @xref {Creating
Buffer-Local}.
@code{permanent-local} property to @code{t}. @xref{Creating Buffer-Local}.
@item :risky @var{value}
@kindex risky@r{, @code{defcustom} keyword}

View file

@ -972,7 +972,7 @@ The name of the variable to be used by Lisp programs.
The name of the variable in the C sources.
@item doc
The documentation for the variable, as a C
comment. @xref{Documentation Basics} for more details.
comment. @xref{Documentation Basics}, for more details.
@end table
By convention, when defining variables of a ``native'' type
@ -1651,7 +1651,7 @@ little-endian magnitude of the return value.
The following example uses the GNU Multiprecision Library (GMP) to
calculate the next probable prime after a given integer.
@xref{Top,,,gmp} for a general overview of GMP, and @pxref{Integer
@xref{Top,,,gmp}, for a general overview of GMP, and @pxref{Integer
Import and Export,,,gmp} for how to convert the @code{magnitude} array
to and from GMP @code{mpz_t} values.

View file

@ -296,6 +296,14 @@ To get the old, less-secure behavior, you can set the
*** When run by root, emacsclient no longer connects to non-root sockets.
(Instead you can use Tramp methods to run root commands in a non-root Emacs.)
---
** 'xft-ignore-color-fonts' now ignores even more color fonts.
There are color fonts that managed to bypass the existing checks,
causing XFT crashes, they are now filtered out. Setting
'xft-ignore-color-fonts' to nil removes those checks, which might
require setting 'face-ignored-fonts' to filter out problematic fonts.
Known problematic fonts are "Noto Color Emoji" and "Emoji One".
+++
** New user option 'what-cursor-show-names'.
When non-nil, 'what-cursor-position' will show the name of the character

View file

@ -469,7 +469,7 @@ Optional second arg STATE is a random-state object."
(while (< (setq i (1+ i)) 200) (cl-random 2 state))))
(let* ((i (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-i state)))
(j (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-j state)))
(n (logand 8388607 (aset vec i (- (aref vec i) (aref vec j))))))
(n (aset vec i (logand 8388607 (- (aref vec i) (aref vec j))))))
(if (integerp lim)
(if (<= lim 512) (% n lim)
(if (> lim 8388607) (setq n (+ (ash n 9) (cl-random 512 state))))

View file

@ -223,10 +223,14 @@ Preserve the modified states of the buffers and set `buffer-swapped-with'."
"Round S up to the next multiple of 512."
(ash (ash (+ s 511) -9) 9))
(defun tar-header-block-tokenize (pos coding)
(defun tar-header-block-tokenize (pos coding &optional disable-slash)
"Return a `tar-header' structure.
This is a list of name, mode, uid, gid, size,
write-date, checksum, link-type, and link-name."
write-date, checksum, link-type, and link-name.
CODING is our best guess for decoding non-ASCII file names.
DISABLE-SLASH, if non-nil, means don't decide an entry is a directory
based on the trailing slash, only based on the \"link-type\" field
of the file header. This is used for \"old GNU\" Tar format."
(if (> (+ pos 512) (point-max)) (error "Malformed Tar header"))
(cl-assert (zerop (mod (- pos (point-min)) 512)))
(cl-assert (not enable-multibyte-characters))
@ -272,7 +276,7 @@ write-date, checksum, link-type, and link-name."
(decode-coding-string name coding)
linkname
(decode-coding-string linkname coding))
(if (and (null link-p) (string-match "/\\'" name))
(if (and (null link-p) (null disable-slash) (string-match "/\\'" name))
(setq link-p 5)) ; directory
(if (and (equal name "././@LongLink")
@ -283,12 +287,23 @@ write-date, checksum, link-type, and link-name."
;; This is a GNU Tar long-file-name header.
(let* ((size (tar-parse-octal-integer
string tar-size-offset tar-time-offset))
;; -1 so as to strip the terminating 0 byte.
;; The long name is in the next 512-byte block.
;; We've already moved POS there, when we computed
;; STRING above.
(name (decode-coding-string
;; -1 so as to strip the terminating 0 byte.
(buffer-substring pos (+ pos size -1)) coding))
;; Tokenize the header of the _real_ file entry,
;; which is further 512 bytes into the archive.
(descriptor (tar-header-block-tokenize
(+ pos (tar-roundup-512 size))
coding)))
(+ pos (tar-roundup-512 size)) coding
;; Don't intuit directories from
;; the trailing slash, because the
;; truncated name might by chance end
;; in a slash.
'ignore-trailing-slash)))
;; Fix the descriptor of the real file entry by using
;; the information from the long name entry.
(cond
((eq link-p (- ?L ?0)) ;GNUTYPE_LONGNAME.
(setf (tar-header-name descriptor) name))
@ -296,6 +311,10 @@ write-date, checksum, link-type, and link-name."
(setf (tar-header-link-name descriptor) name))
(t
(message "Unrecognized GNU Tar @LongLink format")))
;; Fix the "link-type" attribute, based on the long name.
(if (and (null (tar-header-link-type descriptor))
(string-match "/\\'" name))
(setf (tar-header-link-type descriptor) 5)) ; directory
(setf (tar-header-header-start descriptor)
(copy-marker (- pos 512) t))
descriptor)

View file

@ -123,7 +123,9 @@ typedef HDC Emacs_Pix_Context;
#ifdef HAVE_NS
#include "nsgui.h"
#define FACE_COLOR_TO_PIXEL(face_color, frame) ns_color_index_to_rgba(face_color, frame)
#define FACE_COLOR_TO_PIXEL(face_color, frame) (FRAME_NS_P (frame) \
? ns_color_index_to_rgba (face_color, frame) \
: face_color)
/* Following typedef needed to accommodate the MSDOS port, believe it or not. */
typedef struct ns_display_info Display_Info;
typedef Emacs_Pixmap Emacs_Pix_Container;

View file

@ -864,6 +864,9 @@ ftfont_list (struct frame *f, Lisp_Object spec)
#endif /* FC_CAPABILITY */
#ifdef FC_FONTFORMAT
FC_FONTFORMAT,
#endif
#if defined HAVE_XFT && defined FC_COLOR
FC_COLOR,
#endif
NULL);
if (! objset)
@ -904,7 +907,19 @@ ftfont_list (struct frame *f, Lisp_Object spec)
for (i = 0; i < fontset->nfont; i++)
{
Lisp_Object entity;
#if defined HAVE_XFT && defined FC_COLOR
{
/* Some fonts, notably NotoColorEmoji, have an FC_COLOR value
that's neither FcTrue nor FcFalse, which means FcFontList
returns them even when it shouldn't really do so, so we
need to manually skip them here (Bug#37786). */
FcBool b;
if (Vxft_ignore_color_fonts
&& FcPatternGetBool (fontset->fonts[i], FC_COLOR, 0, &b)
== FcResultMatch && b != FcFalse)
continue;
}
#endif
if (spacing >= 0)
{
int this;

View file

@ -1318,6 +1318,11 @@ command_loop_1 (void)
message1 (0);
safe_run_hooks (Qecho_area_clear_hook);
/* We cleared the echo area, and the minibuffer will now
show, so resize the mini-window in case the minibuffer
needs more or less space than the echo area. */
resize_mini_window (XWINDOW (minibuf_window), false);
unbind_to (count, Qnil);
/* If a C-g came in before, treat it as input now. */
@ -2989,6 +2994,16 @@ read_char (int commandflag, Lisp_Object map,
{
safe_run_hooks (Qecho_area_clear_hook);
clear_message (1, 0);
/* If we were showing the echo-area message on top of an
active minibuffer, resize the mini-window, since the
minibuffer may need more or less space than the echo area
we've just wiped. */
if (minibuf_level
&& EQ (minibuf_window, echo_area_window)
/* The case where minibuffer-message-timeout is a number
was already handled near the beginning of command_loop_1. */
&& !NUMBERP (Vminibuffer_message_timeout))
resize_mini_window (XWINDOW (minibuf_window), false);
}
else if (FUNCTIONP (Vclear_message_function))
clear_message (1, 0);

View file

@ -2290,26 +2290,21 @@ so some key presses (TAB) are swallowed by the system. */
/* Convert an index into the color table into an RGBA value. Used in
xdisp.c:extend_face_to_end_of_line when comparing faces and frame
color values. No-op on non-gui frames. */
color values. */
unsigned long
ns_color_index_to_rgba(int idx, struct frame *f)
{
if (FRAME_DISPLAY_INFO (f))
{
NSColor *col;
col = ns_lookup_indexed_color (idx, f);
NSColor *col;
col = ns_lookup_indexed_color (idx, f);
EmacsCGFloat r, g, b, a;
[col getRed: &r green: &g blue: &b alpha: &a];
EmacsCGFloat r, g, b, a;
[col getRed: &r green: &g blue: &b alpha: &a];
return ARGB_TO_ULONG((unsigned long) (a * 255),
(unsigned long) (r * 255),
(unsigned long) (g * 255),
(unsigned long) (b * 255));
}
else
return idx;
return ARGB_TO_ULONG((unsigned long) (a * 255),
(unsigned long) (r * 255),
(unsigned long) (g * 255),
(unsigned long) (b * 255));
}
void
@ -2330,7 +2325,7 @@ so some key presses (TAB) are swallowed by the system. */
if (setPixel == YES)
color_def->pixel
= ARGB_TO_ULONG((unsigned long) (a * 255),
(unsigned long) (r * 255),
(unsigned long) (r * 255),
(unsigned long) (g * 255),
(unsigned long) (b * 255));
}

View file

@ -5229,10 +5229,15 @@ grow_mini_window (struct window *w, int delta)
{
struct frame *f = XFRAME (w->frame);
int old_height = window_body_height (w, true);
int min_height = FRAME_LINE_HEIGHT (f);
eassert (MINI_WINDOW_P (w));
if ((delta != 0) && (old_height + delta >= FRAME_LINE_HEIGHT (f)))
/* Never shrink mini-window to less than its minimum height. */
if (old_height + delta < min_height)
delta = old_height > min_height ? min_height - old_height : 0;
if (delta != 0)
{
Lisp_Object root = FRAME_ROOT_WINDOW (f);
struct window *r = XWINDOW (root);