Merge from origin/emacs-29

842dbf500e * Fix `batch-byte+native-compile' target directory.
8dbd5aa1ee Avoid crashes in 'display_count_lines' when current buffe...
47b4f4cf78 ; * doc/emacs/mini.texi (Completion Commands): Fix a typo...
78999d5213 Update csharp tree-sitter support due to upstream changes
556cb01b48 Substitute command keys in 'ielm-header' at use time
99367078e5 ; * etc/PROBLEMS: Add entry about XIM problems (bug#65205).
03e897c08f Fix rare crashes in redisplay due to problems with fontsets
b1ba06a1e4 Fix a typo in 'leuven-dark-theme.el'
e80a9dcabb ; * admin/git-bisect-start: Update failing commits
9091f42784 ; * admin/git-bisect-start: Update failing commits
344ac529ca ; * etc/PROBLEMS: Fix typo.
bccf848b26 Adapt Tramp test
71bc060e40 Properly expand the JSX indentation rules in 'js-ts-mode'
889cfb42ed * Add `emacs-lisp-native-compile' to easy-menu.
4535aafa8a * lisp/progmodes/elisp-mode.el (emacs-lisp-mode-menu): Si...
173af0cad5 * Introduce `emacs-lisp-native-compile'.
063d7d89d7 Fix the -x switch in non-X builds
5a7fb0b39b Document that `set-mouse-color' does not work everywhere
d06fc72496 ; * doc/emacs/dired.texi (Misc Dired Features): Fix last ...
97b8ac376b Fix the effects and documentation of 'dired-free-space'
75c72e59f6 ; Fix typo
6d11b7b300 Fix cross-reference to eldoc in eglot manual
913e50aba6 Add native-compilation to Emacs Lisp mode menu
b93107c20b Fix emacs-lisp-native-compile-and-load eln target directo...
This commit is contained in:
Eli Zaretskii 2023-08-12 13:50:38 -04:00
commit 3fc9793a26
18 changed files with 150 additions and 102 deletions

View file

