mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-25 07:28:20 +00:00
Merge branch 'emacs-29' of git.sv.gnu.org:/srv/git/emacs into emacs-29
This commit is contained in:
commit
1198cdb556
2
README
2
README
@ -2,7 +2,7 @@ Copyright (C) 2001-2023 Free Software Foundation, Inc.
|
||||
See the end of the file for license conditions.
|
||||
|
||||
|
||||
This directory tree holds version 29.1 of GNU Emacs, the extensible,
|
||||
This directory tree holds version 29.1.50 of GNU Emacs, the extensible,
|
||||
customizable, self-documenting real-time display editor.
|
||||
|
||||
The file INSTALL in this directory says how to build and install GNU
|
||||
|
@ -426,6 +426,13 @@ Now change to the 'manual' directory and invoke upload-manuals:
|
||||
If upload-manuals fails, resolve the problems and re-invoke it.
|
||||
This requires running make-manuals again, since upload-manuals
|
||||
destructively modifies the 'manual' directory where you invoke it.
|
||||
|
||||
If new files fail to be "cvs add"ed, they need to be manually
|
||||
removed from under /path/to/webpages/cvs/checkout before retrying
|
||||
upload-manuals, because if they exist, they will not be handled as
|
||||
"new" files, and will not be "cvs add"ed by the next run of the
|
||||
script.
|
||||
|
||||
Also, upload-manuals invokes "cvs commit -f", so if you run it
|
||||
several times, some files will be committed more than once even
|
||||
though they were not changed in-between. Suck it up.
|
||||
|
@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
AC_PREREQ([2.65])
|
||||
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
|
||||
AC_INIT([GNU Emacs], [29.1], [bug-gnu-emacs@gnu.org], [],
|
||||
AC_INIT([GNU Emacs], [29.1.50], [bug-gnu-emacs@gnu.org], [],
|
||||
[https://www.gnu.org/software/emacs/])
|
||||
|
||||
dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
|
||||
|
@ -2804,7 +2804,12 @@ library. @xref{Hooks}.
|
||||
@subsection How Emacs Finds Your Init File
|
||||
|
||||
Emacs normally finds your init file in a location under your home
|
||||
directory. @xref{Init File}.
|
||||
directory@footnote{
|
||||
On MS-Windows, there's no single directory considered by all programs
|
||||
as ``the home directory'' of the user. Emacs uses one of the
|
||||
pertinent directories as the equivalent of your home directory; see
|
||||
@ref{Windows HOME}, for the details.
|
||||
}. @xref{Init File}.
|
||||
|
||||
Emacs looks for your init file using the filenames @file{~/.emacs.el},
|
||||
@file{~/.emacs}, or @file{~/.emacs.d/init.el} in that order; you can
|
||||
|
@ -706,7 +706,7 @@ produced by typing those commands.
|
||||
for the detailed raw data. Reporting the facts is straightforward,
|
||||
but many people strain to posit explanations and report them instead
|
||||
of the facts. If the explanations are based on guesses about how
|
||||
Emacs is implemented, they night not be useful; meanwhile, lacking the
|
||||
Emacs is implemented, they might not be useful; meanwhile, lacking the
|
||||
facts, we will have no real information about the bug. If you want to
|
||||
actually @emph{debug} the problem, and report explanations that are
|
||||
more than guesses, that is useful---but please include the raw facts
|
||||
|
@ -187,9 +187,13 @@ selected frame.
|
||||
@end defvar
|
||||
|
||||
@defopt server-after-make-frame-hook
|
||||
A normal hook run when the Emacs server creates a client frame. When
|
||||
this hook is called, the created frame is the selected one.
|
||||
@xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
|
||||
A normal hook run when the Emacs server starts using a client frame.
|
||||
When this hook is called, the client frame is the selected one. Note
|
||||
that, depending on how @command{emacsclient} was invoked
|
||||
(@pxref{Invoking emacsclient,,, emacs, The GNU Emacs Manual}), this
|
||||
client frame could be a new frame created for the client, or it could
|
||||
be an existing frame that the server reused for handling the client
|
||||
commands. @xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
|
||||
@end defopt
|
||||
|
||||
|
||||
|
27
etc/NEWS
27
etc/NEWS
@ -15,6 +15,33 @@ in older Emacs versions.
|
||||
You can narrow news to a specific version by calling 'view-emacs-news'
|
||||
with a prefix argument or by typing 'C-u C-h C-n'.
|
||||
|
||||
|
||||
* Installation Changes in Emacs 29.2
|
||||
|
||||
|
||||
* Startup Changes in Emacs 29.2
|
||||
|
||||
|
||||
* Changes in Emacs 29.2
|
||||
|
||||
|
||||
* Editing Changes in Emacs 29.2
|
||||
|
||||
|
||||
* Changes in Specialized Modes and Packages in Emacs 29.2
|
||||
|
||||
|
||||
* New Modes and Packages in Emacs 29.2
|
||||
|
||||
|
||||
* Incompatible Lisp Changes in Emacs 29.2
|
||||
|
||||
|
||||
* Lisp Changes in Emacs 29.2
|
||||
|
||||
|
||||
* Changes in Emacs 29.2 on Non-Free Operating Systems
|
||||
|
||||
|
||||
* Installation Changes in Emacs 29.1
|
||||
|
||||
|
@ -226,9 +226,9 @@ mnemonics of the following coding systems:
|
||||
(put 'mode-line-mule-info 'risky-local-variable t)
|
||||
|
||||
(defvar mode-line-client
|
||||
`(""
|
||||
(:propertize ("" (:eval (if (frame-parameter nil 'client) "@" "")))
|
||||
help-echo ,(purecopy "emacsclient frame")))
|
||||
`(:eval
|
||||
(if (frame-parameter nil 'client)
|
||||
,(propertize "@" 'help-echo (purecopy "emacsclient frame"))))
|
||||
"Mode line construct for identifying emacsclient frames.")
|
||||
;; Autoload if this file no longer dumped.
|
||||
;;;###autoload
|
||||
|
@ -445,13 +445,19 @@ classes."
|
||||
(setcar dash-l ?.)) ; Reduce --x to .-x
|
||||
(setq items (nconc items '((?- . ?-))))))
|
||||
|
||||
;; Deal with leading ^ and range ^-x.
|
||||
(when (and (consp (car items))
|
||||
(eq (caar items) ?^)
|
||||
(cdr items))
|
||||
;; Move ^ and ^-x to second place.
|
||||
(setq items (cons (cadr items)
|
||||
(cons (car items) (cddr items)))))
|
||||
;; Deal with leading ^ and range ^-x in non-negated set.
|
||||
(when (and (eq (car-safe (car items)) ?^)
|
||||
(not negated))
|
||||
(if (eq (cdar items) ?^)
|
||||
;; single leading ^
|
||||
(when (cdr items)
|
||||
;; Move the ^ to second place.
|
||||
(setq items (cons (cadr items)
|
||||
(cons (car items) (cddr items)))))
|
||||
;; Split ^-x to _-x^
|
||||
(setq items (cons (cons ?_ (cdar items))
|
||||
(cons '(?^ . ?^)
|
||||
(cdr items))))))
|
||||
|
||||
(cond
|
||||
;; Empty set: if negated, any char, otherwise match-nothing.
|
||||
|
@ -995,7 +995,8 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)."
|
||||
(symbol-name function)))))))
|
||||
(real-def (cond
|
||||
((and aliased (not (subrp def)))
|
||||
(car (function-alias-p real-function t)))
|
||||
(or (car (function-alias-p real-function))
|
||||
real-function))
|
||||
((subrp def) (intern (subr-name def)))
|
||||
(t def))))
|
||||
|
||||
|
@ -168,7 +168,7 @@ the available version of Tree-sitter for java."
|
||||
:override t
|
||||
:feature 'constant
|
||||
`(((identifier) @font-lock-constant-face
|
||||
(:match "\\`[A-Z_][A-Z_\\d]*\\'" @font-lock-constant-face))
|
||||
(:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face))
|
||||
[(true) (false)] @font-lock-constant-face)
|
||||
:language 'java
|
||||
:override t
|
||||
|
@ -106,7 +106,7 @@ name.")
|
||||
|
||||
(defconst js--plain-method-re
|
||||
(concat "^\\s-*?\\(" js--dotted-name-re "\\)\\.prototype"
|
||||
"\\.\\(" js--name-re "\\)\\s-*?=\\s-*?\\(\\(:?async[ \t\n]+\\)function\\)\\_>")
|
||||
"\\.\\(" js--name-re "\\)\\s-*?=\\s-*?\\(\\(?:async[ \t\n]+\\)function\\)\\_>")
|
||||
"Regexp matching an explicit JavaScript prototype \"method\" declaration.
|
||||
Group 1 is a (possibly-dotted) class name, group 2 is a method name,
|
||||
and group 3 is the `function' keyword.")
|
||||
@ -3540,7 +3540,7 @@ Check if a node type is available, then return the right font lock rules."
|
||||
:language 'javascript
|
||||
:feature 'constant
|
||||
'(((identifier) @font-lock-constant-face
|
||||
(:match "\\`[A-Z_][A-Z_\\d]*\\'" @font-lock-constant-face))
|
||||
(:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face))
|
||||
|
||||
[(true) (false) (null)] @font-lock-constant-face)
|
||||
|
||||
@ -3646,7 +3646,7 @@ Check if a node type is available, then return the right font lock rules."
|
||||
:feature 'number
|
||||
'((number) @font-lock-number-face
|
||||
((identifier) @font-lock-number-face
|
||||
(:match "\\`\\(:?NaN\\|Infinity\\)\\'" @font-lock-number-face)))
|
||||
(:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face)))
|
||||
|
||||
:language 'javascript
|
||||
:feature 'operator
|
||||
|
@ -1021,7 +1021,7 @@ leading double colon is not added."
|
||||
(:match "\\`\\$[#\"'`:?]" @global_var))
|
||||
;; ?' ?" ?` are character literals.
|
||||
((character) @char
|
||||
(:match "\\`?[#\"'`:?]" @char))
|
||||
(:match "\\`\\?[#\"'`:?]" @char))
|
||||
;; Symbols like :+, :<=> or :foo=.
|
||||
((simple_symbol) @symbol
|
||||
(:match "\\s." @symbol))
|
||||
|
@ -143,7 +143,7 @@
|
||||
eol))
|
||||
@font-lock-builtin-face)))
|
||||
((identifier) @font-lock-type-face
|
||||
(:match "\\`\\(:?Err\\|Ok\\|None\\|Some\\)\\'" @font-lock-type-face)))
|
||||
(:match "\\`\\(?:Err\\|Ok\\|None\\|Some\\)\\'" @font-lock-type-face)))
|
||||
|
||||
:language 'rust
|
||||
:feature 'comment
|
||||
@ -232,9 +232,12 @@
|
||||
(type_identifier) @font-lock-type-face
|
||||
((scoped_identifier name: (identifier) @rust-ts-mode--fontify-tail))
|
||||
((scoped_identifier path: (identifier) @font-lock-type-face)
|
||||
(:match
|
||||
"\\`\\(u8\\|u16\\|u32\\|u64\\|u128\\|usize\\|i8\\|i16\\|i32\\|i64\\|i128\\|isize\\|char\\|str\\)\\'"
|
||||
@font-lock-type-face))
|
||||
(:match ,(rx bos
|
||||
(or "u8" "u16" "u32" "u64" "u128" "usize"
|
||||
"i8" "i16" "i32" "i64" "i128" "isize"
|
||||
"char" "str")
|
||||
eos)
|
||||
@font-lock-type-face))
|
||||
((scoped_identifier path: (identifier) @rust-ts-mode--fontify-scope))
|
||||
((scoped_type_identifier path: (identifier) @rust-ts-mode--fontify-scope))
|
||||
(type_identifier) @font-lock-type-face)
|
||||
@ -249,7 +252,7 @@
|
||||
:feature 'constant
|
||||
`((boolean_literal) @font-lock-constant-face
|
||||
((identifier) @font-lock-constant-face
|
||||
(:match "\\`[A-Z][A-Z\\d_]*\\'" @font-lock-constant-face)))
|
||||
(:match "\\`[A-Z][0-9A-Z_]*\\'" @font-lock-constant-face)))
|
||||
|
||||
:language 'rust
|
||||
:feature 'variable
|
||||
|
@ -198,7 +198,7 @@ Argument LANGUAGE is either `typescript' or `tsx'."
|
||||
:language language
|
||||
:feature 'constant
|
||||
`(((identifier) @font-lock-constant-face
|
||||
(:match "\\`[A-Z_][A-Z_\\d]*\\'" @font-lock-constant-face))
|
||||
(:match "\\`[A-Z_][0-9A-Z_]*\\'" @font-lock-constant-face))
|
||||
[(true) (false) (null)] @font-lock-constant-face)
|
||||
|
||||
:language language
|
||||
@ -345,7 +345,7 @@ Argument LANGUAGE is either `typescript' or `tsx'."
|
||||
:feature 'number
|
||||
`((number) @font-lock-number-face
|
||||
((identifier) @font-lock-number-face
|
||||
(:match "\\`\\(:?NaN\\|Infinity\\)\\'" @font-lock-number-face)))
|
||||
(:match "\\`\\(?:NaN\\|Infinity\\)\\'" @font-lock-number-face)))
|
||||
|
||||
:language language
|
||||
:feature 'operator
|
||||
|
@ -182,8 +182,10 @@ space (this means characters from ! to ~; or from code 33 to
|
||||
:type 'hook)
|
||||
|
||||
(defcustom server-after-make-frame-hook nil
|
||||
"Hook run when the Emacs server creates a client frame.
|
||||
The created frame is selected when the hook is called."
|
||||
"Hook run when the Emacs server starts using a client frame.
|
||||
The client frame is selected when the hook is called.
|
||||
The client frame could be a newly-created frame, or an
|
||||
existing frame reused for this purpose."
|
||||
:type 'hook
|
||||
:version "27.1")
|
||||
|
||||
|
@ -67,7 +67,7 @@
|
||||
/^#undef PACKAGE_NAME/s/^.*$/#define PACKAGE_NAME ""/
|
||||
/^#undef PACKAGE_STRING/s/^.*$/#define PACKAGE_STRING ""/
|
||||
/^#undef PACKAGE_TARNAME/s/^.*$/#define PACKAGE_TARNAME ""/
|
||||
/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "29.1"/
|
||||
/^#undef PACKAGE_VERSION/s/^.*$/#define PACKAGE_VERSION "29.1.50"/
|
||||
/^#undef SYSTEM_TYPE/s/^.*$/#define SYSTEM_TYPE "ms-dos"/
|
||||
/^#undef HAVE_DECL_GETENV/s/^.*$/#define HAVE_DECL_GETENV 1/
|
||||
/^#undef SYS_SIGLIST_DECLARED/s/^.*$/#define SYS_SIGLIST_DECLARED 1/
|
||||
|
@ -1,7 +1,7 @@
|
||||
Copyright (C) 2001-2023 Free Software Foundation, Inc.
|
||||
See the end of the file for license conditions.
|
||||
|
||||
Emacs version 29.1 for MS-Windows
|
||||
Emacs version 29.1.50 for MS-Windows
|
||||
|
||||
This README file describes how to set up and run a precompiled
|
||||
distribution of the latest version of GNU Emacs for MS-Windows. You
|
||||
|
@ -470,7 +470,7 @@ used for non-Latin and other unusual characters (such as emoji) is
|
||||
ignored as well, as are display properties and invisible text.
|
||||
For these reasons, the results are not generally reliable;
|
||||
for accurate dimensions of text as it will be displayed,
|
||||
use `window-text-pixel-size' instead.
|
||||
use `string-pixel-width' or `window-text-pixel-size' instead.
|
||||
usage: (string-width STRING &optional FROM TO) */)
|
||||
(Lisp_Object str, Lisp_Object from, Lisp_Object to)
|
||||
{
|
||||
|
@ -11116,8 +11116,8 @@ the command loop or by `read-key-sequence'.
|
||||
The value is always a vector. */)
|
||||
(void)
|
||||
{
|
||||
return Fvector (this_command_key_count
|
||||
- this_single_command_key_start,
|
||||
ptrdiff_t nkeys = this_command_key_count - this_single_command_key_start;
|
||||
return Fvector (nkeys < 0 ? 0 : nkeys,
|
||||
(XVECTOR (this_command_keys)->contents
|
||||
+ this_single_command_key_start));
|
||||
}
|
||||
|
@ -17601,6 +17601,7 @@ redisplay_window_error (Lisp_Object error_data)
|
||||
if (max_redisplay_ticks > 0
|
||||
&& CONSP (error_data)
|
||||
&& EQ (XCAR (error_data), Qerror)
|
||||
&& CONSP (XCDR (error_data))
|
||||
&& STRINGP (XCAR (XCDR (error_data))))
|
||||
Vdelayed_warnings_list = Fcons (list2 (XCAR (error_data),
|
||||
XCAR (XCDR (error_data))),
|
||||
@ -27091,7 +27092,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision,
|
||||
|
||||
oprops = Fcopy_sequence (oprops);
|
||||
tem = props;
|
||||
while (CONSP (tem))
|
||||
while (CONSP (tem) && CONSP (XCDR (tem)))
|
||||
{
|
||||
oprops = plist_put (oprops, XCAR (tem),
|
||||
XCAR (XCDR (tem)));
|
||||
|
11
src/xfns.c
11
src/xfns.c
@ -5109,6 +5109,17 @@ This function is an internal primitive--use `make-frame' instead. */)
|
||||
gui_default_parameter (f, parms, Qfullscreen, Qnil,
|
||||
"fullscreen", "Fullscreen", RES_TYPE_SYMBOL);
|
||||
|
||||
#ifdef USE_CAIRO
|
||||
/* Set the initial size of the Cairo surface to the frame's current
|
||||
width and height. If the window manager doesn't resize the new
|
||||
frame after it's first mapped, Emacs will create a surface with
|
||||
empty dimensions in response to to the initial exposure event,
|
||||
which will persist until the next time it's resized.
|
||||
(bug#64923) */
|
||||
x_cr_update_surface_desired_size (f, FRAME_PIXEL_WIDTH (f),
|
||||
FRAME_PIXEL_HEIGHT (f));
|
||||
#endif /* USE_CAIRO */
|
||||
|
||||
/* Make the window appear on the frame and enable display, unless
|
||||
the caller says not to. However, with explicit parent, Emacs
|
||||
cannot control visibility, so don't try. */
|
||||
|
@ -112,23 +112,33 @@
|
||||
(should (equal (rx (any "]" "^") (any "]" "-") (any "-" "^")
|
||||
(not (any "]" "^")) (not (any "]" "-"))
|
||||
(not (any "-" "^")))
|
||||
"[]^][]-][-^][^]^][^]-][^-^]"))
|
||||
"[]^][]-][-^][^]^][^]-][^^-]"))
|
||||
(should (equal (rx (any "]" "^" "-") (not (any "]" "^" "-")))
|
||||
"[]^-][^]^-]"))
|
||||
(should (equal (rx (any "^-f") (any "^-f" "-")
|
||||
(any "^-f" "z") (any "^-f" "z" "-"))
|
||||
"[_-f^][_-f^-][_-f^z][_-f^z-]"))
|
||||
(should (equal (rx (not (any "^-f")) (not (any "^-f" "-"))
|
||||
(not (any "^-f" "z")) (not (any "^-f" "z" "-")))
|
||||
"[^^-f][^^-f-][^^-fz][^^-fz-]"))
|
||||
(should (equal (rx (any "^-f" word) (any "^-f" "-" word))
|
||||
"[_-f^[:word:]][_-f^[:word:]-]"))
|
||||
(should (equal (rx (not (any "^-f" word)) (not (any "^-f" "-" word)))
|
||||
"[^^-f[:word:]][^^-f[:word:]-]"))
|
||||
(should (equal (rx (any "-" ascii) (any "^" ascii) (any "]" ascii))
|
||||
"[[:ascii:]-][[:ascii:]^][][:ascii:]]"))
|
||||
(should (equal (rx (not (any "-" ascii)) (not (any "^" ascii))
|
||||
(not (any "]" ascii)))
|
||||
"[^[:ascii:]-][^[:ascii:]^][^][:ascii:]]"))
|
||||
"[^[:ascii:]-][^^[:ascii:]][^][:ascii:]]"))
|
||||
(should (equal (rx (any "-]" ascii) (any "^]" ascii) (any "-^" ascii))
|
||||
"[][:ascii:]-][]^[:ascii:]][[:ascii:]^-]"))
|
||||
(should (equal (rx (not (any "-]" ascii)) (not (any "^]" ascii))
|
||||
(not (any "-^" ascii)))
|
||||
"[^][:ascii:]-][^]^[:ascii:]][^[:ascii:]^-]"))
|
||||
"[^][:ascii:]-][^]^[:ascii:]][^^[:ascii:]-]"))
|
||||
(should (equal (rx (any "-]^" ascii) (not (any "-]^" ascii)))
|
||||
"[]^[:ascii:]-][^]^[:ascii:]-]"))
|
||||
(should (equal (rx (any "^" lower upper) (not (any "^" lower upper)))
|
||||
"[[:lower:]^[:upper:]][^[:lower:]^[:upper:]]"))
|
||||
"[[:lower:]^[:upper:]][^^[:lower:][:upper:]]"))
|
||||
(should (equal (rx (any "-" lower upper) (not (any "-" lower upper)))
|
||||
"[[:lower:][:upper:]-][^[:lower:][:upper:]-]"))
|
||||
(should (equal (rx (any "]" lower upper) (not (any "]" lower upper)))
|
||||
@ -143,7 +153,7 @@
|
||||
"[]-a-][^]-a-]"))
|
||||
(should (equal (rx (any "--]") (not (any "--]"))
|
||||
(any "-" "^-a") (not (any "-" "^-a")))
|
||||
"[].-\\-][^].-\\-][-^-a][^-^-a]"))
|
||||
"[].-\\-][^].-\\-][_-a^-][^^-a-]"))
|
||||
(should (equal (rx (not (any "!a" "0-8" digit nonascii)))
|
||||
"[^!0-8a[:digit:][:nonascii:]]"))
|
||||
(should (equal (rx (any) (not (any)))
|
||||
|
Loading…
Reference in New Issue
Block a user