Merge branch 'emacs-29'

This commit is contained in:
Stefan Monnier 2023-05-10 11:18:43 -04:00
commit e4c8ba6c05
20 changed files with 207 additions and 97 deletions

View file

@ -515,9 +515,9 @@ one of them selects that alternative. The keys @kbd{C-f}, @kbd{C-b},
do the highlighting in the buffer showing the possible characters, do the highlighting in the buffer showing the possible characters,
rather than in the echo area. rather than in the echo area.
To enter characters according to the @dfn{pīnyīn} transliteration To enter characters according to the @dfn{p@=iny@=in} transliteration
method instead, use the @code{chinese-sisheng} input method. This is method instead, use the @code{chinese-sisheng} input method. This is
a composition based method, where e.g. @kbd{pi1} results in @samp{pī}. a composition based method, where e.g. @kbd{pi1} results in @samp{p@=i}.
In Japanese input methods, first you input a whole word using In Japanese input methods, first you input a whole word using
phonetic spelling; then, after the word is in the buffer, Emacs phonetic spelling; then, after the word is in the buffer, Emacs

View file

@ -1653,9 +1653,9 @@ command's first argument. If @code{case-fold-search} is set to
@code{nil}, case is always significant in all searches. @code{nil}, case is always significant in all searches.
@vindex case-replace @vindex case-replace
In addition, when the @var{newstring} argument is all or partly lower In addition, when the second argument of a replace command is all or
case, replacement commands try to preserve the case pattern of each partly lower case, replacement commands try to preserve the case
occurrence. Thus, the command pattern of each occurrence. Thus, the command
@example @example
M-x replace-string @key{RET} foo @key{RET} bar @key{RET} M-x replace-string @key{RET} foo @key{RET} bar @key{RET}

View file

@ -313,14 +313,36 @@ sed -n 's/.*\[\(.*\)]$/\1/p' @var{backtrace} |
addr2line -C -f -i -p -e @var{bindir}/@var{emacs-binary} addr2line -C -f -i -p -e @var{bindir}/@var{emacs-binary}
@end example @end example
@noindent
On MS-Windows, the backtrace looks somewhat differently, for example:
@example
Backtrace:
00007ff61166a12e
00007ff611538be1
00007ff611559601
00007ff6116ce84a
00007ff9b7977ff0
@dots{}
@end example
@noindent
Therefore, the filtering via @command{sed} is not required, and the
command to show the source-code line number is
@example
addr2line -C -f -i -p -e @var{bindir}/@var{emacs-binary} < @var{backtrace}
@end example
@noindent @noindent
Here, @var{backtrace} is the name of a text file containing a copy of Here, @var{backtrace} is the name of a text file containing a copy of
the backtrace, @var{bindir} is the name of the directory that the backtrace (on MS-Windows, @file{emacs_backtrace.txt} in the
contains the Emacs executable, and @var{emacs-binary} is the name of directory where Emacs was started), @var{bindir} is the name of the
the Emacs executable file, normally @file{emacs} on GNU and Unix directory that contains the Emacs executable, and @var{emacs-binary}
systems and @file{emacs.exe} on MS-Windows and MS-DOS@. Omit the is the name of the Emacs executable file, normally @file{emacs} on GNU
@option{-p} option if your version of @command{addr2line} is too old and Unix systems and @file{emacs.exe} on MS-Windows and MS-DOS@. Omit
to have it. the @option{-p} option if your version of @command{addr2line} is too
old to have it.
@cindex core dump @cindex core dump
Optionally, Emacs can generate a @dfn{core dump} when it crashes, on Optionally, Emacs can generate a @dfn{core dump} when it crashes, on

View file

@ -1484,7 +1484,7 @@ the symbol as a function, Emacs signals a @code{void-function} error.
Note that void is not the same as @code{nil} or the symbol Note that void is not the same as @code{nil} or the symbol
@code{void}. The symbols @code{nil} and @code{void} are Lisp objects, @code{void}. The symbols @code{nil} and @code{void} are Lisp objects,
and can be stored into a function cell just as any other object can be and can be stored into a function cell just as any other object can be
(and they can be valid functions if you define them in turn with (and @code{void} can be a valid function if you define it with
@code{defun}). A void function cell contains no object whatsoever. @code{defun}). A void function cell contains no object whatsoever.
You can test the voidness of a symbol's function definition with You can test the voidness of a symbol's function definition with

View file

