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,
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
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
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.
@vindex case-replace
In addition, when the @var{newstring} argument is all or partly lower
case, replacement commands try to preserve the case pattern of each
occurrence. Thus, the command
In addition, when the second argument of a replace command is all or
partly lower case, replacement commands try to preserve the case
pattern of each occurrence. Thus, the command
@example
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}
@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
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
contains the Emacs executable, and @var{emacs-binary} is the name of
the Emacs executable file, normally @file{emacs} on GNU and Unix
systems and @file{emacs.exe} on MS-Windows and MS-DOS@. Omit the
@option{-p} option if your version of @command{addr2line} is too old
to have it.
the backtrace (on MS-Windows, @file{emacs_backtrace.txt} in the
directory where Emacs was started), @var{bindir} is the name of the
directory that contains the Emacs executable, and @var{emacs-binary}
is the name of the Emacs executable file, normally @file{emacs} on GNU
and Unix systems and @file{emacs.exe} on MS-Windows and MS-DOS@. Omit
the @option{-p} option if your version of @command{addr2line} is too
old to have it.
@cindex core dump
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
@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 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.
You can test the voidness of a symbol's function definition with

View file

@ -2247,7 +2247,7 @@ Here is an example:
@smallexample
@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{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)
** 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
existing 'package-install' command and the new 'package-upgrade'
command which would prevent the user from easily grabbing the latest
version as usual.
The new command 'eglot-upgrade-eglot' allows easily grabbing the
latest version of Eglot from ELPA. This might be more convenient than
using the more general command 'package-install', which by default
will not upgrade "built-in" packages, those that come with Emacs.
* 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.
Eglot now advertises 'project-root' and 'project-external-roots' as
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.)
(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
workspace. Flymake has (as of version 1.2.1) the option to show
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)
** Provide strict checking of incoming LSP messagesp.
** Provide strict checking of incoming LSP messages.
(github#144, github#156)
@ -570,7 +570,7 @@ here.
* Changes in Eglot 1.1 (9/7/2018)
** 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
TCP connection finds a listening server.

View file

@ -391,7 +391,7 @@ or call the function `%s'."))))
(not (equal ,last-message
(current-message))))
(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)))))
,@(when after-hook `(,after-hook)))
(force-mode-line-update)

View file