@ -82,7 +82,7 @@ done
# SKIP-BRANCH 58cc931e92ece70c3e64131ee12a799d65409100
## The list below is the exhaustive list of all commits between Dec 1
## 2016 and Jul 8 2023 on which building Emacs with the default
## 2016 and Aug 10 2023 on which building Emacs with the default
## options, on a GNU/Linux computer and with GCC, fails. It is
## possible (though unlikely) that building Emacs with non-default
## options, with other compilers, or on other platforms, would succeed
@ -1757,3 +1757,22 @@ $REAL_GIT bisect skip $(cat $0 | grep '^# SKIP-SINGLE ' | sed 's/^# SKIP-SINGLE
# SKIP-SINGLE 0a35c991c19a6dd0a707f2baa868f8989242c3ab
# SKIP-SINGLE e2ee646b162b87e832c8032b9d90577bd21f21f8
# SKIP-SINGLE 35d2fe176cb438d55552cacbdf25c3692c054d51
# SKIP-SINGLE de3d8ae71b43f80244c4d813ff1503b8551f0026
# SKIP-SINGLE a496509cedb17109d0e6297a74e2ff8ed526333c
# SKIP-SINGLE a6a586ffc1bd302e30d80cb88b06e1e7e1573f63
# SKIP-SINGLE f5d142f66370b29af58360faeea90d1112756bc5
# SKIP-SINGLE 46e8ab23eaeb5e453042f430fc016cf9ffc2ac37
# SKIP-SINGLE eb72569dbef91862a765cd4d9f380220244b4549
# SKIP-SINGLE c4b77b82decb757af0aff1b7420203fa0805b483
# SKIP-SINGLE 0ee01457a84e031d490553949a2deacd4865a5bb
# SKIP-SINGLE 6c68d9bd3a18c74384fc764179fd92a024d6c35d
# SKIP-SINGLE a46e231a5f27c46933cc53865cee452ad1a0c0d3
# SKIP-SINGLE c045d5322c2c1658f215bf59d431fcc8f96ffc12
# SKIP-SINGLE dabb713eb05aff62deb6872a3498327934f18c8d
# SKIP-SINGLE b8c05636ca4b28a7adc62e82a5fed528b402396d
# SKIP-SINGLE e72afa9dbf92f45d00c87c90ead364d52f73024f
# SKIP-SINGLE 9d3aacedf0c217af207d39e390f376914160396b
# SKIP-SINGLE 6bdbb4cbfc2deb7d3a02e1428768e101f3dbd265
# SKIP-SINGLE 2752573dfb76873dbe783e89a1fbf01d157c54e3
# SKIP-SINGLE 62e990db7a2fad16756e019b331c28ad5a5a89fe
# SKIP-SINGLE 6253e7e74249c7cdfa86723f0b91a1d207cb143e

View file

@ -1739,12 +1739,17 @@ rotation is lossless, and uses an external utility called
@section Other Dired Features
@vindex dired-free-space
By default, Dired will display the available space on the disk in
the first line. This is the @code{first} value of the
@code{dired-free-space} variable. If you set this to
@code{separate} instead, Dired will display this on a separate line
(including the space the files in the current directory takes). If
you set this to @code{nil}, the free space isn't displayed at all.
By default, Dired displays the available space on the directory's
disk on the first line of that directory's listing, following the
directory name. You can control this display by customizing the
variable @code{dired-free-space}. Its default value is @code{first},
which produces the available space after the directory name. If you
customize it to the value @code{separate} instead, Dired will display
the disk space information on a separate line, following the line with
the directory name, and will include in that line the space used by
the files in the current directory as well as the available disk
space. If you set this to @code{nil}, the available disk space
information will not be displayed at all.
@kindex + @r{(Dired)}
@findex dired-create-directory

View file

@ -411,8 +411,8 @@ the minibuffer.
@itemx @key{prior}
Typing @kbd{M-v}, while in the minibuffer, selects the window showing
the completion list (@code{switch-to-completions}). This paves the
way for also using the commands below. @key{PageUp}, @key{prior} and
@kbd{M-g M-c} does the same. You can also select the window in other
way for using the commands below. @key{PageUp}, @key{prior} and
@kbd{M-g M-c} do the same. You can also select the window in other
ways (@pxref{Windows}).
@findex choose-completion

View file

@ -406,9 +406,10 @@ provides:
At-point documentation: when point is at or near a symbol or an
identifier, the information about the symbol/identifier, such as the
signature of a function or class method and server-generated
diagnostics, is made available via the ElDoc package (@pxref{Lisp
Doc,,, emacs, GNU Emacs Manual}). This allows major modes to provide
extensive help and documentation about the program identifiers.
diagnostics, is made available via the ElDoc package
(@pxref{Programming Language Doc,,, emacs, GNU Emacs Manual}). This
allows major modes to provide extensive help and documentation about
the program identifiers.
@item
On-the-fly diagnostic annotations with server-suggested fixes, via the

View file

@ -516,7 +516,7 @@ directory copy is ineffective.
This is due to an arbitrary limit in certain versions of awk.
The solution is to use gawk (GNU awk).
*** Saving a file encrypted with GnuPG via EasyPG hangs
*** Saving a file encrypted with GnuPG via EasyPG hangs.
This is known to happen with GnuPG v2.4.1. The only known workaround
is to downgrade to a version of GnuPG older than 2.4.1 (or, in the
@ -575,6 +575,20 @@ This can happen with CVS versions 1.12.8 and 1.12.9. Upgrade to CVS
** Miscellaneous problems
*** 'set-mouse-color' and the '-ms' command line argument do not work.
Systems where the default cursors are not simple 1 bit-per-pixel
bitmaps usually forbid recoloring the cursor, since it is unclear
which colors should replace those already present within each cursor
image. For example, 'set-mouse-color' and '-ms' have no function on X
systems with GNOME, KDE, and other recent desktop environments
employing cursor images containing colors and partial transparency.
Changing the cursor color is also impossible on MS-Windows and PGTK
systems. In the former case, it is because the prerequisite code has
yet to be written. In the latter, it is because GTK does not provide
for changing the color of cursor images.
*** Display artifacts on GUI frames on X-based systems.
This is known to be caused by using double-buffering (which is enabled
@ -1163,43 +1177,6 @@ do anything about it.
** International characters aren't displayed under X.
*** Missing X fonts
XFree86 4 contains many fonts in iso10646-1 encoding which have
minimal character repertoires (whereas the encoding part of the font
name is meant to be a reasonable indication of the repertoire
according to the XLFD spec). Emacs may choose one of these to display
characters from the mule-unicode charsets and then typically won't be
able to find the glyphs to display many characters. (Check with C-u
C-x = .) To avoid this, you may need to use a fontset which sets the
font for the mule-unicode sets explicitly. E.g. to use GNU unifont,
include in the fontset spec:
mule-unicode-2500-33ff:-gnu-unifont-*-iso10646-1,\
mule-unicode-e000-ffff:-gnu-unifont-*-iso10646-1,\
mule-unicode-0100-24ff:-gnu-unifont-*-iso10646-1
** The UTF-8/16/7 coding systems don't encode CJK (Far Eastern) characters.
Emacs directly supports the Unicode BMP whose code points are in the
ranges 0000-33ff and e000-ffff, and indirectly supports the parts of
CJK characters belonging to these legacy charsets:
GB2312, Big5, JISX0208, JISX0212, JISX0213-1, JISX0213-2, KSC5601
The latter support is done in Utf-Translate-Cjk mode (turned on by
default). Which Unicode CJK characters are decoded into which Emacs
charset is decided by the current language environment. For instance,
in Chinese-GB, most of them are decoded into chinese-gb2312.
If you read UTF-8 data with code points outside these ranges, the
characters appear in the buffer as raw bytes of the original UTF-8
(composed into a single quasi-character) and they will be written back
correctly as UTF-8, assuming you don't break the composed sequences.
If you read such characters from UTF-16 or UTF-7 data, they are
substituted with the Unicode 'replacement character', and you lose
information.
** Accented ISO-8859-1 characters are displayed as | or _.
Try other font set sizes (S-mouse-1). If the problem persists with
@ -1237,6 +1214,16 @@ In your ~/.Xresources file, then run
And restart Emacs.
** Emacs hangs when using XIM
This is due to an old bug in the implementation of the X protocol's
XIM transport: when an input method crashes for some reason, Xlib
cannot recover. Emacs cannot do anything about this except wait for
the I-Bux developers to fix their crashes. You can work around these
problems by disabling XIM in your X resources:
Emacs.useXIM: false
** On Haiku, BeCJK doesn't work properly with Emacs
Some popular Haiku input methods such BeCJK are known to behave badly

View file

@ -95,7 +95,7 @@ CONTROL can be a number, nil, or t. When t, use DEFAULT-HEIGHT."
;;;###theme-autoload
(deftheme leuven-dark
"Face colors with a light background.
"Face colors with a dark background.
Basic, Font Lock, Isearch, Gnus, Message, Org mode, Diff, Ediff,
Flyspell, Semantic, and Ansi-Color faces are included -- and much
more..."

View file

@ -218,14 +218,19 @@ If t, they are marked if and as the files linked to were marked.
If a character, new links are unconditionally marked with that character.")
(defcustom dired-free-space 'first
"Whether and how to display the amount of free disk space in Dired buffers.
"Whether and how to display the disk space usage info in Dired buffers.
If nil, don't display.
If `separate', display on a separate line (along with used count).
If `first', display only the free disk space on the first line,
following the directory name."
:type '(choice (const :tag "On a separate line" separate)
(const :tag "On the first line, after directory name" first)
(const :tag "Don't display" nil))
If `separate', display on a separate line, and include both the used
and the free disk space.
If `first', the default, display only the free disk space on the first
line, following the directory name."
:type '(choice (const
:tag
"On separate line, display both used and free space" separate)
(const
:tag
"On first line, after directory name, display only free space" first)
(const :tag "Don't display disk space usage" nil))
:version "29.1"
:group 'dired)
@ -1770,7 +1775,10 @@ see `dired-use-ls-dired' for more details.")
((eq dired-free-space 'separate)
(end-of-line)
(insert " available " available)
(forward-line 1)
;; The separate free-space line is considered part of the
;; directory content, for the purposes of
;; 'dired-hide-details-mode'.
(beginning-of-line)
(point))
((eq dired-free-space 'first)
(goto-char beg)

View file

@ -1431,11 +1431,8 @@ clashes."
(unless byte-to-native-top-level-forms
(signal 'native-compiler-error-empty-byte (list filename)))
(unless (comp-ctxt-output comp-ctxt)
(setf (comp-ctxt-output comp-ctxt) (comp-el-to-eln-filename
filename
(or native-compile-target-directory
(when byte+native-compile
(car (last native-comp-eln-load-path)))))))
(setf (comp-ctxt-output comp-ctxt)
(comp-el-to-eln-filename filename native-compile-target-directory)))
(setf (comp-ctxt-speed comp-ctxt) (alist-get 'native-comp-speed
byte-native-qualities)
(comp-ctxt-debug comp-ctxt) (alist-get 'native-comp-debug
@ -4374,8 +4371,9 @@ last directory in `native-comp-eln-load-path')."
(comp-ensure-native-compiler)
(let ((comp-running-batch-compilation t)
(native-compile-target-directory
(if for-tarball
(car (last native-comp-eln-load-path)))))
(if for-tarball
(car (last native-comp-eln-load-path))
native-compile-target-directory)))
(cl-loop for file in command-line-args-left
if (or (null byte+native-compile)
(cl-notany (lambda (re) (string-match re file))
@ -4417,6 +4415,8 @@ variable \"NATIVE_DISABLED\" is set, only byte compile."
(batch-byte-compile)
(cl-assert (length= command-line-args-left 1))
(let* ((byte+native-compile t)
(native-compile-target-directory
(car (last native-comp-eln-load-path)))
(byte-to-native-output-buffer-file nil)
(eln-file (car (batch-native-compile))))
(comp-write-bytecode-file eln-file)

View file

@ -1493,7 +1493,7 @@ If PREFIX is non-nil, mention only keys that start with PREFIX.
If TITLE is non-nil, is a string to insert at the beginning.
TITLE should not end with a colon or a newline; we supply that.
If NOMENU is non-nil, then omit menu-bar commands.
If NO-MENU is non-nil, then omit menu-bar commands.
If TRANSL is non-nil, the definitions are actually key
translations so print strings and vectors differently.

View file

@ -148,9 +148,8 @@ such as `edebug-defun' to work with such inputs."
This variable is buffer-local.")
(defvar ielm-header
(substitute-command-keys
"*** Welcome to IELM *** Type (describe-mode) or press \
\\[describe-mode] for help.\n")
\\[describe-mode] for help.\n"
"Message to display when IELM is started.")
(defvaralias 'inferior-emacs-lisp-mode-map 'ielm-map)
@ -622,7 +621,7 @@ Customized bindings may be defined in `ielm-map', which currently contains:
(setq-local comint-inhibit-carriage-motion t)
;; Add a silly header
(insert ielm-header)
(insert (substitute-command-keys ielm-header))
(ielm-set-pm (point-max))
(unless comint-use-prompt-regexp
(let ((inhibit-read-only t))

View file

@ -816,7 +816,7 @@ compilation and evaluation time conflicts."
:language 'c-sharp
:feature 'definition
:override t
'((qualified_name (identifier) @font-lock-type-face)
`((qualified_name (identifier) @font-lock-type-face)
(using_directive (identifier) @font-lock-type-face)
(using_directive (name_equals
(identifier) @font-lock-type-face))
@ -843,8 +843,13 @@ compilation and evaluation time conflicts."
(class_declaration (identifier) @font-lock-type-face)
(constructor_declaration name: (_) @font-lock-type-face)
(method_declaration type: [(identifier) (void_keyword)] @font-lock-type-face)
;;; Handle different releases of tree-sitter-c-sharp.
;;; Check if keyword void_keyword is available, then return the correct rule."
,@(condition-case nil
(progn (treesit-query-capture 'csharp '((void_keyword) @capture))
`((method_declaration type: [(identifier) (void_keyword)] @font-lock-type-face)))
(error
`((method_declaration type: [(identifier) (predefined_type)] @font-lock-type-face))))
(method_declaration type: (generic_name (identifier) @font-lock-type-face))
(method_declaration name: (_) @font-lock-function-name-face)

View file

@ -84,6 +84,12 @@ All commands in `lisp-mode-shared-map' are inherited by this map."
:help "Byte-compile the current file (if it has changed), then load compiled code"]
["Byte-recompile Directory..." byte-recompile-directory
:help "Recompile every `.el' file in DIRECTORY that needs recompilation"]
["Native-compile This File" emacs-lisp-native-compile
:help "Compile the current file containing the current buffer to native code"
:active (native-comp-available-p)]
["Native-compile and Load" emacs-lisp-native-compile-and-load
:help "Compile the current file to native code, then load compiled native code"
:active (native-comp-available-p)]
["Disassemble Byte Compiled Object..." disassemble
:help "Print disassembled code for OBJECT in a buffer"]
"---"
@ -217,6 +223,16 @@ All commands in `lisp-mode-shared-map' are inherited by this map."
(declare-function native-compile "comp")
(declare-function comp-write-bytecode-file "comp")
(defun emacs-lisp-native-compile ()
"Native-compile synchronously the current file (if it has changed)."
(interactive nil emacs-lisp-mode)
(emacs-lisp--before-compile-buffer)
(let* ((byte+native-compile t)
(byte-to-native-output-buffer-file nil)
(eln (native-compile buffer-file-name)))
(when eln
(comp-write-bytecode-file eln))))
(defun emacs-lisp-native-compile-and-load ()
"Native-compile synchronously the current file (if it has changed).
Load the compiled code when finished.
@ -225,11 +241,8 @@ Use `emacs-lisp-byte-compile-and-load' in combination with
`native-comp-jit-compilation' set to t to achieve asynchronous
native compilation."
(interactive nil emacs-lisp-mode)
(emacs-lisp--before-compile-buffer)
(let ((byte+native-compile t)
(byte-to-native-output-buffer-file nil))
(when-let ((eln (native-compile buffer-file-name)))
(load (file-name-sans-extension (comp-write-bytecode-file eln))))))
(when-let ((byte-file (emacs-lisp-native-compile)))
(load (file-name-sans-extension byte-file))))
(defun emacs-lisp-macroexpand ()
"Macroexpand the form after point.

View file

@ -3474,7 +3474,7 @@ Check if a node type is available, then return the right indent rules."
((parent-is "statement_block") parent-bol js-indent-level)
;; JSX
(js-jsx--treesit-indent-compatibility-bb1f97b)
,@(js-jsx--treesit-indent-compatibility-bb1f97b)
((node-is "jsx_closing_element") parent 0)
((match "jsx_element" "statement") parent js-indent-level)
((parent-is "jsx_element") parent js-indent-level)

View file

@ -2077,15 +2077,16 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
}
#endif /* HAVE_NS */
#ifdef HAVE_X_WINDOWS
/* Stupid kludge to catch command-line display spec. We can't
handle this argument entirely in window system dependent code
because we don't even know which window system dependent code
to run until we've recognized this argument. */
{
char *displayname = 0;
int count_before = skip_args;
#ifdef HAVE_X_WINDOWS
char *displayname = 0;
/* Skip any number of -d options, but only use the last one. */
while (!only_version)
{
@ -2115,12 +2116,15 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
}
argv[count_before + 1] = (char *) "-d";
}
#endif /* HAVE_X_WINDOWS */
if (! no_site_lisp)
{
if (argmatch (argv, argc, "-Q", "--quick", 3, NULL, &skip_args)
if (argmatch (argv, argc, "-Q", "--quick", 3, NULL, &skip_args)
|| argmatch (argv, argc, "-quick", 0, 2, NULL, &skip_args))
no_site_lisp = 1;
no_site_lisp = 1;
}
if (argmatch (argv, argc, "-x", 0, 1, &junk, &skip_args))
@ -2136,18 +2140,6 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
/* Don't actually discard this arg. */
skip_args = count_before;
}
#else /* !HAVE_X_WINDOWS */
if (! no_site_lisp)
{
int count_before = skip_args;
if (argmatch (argv, argc, "-Q", "--quick", 3, NULL, &skip_args)
|| argmatch (argv, argc, "-quick", 0, 2, NULL, &skip_args))
no_site_lisp = 1;
skip_args = count_before;
}
#endif
/* argmatch must not be used after here,
except when building temacs

View file

@ -6160,6 +6160,9 @@ from the absolute start of the buffer, disregarding the narrowing. */)
{
ptrdiff_t pos_byte, start_byte = BEGV_BYTE;
if (!BUFFER_LIVE_P (current_buffer))
error ("Attempt to count lines in a dead buffer");
if (MARKERP (position))
{
/* We don't trust the byte position if the marker's buffer is

View file

@ -8339,9 +8339,17 @@ get_next_display_element (struct it *it)
&& success_p
&& FRAME_WINDOW_P (it->f))
{
struct face *face = FACE_FROM_ID (it->f, it->face_id);
struct face *face = FACE_FROM_ID_OR_NULL (it->f, it->face_id);
if (it->what == IT_COMPOSITION && it->cmp_it.ch >= 0)
/* It shouldn't happen, ever, that FACE is NULL here, but
evidently some faulty fonts/fontsets can sometimes cause it.
In that case, we punt and consider the stuff undisplayable. */
if (!face)
{
it->what = IT_GLYPHLESS;
it->glyphless_method = GLYPHLESS_DISPLAY_EMPTY_BOX;
}
else if (it->what == IT_COMPOSITION && it->cmp_it.ch >= 0)
{
/* Automatic composition with glyph-string. */
Lisp_Object gstring = composition_gstring_from_id (it->cmp_it.id);
@ -27908,6 +27916,8 @@ are the selected window and the WINDOW's buffer). */)
if (NILP (buffer))
buffer = w->contents;
CHECK_BUFFER (buffer);
if (!BUFFER_LIVE_P (XBUFFER (buffer)))
error ("Attempt to format a mode line for a dead buffer");
/* Make formatting the modeline a non-op when noninteractive, otherwise
there will be problems later caused by a partially initialized frame. */
@ -32098,9 +32108,12 @@ produce_glyphless_glyph (struct it *it, bool for_no_font, Lisp_Object acronym)
int len;
/* Get the metrics of the base font. We always refer to the current
ASCII face. */
face = FACE_FROM_ID (it->f, it->face_id)->ascii_face;
font = face->font ? face->font : FRAME_FONT (it->f);
ASCII face, but if some faulty setup of fontsets causes that to
be NULL, we fall back to the frame's default font. */
face = FACE_FROM_ID_OR_NULL (it->f, it->face_id);
if (face)
face = face->ascii_face;
font = (face && face->font) ? face->font : FRAME_FONT (it->f);
normal_char_ascent_descent (font, -1, &it->ascent, &it->descent);
it->ascent += font->baseline_offset;
it->descent -= font->baseline_offset;

View file

@ -7411,6 +7411,7 @@ This requires restrictions of file name syntax."
(skip-unless (not (getenv "EMACS_HYDRA_CI"))) ; SLOW ~ 245s
(skip-unless (not (tramp--test-rsync-p)))
(skip-unless (not (tramp--test-rclone-p)))
(skip-unless (not (or (eq system-type 'darwin) (tramp--test-macos-p))))
;; Newlines, slashes and backslashes in file names are not
;; supported. So we don't test. And we don't test the tab

View file

@ -72,9 +72,11 @@ Check that the resulting binaries do not differ."
:suffix "-comp-stage1.el"
(ert-with-temp-file comp2-src
:suffix "-comp-stage2.el"
(let* ((byte+native-compile t) ; FIXME HACK
(let* ((byte+native-compile t)
(native-compile-target-directory
(car (last native-comp-eln-load-path)))
(comp-src (expand-file-name "../../../lisp/emacs-lisp/comp.el"
(ert-resource-directory)))
(ert-resource-directory)))
;; Can't use debug symbols.
(native-comp-debug 0))
(copy-file comp-src comp1-src t)