emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e4c8ba6c058: Merge branch 'emacs-29'


From: Stefan Monnier
Subject: master e4c8ba6c058: Merge branch 'emacs-29'
Date: Wed, 10 May 2023 11:19:01 -0400 (EDT)

branch: master
commit e4c8ba6c0589f1ba0ba9993c4f1e9c0821d3ca6c
Merge: df620591e8c 09bf4768360
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Merge branch 'emacs-29'
---
 doc/emacs/mule.texi           |   4 +-
 doc/emacs/search.texi         |   6 +--
 doc/emacs/trouble.texi        |  34 +++++++++---
 doc/lispref/functions.texi    |   2 +-
 doc/lispref/minibuf.texi      |   2 +-
 etc/EGLOT-NEWS                |  18 +++----
 lisp/emacs-lisp/easy-mmode.el |   2 +-
 lisp/emacs-lisp/lisp.el       |  22 +++++---
 lisp/emacs-lisp/package-vc.el |  12 +++--
 lisp/leim/quail/persian.el    | 122 +++++++++++++++++++++++++-----------------
 lisp/obsolete/autoload.el     |   2 +-
 lisp/progmodes/c-ts-mode.el   |   4 +-
 lisp/progmodes/csharp-mode.el |   9 ++++
 lisp/replace.el               |   7 ++-
 lisp/simple.el                |  22 +++++---
 lisp/treesit.el               |   8 +++
 lisp/x-dnd.el                 |   5 +-
 src/alloc.c                   |   2 +-
 src/fontset.c                 |   9 ++++
 src/xdisp.c                   |  12 ++++-
 20 files changed, 207 insertions(+), 97 deletions(-)

diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi
index 3b98a93c5aa..3a4ff5baccf 100644
--- a/doc/emacs/mule.texi
+++ b/doc/emacs/mule.texi
@@ -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
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index a5048093869..fb79fe8f3fc 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -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}
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index db78895bb5b..bccdea72b19 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -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
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 2b1a2a1f500..80fdae04fab 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -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
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 4b957a68401..5d59387fb1f 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -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,}
diff --git a/etc/EGLOT-NEWS b/etc/EGLOT-NEWS
index 37ee94f1730..569481a8dc1 100644
--- a/etc/EGLOT-NEWS
+++ b/etc/EGLOT-NEWS
@@ -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.
 
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 84e131147cd..3c6a215c9dc 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -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)
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index 417c218c6d7..4e021f738b6 100644
--- a/lisp/emacs-lisp/lisp.el
+++ b/lisp/emacs-lisp/lisp.el
@@ -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
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index 421947b528d..beca0bd00e2 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -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,
diff --git a/lisp/leim/quail/persian.el b/lisp/leim/quail/persian.el
index 2915f362ee6..758d2951292 100644
--- a/lisp/leim/quail/persian.el
+++ b/lisp/leim/quail/persian.el
@@ -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)
diff --git a/lisp/obsolete/autoload.el b/lisp/obsolete/autoload.el
index fae5db0fd52..ecf931d0881 100644
--- a/lisp/obsolete/autoload.el
+++ b/lisp/obsolete/autoload.el
@@ -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.)
 
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 6fd08303b2b..5c0a1443823 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -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")))
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index 160a3f42cf8..d58d989f772 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -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))
diff --git a/lisp/replace.el b/lisp/replace.el
index 3c2b925ea92..1555731f6e3 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -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))
diff --git a/lisp/simple.el b/lisp/simple.el
index 58517dd81f9..73c2dfa365d 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -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))
diff --git a/lisp/treesit.el b/lisp/treesit.el
index e9ca45c0d6c..2e6c77f64d5 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -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.
 
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index 9286a1858cf..acfbbed9677 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -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)
 
diff --git a/src/alloc.c b/src/alloc.c
index d09fc41dec6..6391ede8d0a 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -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.  */
diff --git a/src/fontset.c b/src/fontset.c
index f196dee8259..c0e00cfa346 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -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));
diff --git a/src/xdisp.c b/src/xdisp.c
index 2817fc45993..28f8e8128c5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]