@ -2247,7 +2247,7 @@ Here is an example:
@smallexample @smallexample
@group @group
(yes-or-no-p "Do you really want to remove everything?") (yes-or-no-p "Do you really want to remove everything? ")
;; @r{After evaluation of the preceding expression,} ;; @r{After evaluation of the preceding expression,}
;; @r{the following prompt appears,} ;; @r{the following prompt appears,}

View file

@ -99,12 +99,12 @@ been added to 'eglot-stay-out-of'.
* Changes in Eglot 1.12.29 (Eglot bundled with Emacs 29.1) * Changes in Eglot 1.12.29 (Eglot bundled with Emacs 29.1)
** Eglot can upgrade itself to the latest version. ** Eglot has a new command to upgrade to the latest version.
The new command 'eglot-upgrade-eglot' works around behaviour in the The new command 'eglot-upgrade-eglot' allows easily grabbing the
existing 'package-install' command and the new 'package-upgrade' latest version of Eglot from ELPA. This might be more convenient than
command which would prevent the user from easily grabbing the latest using the more general command 'package-install', which by default
version as usual. will not upgrade "built-in" packages, those that come with Emacs.
* Changes in Eglot 1.12 (13/03/2023) * Changes in Eglot 1.12 (13/03/2023)
@ -253,12 +253,12 @@ may be disabled via 'eglot-ignored-server-capabilities'
** Basic LSP "workspace folders" support added. ** Basic LSP "workspace folders" support added.
Eglot now advertises 'project-root' and 'project-external-roots' as Eglot now advertises 'project-root' and 'project-external-roots' as
workspace-folders. (Configuring 'project-vc-external-roots-function' workspace-folders. (Configuring 'project-vc-external-roots-function'
via Elisp or 'tags-table-list' via Custtomize are two ways to set the via Elisp or 'tags-table-list' via Customize are two ways to set the
external roots of a simple git project.) external roots of a simple git project.)
(github#893) (github#893)
** Eglot can now show project wide diagnosics via Flymake. ** Eglot can now show project wide diagnostics via Flymake.
Some LSP servers report diagnostics for all files in the current Some LSP servers report diagnostics for all files in the current
workspace. Flymake has (as of version 1.2.1) the option to show workspace. Flymake has (as of version 1.2.1) the option to show
diagnostics from buffers other than the currently visited one. The diagnostics from buffers other than the currently visited one. The
@ -476,7 +476,7 @@ these two domains.
* Changes in Eglot 1.3 (10/12/2018) * Changes in Eglot 1.3 (10/12/2018)
** Provide strict checking of incoming LSP messagesp. ** Provide strict checking of incoming LSP messages.
(github#144, github#156) (github#144, github#156)
@ -570,7 +570,7 @@ here.
* Changes in Eglot 1.1 (9/7/2018) * Changes in Eglot 1.1 (9/7/2018)
** Implement TCP autostart/autoconnect (and support Ruby's Solargraph). ** Implement TCP autostart/autoconnect (and support Ruby's Solargraph).
The ':autoport' symbol in the server incovation is replaced The ':autoport' symbol in the server invocation is replaced
dynamically by a local port believed to be vacant, so that the ensuing dynamically by a local port believed to be vacant, so that the ensuing
TCP connection finds a listening server. TCP connection finds a listening server.

View file

@ -391,7 +391,7 @@ or call the function `%s'."))))
(not (equal ,last-message (not (equal ,last-message
(current-message)))) (current-message))))
(let ((local ,(if globalp "" " in current buffer"))) (let ((local ,(if globalp "" " in current buffer")))
(message ,(format "%s %%sabled%%s" pretty-name) (message "%s %sabled%s" ,pretty-name
(if ,getter "en" "dis") local))))) (if ,getter "en" "dis") local)))))
,@(when after-hook `(,after-hook))) ,@(when after-hook `(,after-hook)))
(force-mode-line-update) (force-mode-line-update)

View file

@ -92,12 +92,22 @@ report errors as appropriate for this kind of usage."
(forward-sexp (- arg) interactive)) (forward-sexp (- arg) interactive))
(defun mark-sexp (&optional arg allow-extend) (defun mark-sexp (&optional arg allow-extend)
"Set mark ARG sexps from point. "Set mark ARG sexps from point or move mark one sexp.
The place mark goes is the same place \\[forward-sexp] would When called from Lisp with ALLOW-EXTEND ommitted or nil, mark is
move to with the same argument. set ARG sexps from point.
Interactively, if this command is repeated With ARG and ALLOW-EXTEND both non-nil (interactively, with prefix
or (in Transient Mark mode) if the mark is active, argument), the place to which mark goes is the same place \\[forward-sexp]
it marks the next ARG sexps after the ones already marked. would move to with the same argument; if the mark is active, it moves
ARG sexps from its current position, otherwise it is set ARG sexps
from point.
When invoked interactively without a prefix argument and no active
region, mark moves one sexp forward.
When invoked interactively without a prefix argument, and region
is active, mark moves one sexp away of point (i.e., forward
if mark is at or after point, back if mark is before point), thus
extending the region by one sexp. Since the direction of region
extension depends on the relative position of mark and point, you
can change the direction by \\[exchange-point-and-mark].
This command assumes point is not in a string or comment." This command assumes point is not in a string or comment."
(interactive "P\np") (interactive "P\np")
(cond ((and allow-extend (cond ((and allow-extend

View file

@ -759,11 +759,13 @@ indicating the package name and SPEC is a plist as described in
symbol whose name is the package name, and the URL for the symbol whose name is the package name, and the URL for the
package will be taken from the package's metadata. package will be taken from the package's metadata.
By default, this function installs the last version of the package By default, this function installs the last revision of the
available from its repository, but if REV is given and non-nil, it package available from its repository. If REV is a string, it
specifies the revision to install. If REV has the special value describes the revision to install, as interpreted by the VC
`:last-release' (interactively, the prefix argument), that stands backend. The special value `:last-release' (interactively, the
for the last released version of the package. prefix argument), will use the commit of the latest release, if
it exists. The last release is the latest revision which changed
the \"Version:\" header of the package's main Lisp file.
Optional argument BACKEND specifies the VC backend to use for cloning Optional argument BACKEND specifies the VC backend to use for cloning
the package's repository; this is only possible if NAME-OR-URL is a URL, the package's repository; this is only possible if NAME-OR-URL is a URL,

View file

@ -2,7 +2,7 @@
;; Copyright (C) 2011-2023 Free Software Foundation, Inc. ;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
;; Author: Mohsen BANAN <libre@mohsen.1.banan.byname.net> ;; Author: Mohsen BANAN <emacs@mohsen.1.banan.byname.net>
;; URL: http://mohsen.1.banan.byname.net/contact ;; URL: http://mohsen.1.banan.byname.net/contact
;; Keywords: multilingual, input method, Farsi, Persian, keyboard ;; Keywords: multilingual, input method, Farsi, Persian, keyboard
@ -23,7 +23,7 @@
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary: ;;; Commentary:
;;
;; This file contains a collection of input methods for ;; This file contains a collection of input methods for
;; Persian languages (Farsi, Urdu, Pashto/Afghanic, ...) ;; Persian languages (Farsi, Urdu, Pashto/Afghanic, ...)
;; ;;
@ -395,6 +395,7 @@
("u" ) ("u" )
("V" ) ("V" )
("h" ?ه) ("h" ?ه)
("Hh" ?ه) ;; to take care of هه -- hHh
("y" ) ("y" )
("i" ) ("i" )
("I" ) ("I" )
@ -402,7 +403,7 @@
;;;;;;;;;;; isiri-6219 Table 6 -- جدول ۶ - حروِفِ عربی ;;;;;;;;;;; isiri-6219 Table 6 -- جدول ۶ - حروِفِ عربی
("F" ) ("F" )
("D" ?\u0671) ;; (insert-char #x0671)ٱ named: حرفِ الفِ وصل ("D" ?\u0671) ;; (ucs-insert #x0671)ٱ named: حرفِ الفِ وصل
("K" ) ;; Arabic kaf ("K" ) ;; Arabic kaf
("Th" ) ;; ta marbuteh ("Th" ) ;; ta marbuteh
("Y" ) ("Y" )
@ -421,40 +422,40 @@
("8" ) ("8" )
("9" ) ("9" )
("\\/" ?\u066B) ;; (insert-char #x066B)٫ named: ممیزِ فارسی ("\\/" ?\u066B) ;; (ucs-insert #x066B)٫ named: ممیزِ فارسی
("\\," ?\u066C) ;; (insert-char #x066C)٬ named: جداکننده‌ی هزارهای فارسی ("\\," ?\u066C) ;; (ucs-insert #x066C)٬ named: جداکننده‌ی هزارهای فارسی
("%" ?\u066A) ;; (insert-char #x066A)٪ named: درصدِ فارسی ("%" ?\u066A) ;; (ucs-insert #x066A)٪ named: درصدِ فارسی
("+" ?\u002B) ;; (insert-char #x002B)+ named: علامتِ به‌اضافه ("+" ?\u002B) ;; (ucs-insert #x002B)+ named: علامتِ به‌اضافه
("-" ?\u2212) ;; (insert-char #x2212) named: علامتِ منها ("-" ?\u2212) ;; (ucs-insert #x2212) named: علامتِ منها
("\\*" ?\u00D7) ;; (insert-char #x00D7)× named: علامتِ ضرب ("\\*" ?\u00D7) ;; (ucs-insert #x00D7)× named: علامتِ ضرب
("\\-" ?\u00F7) ;; (insert-char #x00F7)÷ named: علامتِ تقسیم ("\\-" ?\u00F7) ;; (ucs-insert #x00F7)÷ named: علامتِ تقسیم
("<" ?\u003C) ;; (insert-char #x003C)< named: علامتِ کوچکتر ("<" ?\u003C) ;; (ucs-insert #x003C)< named: علامتِ کوچکتر
("=" ?\u003D) ;; (insert-char #x003D)= named: علامتِ مساوی ("=" ?\u003D) ;; (ucs-insert #x003D)= named: علامتِ مساوی
(">" ?\u003E) ;; (insert-char #x003E)> named: علامتِ بزرگتر (">" ?\u003E) ;; (ucs-insert #x003E)> named: علامتِ بزرگتر
;;;;;;;;;;; isiri-6219 Table 2 -- جدول ۲ - علائم نقطه گذاریِ مشترک ;;;;;;;;;;; isiri-6219 Table 2 -- جدول ۲ - علائم نقطه گذاریِ مشترک
;;; Space ;;; Space
("." ?.) ;; ("." ?.) ;;
(":" ?\u003A) ;; (insert-char #x003A): named: (":" ?\u003A) ;; (ucs-insert #x003A): named:
("!" ?\u0021) ;; (insert-char #x0021)! named: ("!" ?\u0021) ;; (ucs-insert #x0021)! named:
("\\." ?\u2026) ;; (insert-char #x2026)… named: ("\\." ?\u2026) ;; (ucs-insert #x2026)… named:
("\\-" ?\u2010) ;; (insert-char #x2010) named: ("\\-" ?\u2010) ;; (ucs-insert #x2010) named:
("-" ?\u002D) ;; (insert-char #x002D)- named: ("-" ?\u002D) ;; (ucs-insert #x002D)- named:
("|" ?|) ("|" ?|)
;;("\\\\" ?\) ;;("\\\\" ?\)
("//" ?/) ("//" ?/)
("*" ?\u002A) ;; (insert-char #x002A)* named: ("*" ?\u002A) ;; (ucs-insert #x002A)* named:
("(" ?\u0028) ;; (insert-char #x0028)( named: ("(" ?\u0028) ;; (ucs-insert #x0028)( named:
(")" ?\u0029) ;; (insert-char #x0029)) named: (")" ?\u0029) ;; (ucs-insert #x0029)) named:
("[" ?\u005B) ;; (insert-char #x005B)[ named: ("[" ?\u005B) ;; (ucs-insert #x005B)[ named:
("[" ?\u005D) ;; (insert-char #x005D)] named: ("[" ?\u005D) ;; (ucs-insert #x005D)] named:
("{" ?\u007B) ;; (insert-char #x007B){ named: ("{" ?\u007B) ;; (ucs-insert #x007B){ named:
("}" ?\u007D) ;; (insert-char #x007D)} named: ("}" ?\u007D) ;; (ucs-insert #x007D)} named:
("\\<" ?\u00AB) ;; (insert-char #x00AB)« named: ("\\<" ?\u00AB) ;; (ucs-insert #x00AB)« named:
("\\>" ?\u00BB) ;; (insert-char #x00BB)» named: ("\\>" ?\u00BB) ;; (ucs-insert #x00BB)» named:
("N" ?\u00AB) ;; (insert-char #x00AB)« named: ("N" ?\u00AB) ;; (ucs-insert #x00AB)« named:
("M" ?\u00BB) ;; (insert-char #x00BB)» named: ("M" ?\u00BB) ;; (ucs-insert #x00BB)» named:
;;;;;;;;;;; isiri-6219 Table 3 -- جدول ۳ - علائم نقطه گذاریِ فارسی ;;;;;;;;;;; isiri-6219 Table 3 -- جدول ۳ - علائم نقطه گذاریِ فارسی
("," ) ;; farsi ("," ) ;; farsi
@ -463,24 +464,49 @@
("_" ) ;; ("_" ) ;;
;;;;;;;;;;; isiri-6219 Table 1 -- جدول ۱ - نویسه‌های کنترلی ;;;;;;;;;;; isiri-6219 Table 1 (plus bidi updates) - جدول ۱ - نویسه‌های کنترلی
;; LF ;; LF
;; CR ;; CR
("&zwnj;" ?\u200C) ;; (insert-char #x200C) named: فاصله‌ی مجازی ("&zwnj;" ?\u200C) ;; (ucs-insert #x200C) named: فاصله‌ی مجازی
("/" ?\u200C) ;; ("/" ?\u200C) ;;
("&zwj;" ?\u200D) ;; (insert-char #x200D) named: اتصالِ مجازی ("&zwj;" ?\u200D) ;; (ucs-insert #x200D) named: اتصالِ مجازی
("J" ?\u200D) ;; ("J" ?\u200D) ;;
("&lrm;" ?\u200E) ;; (insert-char #x200E) named: نشانه‌ی چپ‌به‌راست ("&ls;" ?\u2028) ;; (ucs-insert #x2028) named: جداکننده‌ی سطرها
("&rlm;" ?\u200F) ;; (insert-char #x200F) named: نشانه‌ی راست‌به‌چپ ("&ps;" ?\u2029) ;; (ucs-insert #x2029) named: جداکننده‌ی بندها
("&ls;" ?\u2028) ;; (insert-char #x2028) named: جداکننده‌ی سطرها ;;
("&ps;" ?\u2028) ;; (insert-char #x2029) named: جداکننده‌ی بندها ;; Byte Order Mark (Historic)
("&lre;" ?\u202A) ;; (insert-char #x202A) named: زیرمتنِ چپ‌به‌راست ("&bom;" ?\uFEFF) ;; (ucs-insert #xFEFF) named: نشانه‌ی ترتیبِ بایت‌ها
("&rle;" ?\u202B) ;; (insert-char #x202B) named: زیرمتنِ راست‌به‌چپ ;; BIDI Controls
("&pdf;" ?\u202C) ;; (insert-char #x202C) named: پایانِ زیرمتن ;; -------
("&lro;" ?\u202D) ;; (insert-char #x202D) named: زیرمتنِ اکیداً چپ‌به‌راست ;; LEFT-TO-RIGHT MARK (strongly typed LTR character)
("&rlo;" ?\u202D) ;; (insert-char #x202E) named: زیرمتنِ اکیداً راست‌به‌چپ ("&lrm;" ?\u200E) ;; (ucs-insert #x200E) named: نشانه‌ی چپ‌به‌راست
("&bom;" ?\uFEFF) ;; (insert-char #xFEFF) named: نشانه‌ی ترتیبِ بایت‌ها ("L" ?\u200E)
;; RIGHT-TO-LEFT MARK (strongly typed RTL character)
("&rlm;" ?\u200F) ;; (ucs-insert #x200F) named: نشانه‌ی راست‌به‌چپ
("R" ?\u200F)
;; LEFT-TO-RIGHT ISOLATE (sets base direction to LTR & isolates the embedded)
("&lri;" ?\u2066) ;; (ucs-insert #x2066)
;; RIGHT-TO-LEFT ISOLATE (sets base direction to RTL & isolates the embedded)
("&rli;" ?\u2067) ;; (ucs-insert #x2067)
;; FIRST-STRONG ISOLATE (isolates content & sets dir to first strongly typed)
("&fsi;" ?\u2068) ;; (ucs-insert #x2068)
;; POP DIRECTIONAL ISOLATE (used for RLI, LRI or FSI)
;; EMACS BUG
;; If ("&pdi;" ?\u2069) is included Emacs fully hangs with a (describe-input-method 'farsi-transliterate-banan)
;;("&pdi;" ?\u2069) ;; (ucs-insert #x2069)
;; LEFT-TO-RIGHT EMBEDDING (sets base dir to LTR but allows embedded text)
("&lre;" ?\u202A) ;; (ucs-insert #x202A) named: زیرمتنِ چپ‌به‌راست
("B" ?\u202A)
;; RIGHT-TO-LEFT EMBEDDING (sets base dir to RTL but allows embedded text)
("&rle;" ?\u202B) ;; (ucs-insert #x202B) named: زیرمتنِ راست‌به‌چپ
;; POP DIRECTIONAL FORMATTING (used for RLE or LRE and RLO or LRO)
;; EMACS ANOMOLY --- Why does &pdf not show up in (describe-input-method 'farsi-transliterate-banan)
("&pdf;" ?\u202C) ;; (ucs-insert #x202C) named: پایانِ زیرمتن
("P" ?\u202C)
;; LEFT-TO-RIGHT OVERRIDE (overrides the bidirectional algorithm, display LTR)
("&lro;" ?\u202D) ;; (ucs-insert #x202D) named: زیرمتنِ اکیداً چپ‌به‌راست
;; RIGHT-TO-LEFT OVERRIDE (overrides the bidirectional algorithm, display RTL)
("&rlo;" ?\u202E) ;; (ucs-insert #x202E) named: زیرمتنِ اکیداً راست‌به‌چپ
;;;;;;;;;;; isiri-6219 Table 7 -- جدول ۷ - نشانه‌هایِ فارسی ;;;;;;;;;;; isiri-6219 Table 7 -- جدول ۷ - نشانه‌هایِ فارسی
("^" ) ;; zbar ;; زبر فارسى ("^" ) ;; zbar ;; زبر فارسى
@ -491,14 +517,14 @@
("O" ) ;; دو پيش فارسى -- تنوين رفع ("O" ) ;; دو پيش فارسى -- تنوين رفع
("~" ) ;; tashdid ;; تشديد فارسى ("~" ) ;; tashdid ;; تشديد فارسى
("@" ) ;; ساکن فارسى ("@" ) ;; ساکن فارسى
("U" ?\u0653) ;; (insert-char #x0653)ٓ named: مدِ فارسی ("U" ?\u0653) ;; (ucs-insert #x0653)ٓ named: مدِ فارسی
("`" ) ;; همزه فارسى بالا ("`" ) ;; همزه فارسى بالا
("C" ?\u0655) ;; (insert-char #x0655)ٕ named: همزه فارسى پایین ("C" ?\u0655) ;; (ucs-insert #x0655)ٕ named: همزه فارسى پایین
("$" ?\u0670) ;; (insert-char #x0670)ٰ named: الفِ مقصوره‌ی فارسی ("$" ?\u0670) ;; (ucs-insert #x0670)ٰ named: الفِ مقصوره‌ی فارسی
;;;;;;;;;;; isiri-6219 Table 8 - Forbidden Characters -- جدول ۸ - نویسه‌هایِ ممنوع ;;;;;;;;;;; isiri-6219 Table 8 - Forbidden Characters -- جدول ۸ - نویسه‌هایِ ممنوع
;; ;; he ye (insert-char 1728) (insert-char #x06c0) kills emacs-24.0.90 ;; ;; he ye (ucs-insert 1728) (ucs-insert #x06c0) kills emacs-24.0.90
;; arabic digits 0-9 ;; arabic digits 0-9
@ -508,7 +534,7 @@
("\\~" ?~) ("\\~" ?~)
("\\@" ?@) ("\\@" ?@)
("\\#" ?#) ("\\#" ?#)
("\\$" ?\uFDFC) ;; (insert-char #xFDFC)﷼ named: ("\\$" ?\uFDFC) ;; (ucs-insert #xFDFC)﷼ named:
("\\^" ?^) ("\\^" ?^)
("\\1" ?1) ("\\1" ?1)
("\\2" ?2) ("\\2" ?2)

View file

@ -723,7 +723,7 @@ autoloads into the specified file instead."
;;;###autoload ;;;###autoload
(defun make-directory-autoloads (dir output-file) (defun make-directory-autoloads (dir output-file)
"Update autoload definitions for Lisp files in the directories DIRS. "Update autoload definitions for Lisp files in the directories DIR.
DIR can be either a single directory or a list of DIR can be either a single directory or a list of
directories. (The latter usage is discouraged.) directories. (The latter usage is discouraged.)

View file

@ -504,10 +504,10 @@ NODE should be a labeled_statement. PARENT is its parent."
"C/C++ keywords for tree-sitter font-locking. "C/C++ keywords for tree-sitter font-locking.
MODE is either `c' or `cpp'." MODE is either `c' or `cpp'."
(let ((c-keywords (let ((c-keywords
'("break" "case" "const" "continue" '("_Atomic" "break" "case" "const" "continue"
"default" "do" "else" "enum" "default" "do" "else" "enum"
"extern" "for" "goto" "if" "inline" "extern" "for" "goto" "if" "inline"
"register" "return" "register" "restrict" "return"
"sizeof" "static" "struct" "sizeof" "static" "struct"
"switch" "typedef" "union" "switch" "typedef" "union"
"volatile" "while"))) "volatile" "while")))

View file

@ -464,6 +464,15 @@ compilation and evaluation time conflicts."
(defun csharp-guess-basic-syntax (orig-fun &rest args) (defun csharp-guess-basic-syntax (orig-fun &rest args)
(cond (cond
(;; enum
(save-excursion
(goto-char (c-point 'boi))
(and
(eq (char-after) ?\{)
(save-excursion
(goto-char (c-point 'iopl))
(looking-at ".*enum.*"))))
`((class-open ,(c-point 'iopl))))
(;; Attributes (;; Attributes
(save-excursion (save-excursion
(goto-char (c-point 'iopl)) (goto-char (c-point 'iopl))

View file

@ -436,6 +436,8 @@ Fourth and fifth arg START and END specify the region to operate on.
Arguments FROM-STRING, TO-STRING, DELIMITED, START, END, BACKWARD, and Arguments FROM-STRING, TO-STRING, DELIMITED, START, END, BACKWARD, and
REGION-NONCONTIGUOUS-P are passed to `perform-replace' (which see). REGION-NONCONTIGUOUS-P are passed to `perform-replace' (which see).
\(TO-STRING is passed to `perform-replace' as REPLACEMENTS and
DELIMITED is passed as DELIMITED-FLAG.)
To customize possible responses, change the bindings in `query-replace-map'." To customize possible responses, change the bindings in `query-replace-map'."
(declare (interactive-args (declare (interactive-args
@ -533,7 +535,10 @@ text, TO-STRING is actually made a list instead of a string.
Use \\[repeat-complex-command] after this command for details. Use \\[repeat-complex-command] after this command for details.
Arguments REGEXP, TO-STRING, DELIMITED, START, END, BACKWARD, and Arguments REGEXP, TO-STRING, DELIMITED, START, END, BACKWARD, and
REGION-NONCONTIGUOUS-P are passed to `perform-replace' (which see)." REGION-NONCONTIGUOUS-P are passed to `perform-replace' (which see).
\(REGEXP is passed to `perform-replace' as FROM-STRING,
TO-STRING is passed as REPLACEMENTS, and DELIMITED is passed
as DELIMITED-FLAG.)"
(declare (interactive-args (declare (interactive-args
(start (use-region-beginning)) (start (use-region-beginning))
(end (use-region-end)) (end (use-region-end))

View file

@ -8714,12 +8714,22 @@ node `(elisp) Word Motion' for details."
(forward-word (- (or arg 1)))) (forward-word (- (or arg 1))))
(defun mark-word (&optional arg allow-extend) (defun mark-word (&optional arg allow-extend)
"Set mark ARG words away from point. "Set mark ARG words from point or move mark one word.
The place mark goes is the same place \\[forward-word] would When called from Lisp with ALLOW-EXTEND ommitted or nil, mark is
move to with the same argument. set ARG words from point.
Interactively, if this command is repeated With ARG and ALLOW-EXTEND both non-nil (interactively, with prefix
or (in Transient Mark mode) if the mark is active, argument), the place to which mark goes is the same place \\[forward-word]
it marks the next ARG words after the ones already marked." would move to with the same argument; if the mark is active, it moves
ARG words from its current position, otherwise it is set ARG words
from point.
When invoked interactively without a prefix argument and no active
region, mark moves one word forward.
When invoked interactively without a prefix argument, and region
is active, mark moves one word away of point (i.e., forward
if mark is at or after point, back if mark is before point), thus
extending the region by one word. Since the direction of region
extension depends on the relative position of mark and point, you
can change the direction by \\[exchange-point-and-mark]."
(interactive "P\np") (interactive "P\np")
(cond ((and allow-extend (cond ((and allow-extend
(or (and (eq last-command this-command) (mark t)) (or (and (eq last-command this-command) (mark t))

View file

@ -1952,6 +1952,10 @@ This is a tree-sitter equivalent of `beginning-of-defun'.
Behavior of this function depends on `treesit-defun-type-regexp' Behavior of this function depends on `treesit-defun-type-regexp'
and `treesit-defun-skipper'." and `treesit-defun-skipper'."
(interactive "^p") (interactive "^p")
(or (not (eq this-command 'treesit-beginning-of-defun))
(eq last-command 'treesit-beginning-of-defun)
(and transient-mark-mode mark-active)
(push-mark))
(let ((orig-point (point)) (let ((orig-point (point))
(success nil)) (success nil))
(catch 'done (catch 'done
@ -1983,6 +1987,10 @@ this function depends on `treesit-defun-type-regexp' and
(interactive "^p\nd") (interactive "^p\nd")
(let ((orig-point (point))) (let ((orig-point (point)))
(if (or (null arg) (= arg 0)) (setq arg 1)) (if (or (null arg) (= arg 0)) (setq arg 1))
(or (not (eq this-command 'treesit-end-of-defun))
(eq last-command 'treesit-end-of-defun)
(and transient-mark-mode mark-active)
(push-mark))
(catch 'done (catch 'done
(dotimes (_ 2) ; Not making progress is better than infloop. (dotimes (_ 2) ; Not making progress is better than infloop.

View file

@ -609,8 +609,9 @@ message (format 32) that caused EVENT to be generated."
(defun x-dnd-after-move-frame (frame) (defun x-dnd-after-move-frame (frame)
"Handle FRAME moving to a different position. "Handle FRAME moving to a different position.
Clear any cached root window position." Clear any cached root window position."
(set-frame-parameter frame 'dnd-root-window-position (and (frame-live-p frame)
nil)) (set-frame-parameter frame 'dnd-root-window-position
nil)))
(add-hook 'move-frame-functions #'x-dnd-after-move-frame) (add-hook 'move-frame-functions #'x-dnd-after-move-frame)

View file

@ -398,7 +398,7 @@ static ptrdiff_t pure_bytes_used_non_lisp;
/* If positive, garbage collection is inhibited. Otherwise, zero. */ /* If positive, garbage collection is inhibited. Otherwise, zero. */
static intptr_t garbage_collection_inhibited; intptr_t garbage_collection_inhibited;
/* The GC threshold in bytes, the last time it was calculated /* The GC threshold in bytes, the last time it was calculated
from gc-cons-threshold and gc-cons-percentage. */ from gc-cons-threshold and gc-cons-percentage. */

View file

@ -967,6 +967,15 @@ face_for_char (struct frame *f, struct face *face, int c,
#endif #endif
} }
/* If the parent face has no fontset we could work with, and has no
font, just return that same face, so that the caller will
consider the character to have no font capable of displaying it,
and display it as "glyphless". That is certainly better than
violating the assertion below or crashing when assertions are not
compiled in. */
if (face->fontset < 0 && !face->font)
return face->id;
eassert (fontset_id_valid_p (face->fontset)); eassert (fontset_id_valid_p (face->fontset));
fontset = FONTSET_FROM_ID (face->fontset); fontset = FONTSET_FROM_ID (face->fontset);
eassert (!BASE_FONTSET_P (fontset)); eassert (!BASE_FONTSET_P (fontset));

View file

@ -12825,6 +12825,8 @@ truncate_message_1 (void *a1, Lisp_Object a2)
return false; return false;
} }
extern intptr_t garbage_collection_inhibited;
/* Set the current message to STRING. */ /* Set the current message to STRING. */
static void static void
@ -12834,7 +12836,11 @@ set_message (Lisp_Object string)
eassert (STRINGP (string)); eassert (STRINGP (string));
if (FUNCTIONP (Vset_message_function)) if (FUNCTIONP (Vset_message_function)
/* FIXME: (bug#63253) We should really make the regexp engine re-entrant,
but in the mean time, let's ignore `set-message-function` when
called from `probably_quit`. */
&& !garbage_collection_inhibited)
{ {
specpdl_ref count = SPECPDL_INDEX (); specpdl_ref count = SPECPDL_INDEX ();
specbind (Qinhibit_quit, Qt); specbind (Qinhibit_quit, Qt);
@ -12911,7 +12917,9 @@ clear_message (bool current_p, bool last_displayed_p)
if (current_p) if (current_p)
{ {
if (FUNCTIONP (Vclear_message_function)) if (FUNCTIONP (Vclear_message_function)
/* FIXME: (bug#63253) Same as for `set-message-function` above. */
&& !garbage_collection_inhibited)
{ {
specpdl_ref count = SPECPDL_INDEX (); specpdl_ref count = SPECPDL_INDEX ();
specbind (Qinhibit_quit, Qt); specbind (Qinhibit_quit, Qt);