@ -92,12 +92,22 @@ report errors as appropriate for this kind of usage."
(forward-sexp (- arg) interactive))
(defun mark-sexp (&optional arg allow-extend)
"Set mark ARG sexps from point.
The place mark goes is the same place \\[forward-sexp] would
move to with the same argument.
Interactively, if this command is repeated
or (in Transient Mark mode) if the mark is active,
it marks the next ARG sexps after the ones already marked.
"Set mark ARG sexps from point or move mark one sexp.
When called from Lisp with ALLOW-EXTEND ommitted or nil, mark is
set ARG sexps from point.
With ARG and ALLOW-EXTEND both non-nil (interactively, with prefix
argument), the place to which mark goes is the same place \\[forward-sexp]
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."
(interactive "P\np")
(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
package will be taken from the package's metadata.
By default, this function installs the last version of the package
available from its repository, but if REV is given and non-nil, it
specifies the revision to install. If REV has the special value
`:last-release' (interactively, the prefix argument), that stands
for the last released version of the package.
By default, this function installs the last revision of the
package available from its repository. If REV is a string, it
describes the revision to install, as interpreted by the VC
backend. The special value `:last-release' (interactively, the
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
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.
;; 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
;; Keywords: multilingual, input method, Farsi, Persian, keyboard
@ -23,7 +23,7 @@
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; This file contains a collection of input methods for
;; Persian languages (Farsi, Urdu, Pashto/Afghanic, ...)
;;
@ -395,6 +395,7 @@
("u" )
("V" )
("h" ?ه)
("Hh" ?ه) ;; to take care of هه -- hHh
("y" )
("i" )
("I" )
@ -402,7 +403,7 @@
;;;;;;;;;;; isiri-6219 Table 6 -- جدول ۶ - حروِفِ عربی
("F" )
("D" ?\u0671) ;; (insert-char #x0671)ٱ named: حرفِ الفِ وصل
("D" ?\u0671) ;; (ucs-insert #x0671)ٱ named: حرفِ الفِ وصل
("K" ) ;; Arabic kaf
("Th" ) ;; ta marbuteh
("Y" )
@ -421,40 +422,40 @@
("8" )
("9" )
("\\/" ?\u066B) ;; (insert-char #x066B)٫ named: ممیزِ فارسی
("\\," ?\u066C) ;; (insert-char #x066C)٬ named: جداکننده‌ی هزارهای فارسی
("%" ?\u066A) ;; (insert-char #x066A)٪ named: درصدِ فارسی
("+" ?\u002B) ;; (insert-char #x002B)+ named: علامتِ به‌اضافه
("-" ?\u2212) ;; (insert-char #x2212) named: علامتِ منها
("\\*" ?\u00D7) ;; (insert-char #x00D7)× named: علامتِ ضرب
("\\-" ?\u00F7) ;; (insert-char #x00F7)÷ named: علامتِ تقسیم
("<" ?\u003C) ;; (insert-char #x003C)< named: علامتِ کوچکتر
("=" ?\u003D) ;; (insert-char #x003D)= named: علامتِ مساوی
(">" ?\u003E) ;; (insert-char #x003E)> named: علامتِ بزرگتر
("\\/" ?\u066B) ;; (ucs-insert #x066B)٫ named: ممیزِ فارسی
("\\," ?\u066C) ;; (ucs-insert #x066C)٬ named: جداکننده‌ی هزارهای فارسی
("%" ?\u066A) ;; (ucs-insert #x066A)٪ named: درصدِ فارسی
("+" ?\u002B) ;; (ucs-insert #x002B)+ named: علامتِ به‌اضافه
("-" ?\u2212) ;; (ucs-insert #x2212) named: علامتِ منها
("\\*" ?\u00D7) ;; (ucs-insert #x00D7)× named: علامتِ ضرب
("\\-" ?\u00F7) ;; (ucs-insert #x00F7)÷ named: علامتِ تقسیم
("<" ?\u003C) ;; (ucs-insert #x003C)< named: علامتِ کوچکتر
("=" ?\u003D) ;; (ucs-insert #x003D)= named: علامتِ مساوی
(">" ?\u003E) ;; (ucs-insert #x003E)> named: علامتِ بزرگتر
;;;;;;;;;;; isiri-6219 Table 2 -- جدول ۲ - علائم نقطه گذاریِ مشترک
;;; Space
("." ?.) ;;
(":" ?\u003A) ;; (insert-char #x003A): named:
("!" ?\u0021) ;; (insert-char #x0021)! named:
("\\." ?\u2026) ;; (insert-char #x2026)… named:
("\\-" ?\u2010) ;; (insert-char #x2010) named:
("-" ?\u002D) ;; (insert-char #x002D)- named:
(":" ?\u003A) ;; (ucs-insert #x003A): named:
("!" ?\u0021) ;; (ucs-insert #x0021)! named:
("\\." ?\u2026) ;; (ucs-insert #x2026)… named:
("\\-" ?\u2010) ;; (ucs-insert #x2010) named:
("-" ?\u002D) ;; (ucs-insert #x002D)- named:
("|" ?|)
;;("\\\\" ?\)
("//" ?/)
("*" ?\u002A) ;; (insert-char #x002A)* named:
("(" ?\u0028) ;; (insert-char #x0028)( named:
(")" ?\u0029) ;; (insert-char #x0029)) named:
("[" ?\u005B) ;; (insert-char #x005B)[ named:
("[" ?\u005D) ;; (insert-char #x005D)] named:
("{" ?\u007B) ;; (insert-char #x007B){ named:
("}" ?\u007D) ;; (insert-char #x007D)} named:
("\\<" ?\u00AB) ;; (insert-char #x00AB)« named:
("\\>" ?\u00BB) ;; (insert-char #x00BB)» named:
("N" ?\u00AB) ;; (insert-char #x00AB)« named:
("M" ?\u00BB) ;; (insert-char #x00BB)» named:
("*" ?\u002A) ;; (ucs-insert #x002A)* named:
("(" ?\u0028) ;; (ucs-insert #x0028)( named:
(")" ?\u0029) ;; (ucs-insert #x0029)) named:
("[" ?\u005B) ;; (ucs-insert #x005B)[ named:
("[" ?\u005D) ;; (ucs-insert #x005D)] named:
("{" ?\u007B) ;; (ucs-insert #x007B){ named:
("}" ?\u007D) ;; (ucs-insert #x007D)} named:
("\\<" ?\u00AB) ;; (ucs-insert #x00AB)« named:
("\\>" ?\u00BB) ;; (ucs-insert #x00BB)» named:
("N" ?\u00AB) ;; (ucs-insert #x00AB)« named:
("M" ?\u00BB) ;; (ucs-insert #x00BB)» named:
;;;;;;;;;;; isiri-6219 Table 3 -- جدول ۳ - علائم نقطه گذاریِ فارسی
("," ) ;; farsi
@ -463,24 +464,49 @@
("_" ) ;;
;;;;;;;;;;; isiri-6219 Table 1 -- جدول ۱ - نویسه‌های کنترلی
;;;;;;;;;;; isiri-6219 Table 1 (plus bidi updates) - جدول ۱ - نویسه‌های کنترلی
;; LF
;; CR
("&zwnj;" ?\u200C) ;; (insert-char #x200C) named: فاصله‌ی مجازی
("&zwnj;" ?\u200C) ;; (ucs-insert #x200C) named: فاصله‌ی مجازی
("/" ?\u200C) ;;
("&zwj;" ?\u200D) ;; (insert-char #x200D) named: اتصالِ مجازی
("&zwj;" ?\u200D) ;; (ucs-insert #x200D) named: اتصالِ مجازی
("J" ?\u200D) ;;
("&lrm;" ?\u200E) ;; (insert-char #x200E) named: نشانه‌ی چپ‌به‌راست
("&rlm;" ?\u200F) ;; (insert-char #x200F) named: نشانه‌ی راست‌به‌چپ
("&ls;" ?\u2028) ;; (insert-char #x2028) named: جداکننده‌ی سطرها
("&ps;" ?\u2028) ;; (insert-char #x2029) named: جداکننده‌ی بندها
("&lre;" ?\u202A) ;; (insert-char #x202A) named: زیرمتنِ چپ‌به‌راست
("&rle;" ?\u202B) ;; (insert-char #x202B) named: زیرمتنِ راست‌به‌چپ
("&pdf;" ?\u202C) ;; (insert-char #x202C) named: پایانِ زیرمتن
("&lro;" ?\u202D) ;; (insert-char #x202D) named: زیرمتنِ اکیداً چپ‌به‌راست
("&rlo;" ?\u202D) ;; (insert-char #x202E) named: زیرمتنِ اکیداً راست‌به‌چپ
("&bom;" ?\uFEFF) ;; (insert-char #xFEFF) named: نشانه‌ی ترتیبِ بایت‌ها
("&ls;" ?\u2028) ;; (ucs-insert #x2028) named: جداکننده‌ی سطرها
("&ps;" ?\u2029) ;; (ucs-insert #x2029) named: جداکننده‌ی بندها
;;
;; Byte Order Mark (Historic)
("&bom;" ?\uFEFF) ;; (ucs-insert #xFEFF) named: نشانه‌ی ترتیبِ بایت‌ها
;; BIDI Controls
;; -------
;; LEFT-TO-RIGHT MARK (strongly typed LTR character)
("&lrm;" ?\u200E) ;; (ucs-insert #x200E) 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 -- جدول ۷ - نشانه‌هایِ فارسی
("^" ) ;; zbar ;; زبر فارسى
@ -491,14 +517,14 @@
("O" ) ;; دو پيش فارسى -- تنوين رفع
("~" ) ;; tashdid ;; تشديد فارسى
("@" ) ;; ساکن فارسى
("U" ?\u0653) ;; (insert-char #x0653)ٓ named: مدِ فارسی
("U" ?\u0653) ;; (ucs-insert #x0653)ٓ named: مدِ فارسی
("`" ) ;; همزه فارسى بالا
("C" ?\u0655) ;; (insert-char #x0655)ٕ named: همزه فارسى پایین
("$" ?\u0670) ;; (insert-char #x0670)ٰ named: الفِ مقصوره‌ی فارسی
("C" ?\u0655) ;; (ucs-insert #x0655)ٕ named: همزه فارسى پایین
("$" ?\u0670) ;; (ucs-insert #x0670)ٰ named: الفِ مقصوره‌ی فارسی
;;;;;;;;;;; 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
@ -508,7 +534,7 @@
("\\~" ?~)
("\\@" ?@)
("\\#" ?#)
("\\$" ?\uFDFC) ;; (insert-char #xFDFC)﷼ named:
("\\$" ?\uFDFC) ;; (ucs-insert #xFDFC)﷼ named:
("\\^" ?^)
("\\1" ?1)
("\\2" ?2)

View file

@ -723,7 +723,7 @@ autoloads into the specified file instead."
;;;###autoload
(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
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.
MODE is either `c' or `cpp'."
(let ((c-keywords
'("break" "case" "const" "continue"
'("_Atomic" "break" "case" "const" "continue"
"default" "do" "else" "enum"
"extern" "for" "goto" "if" "inline"
"register" "return"
"register" "restrict" "return"
"sizeof" "static" "struct"
"switch" "typedef" "union"
"volatile" "while")))

View file

@ -464,6 +464,15 @@ compilation and evaluation time conflicts."
(defun csharp-guess-basic-syntax (orig-fun &rest args)
(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
(save-excursion
(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
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'."
(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.
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
(start (use-region-beginning))
(end (use-region-end))

View file

@ -8714,12 +8714,22 @@ node `(elisp) Word Motion' for details."
(forward-word (- (or arg 1))))
(defun mark-word (&optional arg allow-extend)
"Set mark ARG words away from point.
The place mark goes is the same place \\[forward-word] would
move to with the same argument.
Interactively, if this command is repeated
or (in Transient Mark mode) if the mark is active,
it marks the next ARG words after the ones already marked."
"Set mark ARG words from point or move mark one word.
When called from Lisp with ALLOW-EXTEND ommitted or nil, mark is
set ARG words from point.
With ARG and ALLOW-EXTEND both non-nil (interactively, with prefix
argument), the place to which mark goes is the same place \\[forward-word]
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")
(cond ((and allow-extend
(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'
and `treesit-defun-skipper'."
(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))
(success nil))
(catch 'done
@ -1983,6 +1987,10 @@ this function depends on `treesit-defun-type-regexp' and
(interactive "^p\nd")
(let ((orig-point (point)))
(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
(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)
"Handle FRAME moving to a different position.
Clear any cached root window position."
(set-frame-parameter frame 'dnd-root-window-position
nil))
(and (frame-live-p frame)
(set-frame-parameter frame 'dnd-root-window-position
nil)))
(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. */
static intptr_t garbage_collection_inhibited;
intptr_t garbage_collection_inhibited;
/* The GC threshold in bytes, the last time it was calculated
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
}
/* 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));
fontset = FONTSET_FROM_ID (face->fontset);
eassert (!BASE_FONTSET_P (fontset));

View file

@ -12825,6 +12825,8 @@ truncate_message_1 (void *a1, Lisp_Object a2)
return false;
}
extern intptr_t garbage_collection_inhibited;
/* Set the current message to STRING. */
static void
@ -12834,7 +12836,11 @@ set_message (Lisp_Object 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 ();
specbind (Qinhibit_quit, Qt);
@ -12911,7 +12917,9 @@ clear_message (bool current_p, bool last_displayed_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 ();
specbind (Qinhibit_quit, Qt);