diff options
| author | Eli Zaretskii | 2023-09-16 07:36:49 -0400 |
|---|---|---|
| committer | Eli Zaretskii | 2023-09-16 07:36:49 -0400 |
| commit | 302bc23f7cb9fbde7f225650d833e1c09da97338 (patch) | |
| tree | 127047d962b30405980589a95412338f513c1353 | |
| parent | f44c1969b6fae3651ca6cc5e077e5f6430a6b57b (diff) | |
| parent | 755ae813a6adf203d4a602a3e7fc0b9ed547be8c (diff) | |
| download | emacs-302bc23f7cb9fbde7f225650d833e1c09da97338.tar.gz emacs-302bc23f7cb9fbde7f225650d833e1c09da97338.zip | |
Merge from origin/emacs-29
755ae813a6a ; Declare some treesit.c functions in typescript-ts-mode.el.
89fa204b706 Fix loss of encrypted data in plstore.el
d9a1175a611 Close SQL database when corresponding 'sqlite-mode' buffe...
cbd8fac283a Fix Unicode normalization of characters
825be05b379 Support one-time passwords in Tramp
f880b94e649 Fix the 'C' and 'c' categories of characters
58fd212d8a2 Fix Emoji zooming commands
8970cdd009a ; Fix last change.
ba924be4522 ; * etc/DEBUG: Improve the redisplay section.
e110312ad95 ; * doc/lispref/minibuf.texi (Text from Minibuffer): Ment...
65f4810003b tsx-ts-mode--font-lock-compatibility-bb1f97b: Improve
6fe11b88ed0 Avoid using --display in emacsclient to reuse frames on PGTK
2fc7463c0e5 ; * INSTALL: Don't advertise -O3. (Bug#65988)
29055412f2d ; Fix doc string of 'lsh'
738d8543337 Support emacsclient on Windows with server on GNU or Unix...
f0a89fa1d0e ; * lisp/saveplace.el (save-place-ignore-files-regexp): F...
c9cb8ee0fc0 Fix defcustom in saveplace.el (Bug#65977)
5ec8be1d589 ; * lisp/subr.el (string-suffix-p, string-prefix-p): Doc ...
809305e6d8f Fix 'window-text-pixel-size' when there are several image...
ea14b0dcc20 : Doc fix.
01e8a0c6cbf Doc fix for prettify-symbols-unprettify-at-point
0065621d0d3 (report_overlay_modification): Fix bug#65929
6cc6455e931 Fix SVG colors (bug#56182)
9396d73942e * doc/emacs/text.texi (Outline Minor Mode): Add a note ab...
a65d1a5a167 Improve documentation of 'list-abbrevs'
5dcc4b7eab1 Tweak s-p-f for js-ts-mode
1fb2fb501f3 typescript-ts-mode, tsx-ts-mode: Fix syntax properties fo...
946b395e7e1 * lisp/progmodes/c-ts-mode.el (c++-ts-mode): Provide (bug...
33ee3e588fd Fix regression of treesit_cursor_helper_1
d11d81dfcc6 ; Fix doc typos (Bug#65868)
6554ec22465 Update docs for passing of Thien-Thi Nguyen
5ab2792d5c1 Update defvar usage tips example in manual
35d88c657e1 Document using Flymake together with Eglot
3f04efe9e7d ; * src/font.h (struct font): Comment about use of averag...
459b5f6b6d1 ; * admin/authors.el (authors-aliases): Update.
0c029ae8bcb ; tweak etc/TODO item
# Conflicts:
# admin/authors.el
# lisp/subr.el
39 files changed, 326 insertions, 223 deletions
| @@ -495,12 +495,12 @@ shell such as Bash, which uses these variables: | |||
| 495 | 495 | ||
| 496 | ./configure \ | 496 | ./configure \ |
| 497 | CPPFLAGS='-I/foo/myinclude' LDFLAGS='-L/bar/mylib' \ | 497 | CPPFLAGS='-I/foo/myinclude' LDFLAGS='-L/bar/mylib' \ |
| 498 | CFLAGS='-O3' LIBS='-lfoo -lbar' | 498 | CFLAGS='-Og' LIBS='-lfoo -lbar' |
| 499 | 499 | ||
| 500 | (this is all one shell command). This tells 'configure' to instruct the | 500 | (this is all one shell command). This tells 'configure' to instruct the |
| 501 | preprocessor to look in the '/foo/myinclude' directory for header | 501 | preprocessor to look in the '/foo/myinclude' directory for header |
| 502 | files (in addition to the standard directories), instruct the linker | 502 | files (in addition to the standard directories), instruct the linker |
| 503 | to look in '/bar/mylib' for libraries, pass the -O3 optimization | 503 | to look in '/bar/mylib' for libraries, pass the -Og optimization |
| 504 | switch to the compiler, and link against libfoo and libbar | 504 | switch to the compiler, and link against libfoo and libbar |
| 505 | libraries in addition to the standard ones. | 505 | libraries in addition to the standard ones. |
| 506 | 506 | ||
diff --git a/Makefile.in b/Makefile.in index fdd9353e254..c82aad1af60 100644 --- a/Makefile.in +++ b/Makefile.in | |||
| @@ -843,6 +843,9 @@ EMACS_ICON=emacs | |||
| 843 | ifeq (${USE_STARTUP_NOTIFICATION},no) | 843 | ifeq (${USE_STARTUP_NOTIFICATION},no) |
| 844 | USE_STARTUP_NOTIFICATION_SED_CMD=-e "/^StartupNotify=true$$/d" | 844 | USE_STARTUP_NOTIFICATION_SED_CMD=-e "/^StartupNotify=true$$/d" |
| 845 | endif | 845 | endif |
| 846 | ifeq ($(HAVE_PGTK),yes) | ||
| 847 | USE_WAYLAND_DISPLAY_SED_CMD=-e "s/display=[^ ]*/reuse-frame/" | ||
| 848 | endif | ||
| 846 | install-etc: | 849 | install-etc: |
| 847 | umask 022; ${MKDIR_P} "$(DESTDIR)${desktopdir}" | 850 | umask 022; ${MKDIR_P} "$(DESTDIR)${desktopdir}" |
| 848 | tmp=etc/emacs.tmpdesktop; rm -f $${tmp}; \ | 851 | tmp=etc/emacs.tmpdesktop; rm -f $${tmp}; \ |
| @@ -857,6 +860,7 @@ install-etc: | |||
| 857 | sed -e "/^Exec=/ s|emacsclient|${bindir}/$${client_name}|" \ | 860 | sed -e "/^Exec=/ s|emacsclient|${bindir}/$${client_name}|" \ |
| 858 | -e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \ | 861 | -e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \ |
| 859 | $(USE_STARTUP_NOTIFICATION_SED_CMD) \ | 862 | $(USE_STARTUP_NOTIFICATION_SED_CMD) \ |
| 863 | $(USE_WAYLAND_DISPLAY_SED_CMD) \ | ||
| 860 | ${srcdir}/etc/emacsclient.desktop > $${tmp}; \ | 864 | ${srcdir}/etc/emacsclient.desktop > $${tmp}; \ |
| 861 | ${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}.desktop"; \ | 865 | ${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}.desktop"; \ |
| 862 | rm -f $${tmp} | 866 | rm -f $${tmp} |
| @@ -870,6 +874,7 @@ install-etc: | |||
| 870 | client_name=`echo emacsclient | sed '$(TRANSFORM)'`${EXEEXT}; \ | 874 | client_name=`echo emacsclient | sed '$(TRANSFORM)'`${EXEEXT}; \ |
| 871 | sed -e "/^Exec=/ s|emacsclient|${bindir}/$${client_name}|" \ | 875 | sed -e "/^Exec=/ s|emacsclient|${bindir}/$${client_name}|" \ |
| 872 | -e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \ | 876 | -e "/^Icon=emacs/ s/emacs/${EMACS_NAME}/" \ |
| 877 | $(USE_WAYLAND_DISPLAY_SED_CMD) \ | ||
| 873 | ${srcdir}/etc/emacsclient-mail.desktop > $${tmp}; \ | 878 | ${srcdir}/etc/emacsclient-mail.desktop > $${tmp}; \ |
| 874 | ${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}-mail.desktop"; \ | 879 | ${INSTALL_DATA} $${tmp} "$(DESTDIR)${desktopdir}/$${client_name}-mail.desktop"; \ |
| 875 | rm -f $${tmp} | 880 | rm -f $${tmp} |
diff --git a/admin/authors.el b/admin/authors.el index f1c988cc776..679ddf08085 100644 --- a/admin/authors.el +++ b/admin/authors.el | |||
| @@ -90,6 +90,8 @@ files.") | |||
| 90 | ("Etienne Prud’Homme" "Etienne Prud'Homme") | 90 | ("Etienne Prud’Homme" "Etienne Prud'Homme") |
| 91 | ("Fabián Ezequiel Gallina" "Fabian Ezequiel Gallina" "Fabi.n E\\. Gallina") | 91 | ("Fabián Ezequiel Gallina" "Fabian Ezequiel Gallina" "Fabi.n E\\. Gallina") |
| 92 | (nil "felix.*EmacsWiki") | 92 | (nil "felix.*EmacsWiki") |
| 93 | (nil "felix\\.dick@web\\.de") | ||
| 94 | ("Felicián Németh" "Felician Nemeth") | ||
| 93 | (nil "foudfou") | 95 | (nil "foudfou") |
| 94 | ("Francis Litterio" "Fran Litterio") | 96 | ("Francis Litterio" "Fran Litterio") |
| 95 | ("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright") | 97 | ("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright") |
| @@ -98,6 +100,8 @@ files.") | |||
| 98 | ("Frederic Pierresteguy" "Fred Pierresteguy") | 100 | ("Frederic Pierresteguy" "Fred Pierresteguy") |
| 99 | (nil "^FSF") | 101 | (nil "^FSF") |
| 100 | ("Gerd Möllmann" "Gerd Moellmann") | 102 | ("Gerd Möllmann" "Gerd Moellmann") |
| 103 | (nil "haqle314") | ||
| 104 | ("Grégoire Jadi" "Gregoire Jadi") | ||
| 101 | ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth") | 105 | ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth") |
| 102 | ("Hrvoje Nikšić" "Hrvoje Niksic") | 106 | ("Hrvoje Nikšić" "Hrvoje Niksic") |
| 103 | ("Ian Dunn" "^Ian D\\>") | 107 | ("Ian Dunn" "^Ian D\\>") |
| @@ -109,6 +113,7 @@ files.") | |||
| 109 | ("J. Alexander Branham" "Alex Branham") | 113 | ("J. Alexander Branham" "Alex Branham") |
| 110 | ("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn") | 114 | ("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn") |
| 111 | ("Jan Djärv" "Jan D\\>" "Jan Djarv") | 115 | ("Jan Djärv" "Jan D\\>" "Jan Djarv") |
| 116 | ("Jan Synáček" "Jan Synacek") | ||
| 112 | ("João Távora" "João Tãvora") | 117 | ("João Távora" "João Tãvora") |
| 113 | ("Jay K. Adams" "Jay Adams") | 118 | ("Jay K. Adams" "Jay Adams") |
| 114 | ("J.D. Smith" "Jd Smith") | 119 | ("J.D. Smith" "Jd Smith") |
| @@ -119,6 +124,7 @@ files.") | |||
| 119 | ("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard") | 124 | ("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard") |
| 120 | ("Jérémy Compostella" "Jeremy Compostella") | 125 | ("Jérémy Compostella" "Jeremy Compostella") |
| 121 | ("Jimmy Aguilar Mena" "Ergus") | 126 | ("Jimmy Aguilar Mena" "Ergus") |
| 127 | ("Jindřich Makovička" "Jindrich Makovicka") | ||
| 122 | ("Johan Bockgård" "Johan Bockgard") | 128 | ("Johan Bockgård" "Johan Bockgard") |
| 123 | ("John F. Carr" "John F Carr") | 129 | ("John F. Carr" "John F Carr") |
| 124 | ("John J Foerch" "John Foerch") | 130 | ("John J Foerch" "John Foerch") |
| @@ -140,6 +146,10 @@ files.") | |||
| 140 | ("Kenichi Handa" "Ken'ichi Handa" "Kenichi HANDA" "K\\. Handa") | 146 | ("Kenichi Handa" "Ken'ichi Handa" "Kenichi HANDA" "K\\. Handa") |
| 141 | ("Kevin Greiner" "Kevin J. Greiner") | 147 | ("Kevin Greiner" "Kevin J. Greiner") |
| 142 | ("Kim F. Storm" "Kim Storm") | 148 | ("Kim F. Storm" "Kim Storm") |
| 149 | ("Kjartan Óli Ágústsson" "Kjartan Oli Agustsson") | ||
| 150 | ;; The dash is a kludge, so this contributor is not ignored. | ||
| 151 | ("kobarity-" "kobarity@gmail\\.com") | ||
| 152 | ("Koen van Greevenbroek" "realcomplex" "koenvg@posteo\\.net") | ||
| 143 | ("Kyle Jones" "Kyle E. Jones") | 153 | ("Kyle Jones" "Kyle E. Jones") |
| 144 | ("Lars Magne Ingebrigtsen" "Lars Ingebrigtsen") | 154 | ("Lars Magne Ingebrigtsen" "Lars Ingebrigtsen") |
| 145 | (nil "LynX@bk.ru") | 155 | (nil "LynX@bk.ru") |
diff --git a/admin/notes/unicode b/admin/notes/unicode index da4736c43c6..f51393e8d4e 100644 --- a/admin/notes/unicode +++ b/admin/notes/unicode | |||
| @@ -93,6 +93,11 @@ might need to be updated because it knows about used and unused ranges | |||
| 93 | of Unicode codepoints, which a new release of the Unicode Standard | 93 | of Unicode codepoints, which a new release of the Unicode Standard |
| 94 | could change. | 94 | could change. |
| 95 | 95 | ||
| 96 | The data used by ucs-normalize.el might need to be updated. | ||
| 97 | Specifically, the values of 'ucs-normalize-composition-exclusions' and | ||
| 98 | 'check-range", defined at the beginning of ucs-normalize.el, should be | ||
| 99 | verified against the latest Unicode data files. | ||
| 100 | |||
| 96 | Next, test normalization functions against NormalizationTests.txt, | 101 | Next, test normalization functions against NormalizationTests.txt, |
| 97 | in the test/ directory run: | 102 | in the test/ directory run: |
| 98 | 103 | ||
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi index 3678377e9b5..6c171d47427 100644 --- a/doc/emacs/abbrevs.texi +++ b/doc/emacs/abbrevs.texi | |||
| @@ -275,6 +275,8 @@ Edit a list of abbrevs; you can add, alter or remove definitions. | |||
| 275 | 275 | ||
| 276 | @example | 276 | @example |
| 277 | @var{various other tables@dots{}} | 277 | @var{various other tables@dots{}} |
| 278 | (python-mode-skeleton-abbrev-table) | ||
| 279 | "class" (sys) 0 "" python-skeleton-class | ||
| 278 | (lisp-mode-abbrev-table) | 280 | (lisp-mode-abbrev-table) |
| 279 | "ks" 0 "keymap-set" | 281 | "ks" 0 "keymap-set" |
| 280 | (global-abbrev-table) | 282 | (global-abbrev-table) |
| @@ -297,11 +299,14 @@ keeps track of this to help you see which abbrevs you actually use, so | |||
| 297 | that you can eliminate those that you don't use often. The string at | 299 | that you can eliminate those that you don't use often. The string at |
| 298 | the end of the line is the expansion. | 300 | the end of the line is the expansion. |
| 299 | 301 | ||
| 300 | Some abbrevs are marked with @samp{(sys)}. These @dfn{system abbrevs} | 302 | Some abbrevs are marked with @samp{(sys)}. These @dfn{system |
| 301 | (@pxref{Abbrevs,,, elisp, The Emacs Lisp Reference Manual}) are | 303 | abbrevs} (@pxref{Abbrevs,,, elisp, The Emacs Lisp Reference Manual}) |
| 302 | pre-defined by various modes, and are not saved to your abbrev file. | 304 | are pre-defined by various modes, and are not saved to your abbrev |
| 303 | To disable a system abbrev, define an abbrev of the same name that | 305 | file. To disable a system abbrev, define an abbrev of the same name |
| 304 | expands to itself, and save it to your abbrev file. | 306 | that expands to itself, and save it to your abbrev file. The system |
| 307 | abbrevs have an associated hook function, which is called to perform | ||
| 308 | the abbrev expansion; the name of that function follows the abbrev | ||
| 309 | expansion in the buffer shown by @code{list-abbrevs}. | ||
| 305 | 310 | ||
| 306 | @findex edit-abbrevs | 311 | @findex edit-abbrevs |
| 307 | @kindex C-c C-c @r{(Edit Abbrevs)} | 312 | @kindex C-c C-c @r{(Edit Abbrevs)} |
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index b21d1e766ef..483ea3306a3 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi | |||
| @@ -906,6 +906,11 @@ Thomas Neumann and Eric S. Raymond wrote @file{make-mode.el}, | |||
| 906 | a mode for editing makefiles. | 906 | a mode for editing makefiles. |
| 907 | 907 | ||
| 908 | @item | 908 | @item |
| 909 | Thien-Thi Nguyen wrote the @samp{xpm}, @samp{gnugo}, and | ||
| 910 | @samp{ascii-art-to-unicode} packages. He also made substantial | ||
| 911 | contributions to many others, such as @file{vc.el}. | ||
| 912 | |||
| 913 | @item | ||
| 909 | Thien-Thi Nguyen and Dan Nicolaescu wrote @file{hideshow.el}, a minor | 914 | Thien-Thi Nguyen and Dan Nicolaescu wrote @file{hideshow.el}, a minor |
| 910 | mode for selectively displaying blocks of text. | 915 | mode for selectively displaying blocks of text. |
| 911 | 916 | ||
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 456e2087217..23dcc44a928 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi | |||
| @@ -626,7 +626,7 @@ button. | |||
| 626 | the theme file and asks if you really want to load it. Because | 626 | the theme file and asks if you really want to load it. Because |
| 627 | loading a Custom theme can execute arbitrary Lisp code, you should | 627 | loading a Custom theme can execute arbitrary Lisp code, you should |
| 628 | only say yes if you know that the theme is safe; in that case, Emacs | 628 | only say yes if you know that the theme is safe; in that case, Emacs |
| 629 | offers to remember in the future that the theme is safe(this is done | 629 | offers to remember in the future that the theme is safe (this is done |
| 630 | by saving the theme file's SHA-256 hash to the variable | 630 | by saving the theme file's SHA-256 hash to the variable |
| 631 | @code{custom-safe-themes}; if you want to treat all themes as safe, | 631 | @code{custom-safe-themes}; if you want to treat all themes as safe, |
| 632 | change its value to @code{t}). Themes that come with Emacs (in the | 632 | change its value to @code{t}). Themes that come with Emacs (in the |
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi index 3d3f2562617..6f57bae8fef 100644 --- a/doc/emacs/text.texi +++ b/doc/emacs/text.texi | |||
| @@ -1024,10 +1024,11 @@ addition to ellipsis, to show that a section is hidden. Clicking the | |||
| 1024 | mouse on the button toggles display of the section. If the value of | 1024 | mouse on the button toggles display of the section. If the value of |
| 1025 | this variable is @code{insert}, the buttons are inserted directly into | 1025 | this variable is @code{insert}, the buttons are inserted directly into |
| 1026 | the buffer text, so @key{RET} on the button will also toggle display | 1026 | the buffer text, so @key{RET} on the button will also toggle display |
| 1027 | of the section, like a mouse click does. If the value is | 1027 | of the section, like a mouse click does. Using the value @code{insert} |
| 1028 | @code{in-margins}, Outline minor mode will use the window margins to | 1028 | is not recommended in editable buffers because it modifies them. |
| 1029 | indicate that a section is hidden. The buttons are customizable as icons | 1029 | If the value is @code{in-margins}, Outline minor mode will use the |
| 1030 | (@pxref{Icons}). | 1030 | window margins to indicate that a section is hidden. The buttons are |
| 1031 | customizable as icons (@pxref{Icons}). | ||
| 1031 | 1032 | ||
| 1032 | @vindex outline-minor-mode-cycle | 1033 | @vindex outline-minor-mode-cycle |
| 1033 | If the @code{outline-minor-mode-cycle} user option is | 1034 | If the @code{outline-minor-mode-cycle} user option is |
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi index 0057979778f..5a824649d42 100644 --- a/doc/lispref/compile.texi +++ b/doc/lispref/compile.texi | |||
| @@ -422,7 +422,7 @@ execution of the compiled file. For example, | |||
| 422 | @lisp | 422 | @lisp |
| 423 | (eval-when-compile | 423 | (eval-when-compile |
| 424 | (unless (fboundp 'some-new-thing) | 424 | (unless (fboundp 'some-new-thing) |
| 425 | (defmacro 'some-new-thing () | 425 | (defmacro some-new-thing () |
| 426 | (compatibility code)))) | 426 | (compatibility code)))) |
| 427 | @end lisp | 427 | @end lisp |
| 428 | 428 | ||
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index 99bc10677cd..d4b1c4f2b3e 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi | |||
| @@ -90,7 +90,7 @@ Manual}. | |||
| 90 | (kbd "C-x C-f") @result{} "\C-x\C-f" | 90 | (kbd "C-x C-f") @result{} "\C-x\C-f" |
| 91 | (kbd "C-x 4 C-f") @result{} "\C-x4\C-f" | 91 | (kbd "C-x 4 C-f") @result{} "\C-x4\C-f" |
| 92 | (kbd "X") @result{} "X" | 92 | (kbd "X") @result{} "X" |
| 93 | (kbd "RET") @result{} "\^M" | 93 | (kbd "RET") @result{} "^M" |
| 94 | (kbd "C-c SPC") @result{} "\C-c@ " | 94 | (kbd "C-c SPC") @result{} "\C-c@ " |
| 95 | (kbd "<f1> SPC") @result{} [f1 32] | 95 | (kbd "<f1> SPC") @result{} [f1 32] |
| 96 | (kbd "C-M-<down>") @result{} [C-M-down] | 96 | (kbd "C-M-<down>") @result{} [C-M-down] |
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index 6cdfe1bd1cb..be4d7e37261 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi | |||
| @@ -374,6 +374,7 @@ key, so the text properties are only preserved on the last three | |||
| 374 | characters. | 374 | characters. |
| 375 | @end defvar | 375 | @end defvar |
| 376 | 376 | ||
| 377 | @vindex minibuffer-mode-map | ||
| 377 | @defvar minibuffer-local-map | 378 | @defvar minibuffer-local-map |
| 378 | This | 379 | This |
| 379 | @anchor{Definition of minibuffer-local-map} | 380 | @anchor{Definition of minibuffer-local-map} |
| @@ -414,6 +415,9 @@ default, it makes the following bindings: | |||
| 414 | @code{file-cache-minibuffer-complete} | 415 | @code{file-cache-minibuffer-complete} |
| 415 | @end ignore | 416 | @end ignore |
| 416 | @end table | 417 | @end table |
| 418 | |||
| 419 | @noindent | ||
| 420 | The variable @code{minibuffer-mode-map} is an alias for this variable. | ||
| 417 | @end defvar | 421 | @end defvar |
| 418 | 422 | ||
| 419 | @defun read-no-blanks-input prompt &optional initial inherit-input-method | 423 | @defun read-no-blanks-input prompt &optional initial inherit-input-method |
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index 93930d17587..404726e1f92 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi | |||
| @@ -678,15 +678,15 @@ which are being phased out.) | |||
| 678 | it as safe or risky; see @ref{File Local Variables}. | 678 | it as safe or risky; see @ref{File Local Variables}. |
| 679 | 679 | ||
| 680 | When defining and initializing a variable that holds a complicated | 680 | When defining and initializing a variable that holds a complicated |
| 681 | value (such as a keymap with bindings in it), it's best to put the | 681 | value (such as a syntax table for a major mode), it's best to put the |
| 682 | entire computation of the value into the @code{defvar}, like this: | 682 | entire computation of the value into the @code{defvar}, like this: |
| 683 | 683 | ||
| 684 | @example | 684 | @example |
| 685 | (defvar my-mode-map | 685 | (defvar my-major-mode-syntax-table |
| 686 | (let ((map (make-sparse-keymap))) | 686 | (let ((table (make-syntax-table))) |
| 687 | (keymap-set map "C-c C-a" 'my-command) | 687 | (modify-syntax-entry ?# "<" table) |
| 688 | @dots{} | 688 | @dots{} |
| 689 | map) | 689 | table) |
| 690 | @var{docstring}) | 690 | @var{docstring}) |
| 691 | @end example | 691 | @end example |
| 692 | 692 | ||
| @@ -696,9 +696,9 @@ loading the file, the variable is either still uninitialized or | |||
| 696 | initialized properly, never in-between. If it is still uninitialized, | 696 | initialized properly, never in-between. If it is still uninitialized, |
| 697 | reloading the file will initialize it properly. Second, reloading the | 697 | reloading the file will initialize it properly. Second, reloading the |
| 698 | file once the variable is initialized will not alter it; that is | 698 | file once the variable is initialized will not alter it; that is |
| 699 | important if the user has run hooks to alter part of the contents | 699 | important if the user has changed its value. Third, evaluating the |
| 700 | (such as, to rebind keys). Third, evaluating the @code{defvar} form | 700 | @code{defvar} form with @kbd{C-M-x} will reinitialize the variable |
| 701 | with @kbd{C-M-x} will reinitialize the map completely. | 701 | completely. |
| 702 | 702 | ||
| 703 | @node Accessing Variables | 703 | @node Accessing Variables |
| 704 | @section Accessing Variable Values | 704 | @section Accessing Variable Values |
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 237f0702778..e68692afb10 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi | |||
| @@ -59,8 +59,11 @@ types of diagnostics. | |||
| 59 | 59 | ||
| 60 | To learn about using Flymake, @pxref{Using Flymake}. | 60 | To learn about using Flymake, @pxref{Using Flymake}. |
| 61 | 61 | ||
| 62 | Flymake is designed to be easily extended to support new backends via | 62 | When the Emacs LSP support mode Eglot is enabled, Flymake will use |
| 63 | an Elisp interface. @xref{Extending Flymake}. | 63 | that as an additional back-end. @xref{Eglot Features,,, eglot, Eglot: |
| 64 | The Emacs LSP Client} Flymake is also designed to be easily extended | ||
| 65 | to support new backends via an Elisp interface. @xref{Extending | ||
| 66 | Flymake}. | ||
| 64 | 67 | ||
| 65 | Historically, Flymake used to accept diagnostics from a single | 68 | Historically, Flymake used to accept diagnostics from a single |
| 66 | backend. Although obsolete, it is still functional. To learn how to | 69 | backend. Although obsolete, it is still functional. To learn how to |
| @@ -93,6 +96,10 @@ already setup this hook for you, by adding @dfn{backend functions} to | |||
| 93 | @code{flymake-diagnostic-functions}. If you know Elisp you may also | 96 | @code{flymake-diagnostic-functions}. If you know Elisp you may also |
| 94 | write your own Flymake backend functions. @xref{Backend functions}. | 97 | write your own Flymake backend functions. @xref{Backend functions}. |
| 95 | 98 | ||
| 99 | When the Emacs LSP support mode Eglot is enabled, Flymake will use | ||
| 100 | that as an additional back-end automatically. @xref{Eglot Features,,, | ||
| 101 | eglot, Eglot: The Emacs LSP Client} | ||
| 102 | |||
| 96 | @menu | 103 | @menu |
| 97 | * Starting Flymake:: | 104 | * Starting Flymake:: |
| 98 | * Finding diagnostics:: | 105 | * Finding diagnostics:: |
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index ea3bf8570b7..56d5fcd4bf0 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi | |||
| @@ -2436,8 +2436,10 @@ which may not be the same as the local login shell prompt, | |||
| 2436 | @value{tramp} sets a similar default value for both prompts. | 2436 | @value{tramp} sets a similar default value for both prompts. |
| 2437 | 2437 | ||
| 2438 | @item @code{tramp-password-prompt-regexp} | 2438 | @item @code{tramp-password-prompt-regexp} |
| 2439 | @item @code{tramp-otp-password-prompt-regexp} | ||
| 2439 | @item @code{tramp-wrong-passwd-regexp} | 2440 | @item @code{tramp-wrong-passwd-regexp} |
| 2440 | @vindex tramp-password-prompt-regexp | 2441 | @vindex tramp-password-prompt-regexp |
| 2442 | @vindex tramp-otp-password-prompt-regexp | ||
| 2441 | @vindex tramp-wrong-passwd-regexp | 2443 | @vindex tramp-wrong-passwd-regexp |
| 2442 | 2444 | ||
| 2443 | @value{tramp} uses @code{tramp-password-prompt-regexp} to | 2445 | @value{tramp} uses @code{tramp-password-prompt-regexp} to |
| @@ -2471,6 +2473,10 @@ This user option is, by default, initialized from | |||
| 2471 | is usually more convenient to add new passphrases to that user option | 2473 | is usually more convenient to add new passphrases to that user option |
| 2472 | instead of altering this user option. | 2474 | instead of altering this user option. |
| 2473 | 2475 | ||
| 2476 | The user option @code{tramp-otp-password-prompt-regexp} has a similar | ||
| 2477 | purpose, but for one-time passwords. Those passwords are not cached | ||
| 2478 | by @value{tramp} for reuse. | ||
| 2479 | |||
| 2474 | Similar localization may be necessary for handling wrong password | 2480 | Similar localization may be necessary for handling wrong password |
| 2475 | prompts, for which @value{tramp} uses @code{tramp-wrong-passwd-regexp}. | 2481 | prompts, for which @value{tramp} uses @code{tramp-wrong-passwd-regexp}. |
| 2476 | 2482 | ||
| @@ -472,6 +472,16 @@ and, assuming that "xtype" says that args[0] is a symbol: | |||
| 472 | 472 | ||
| 473 | ** Debugging Emacs redisplay problems | 473 | ** Debugging Emacs redisplay problems |
| 474 | 474 | ||
| 475 | The Emacs display code includes special debugging code, but it is normally | ||
| 476 | disabled. Configuring Emacs with --enable-checking='yes,glyphs' enables it. | ||
| 477 | |||
| 478 | Building Emacs like that activates many assertions which scrutinize display | ||
| 479 | code operation more than Emacs does normally. (To see the code which tests | ||
| 480 | these assertions, look for calls to the 'eassert' macros.) Any assertion that | ||
| 481 | is reported to fail should be investigated. Redisplay problems that cause | ||
| 482 | aborts or segfaults in production builds of Emacs will many times be caught by | ||
| 483 | these assertions before they cause a crash. | ||
| 484 | |||
| 475 | If you configured Emacs with --enable-checking='glyphs', you can use redisplay | 485 | If you configured Emacs with --enable-checking='glyphs', you can use redisplay |
| 476 | tracing facilities from a running Emacs session. | 486 | tracing facilities from a running Emacs session. |
| 477 | 487 | ||
| @@ -481,21 +491,18 @@ code paths taken by the display engine under various conditions, especially if | |||
| 481 | some redisplay optimizations produce wrong results. (You know that redisplay | 491 | some redisplay optimizations produce wrong results. (You know that redisplay |
| 482 | optimizations might be involved if "M-x redraw-display RET", or even just | 492 | optimizations might be involved if "M-x redraw-display RET", or even just |
| 483 | typing "M-x", causes Emacs to correct the bad display.) Since the cursor | 493 | typing "M-x", causes Emacs to correct the bad display.) Since the cursor |
| 484 | blinking feature triggers periodic redisplay cycles, we recommend disabling | 494 | blinking feature and ElDoc trigger periodic redisplay cycles, we recommend |
| 485 | 'blink-cursor-mode' before invoking 'trace-redisplay', so that you have less | 495 | disabling 'blink-cursor-mode' and 'global-eldoc-mode' before invoking |
| 486 | clutter in the trace. You can also have up to 30 last trace messages dumped to | 496 | 'trace-redisplay', so that you have less clutter in the trace. You can also |
| 487 | standard error by invoking the 'dump-redisplay-history' command. | 497 | have up to 30 last trace messages dumped to standard error by invoking the |
| 498 | 'dump-redisplay-history' command. | ||
| 488 | 499 | ||
| 489 | To find the code paths which were taken by the display engine, search xdisp.c | 500 | To find the code paths which were taken by the display engine, search xdisp.c |
| 490 | for the trace messages you see. | 501 | for the trace messages you see. |
| 491 | 502 | ||
| 492 | The command 'dump-glyph-matrix' is useful for producing on standard error | 503 | The command 'dump-glyph-matrix' is useful for producing on standard error |
| 493 | stream a full dump of the selected window's glyph matrix. See the function's | 504 | stream a full dump of the selected window's glyph matrix. See the function's |
| 494 | doc string for more details. If you are debugging redisplay issues in | 505 | doc string for more details. |
| 495 | text-mode frames, you may find the command 'dump-frame-glyph-matrix' useful. | ||
| 496 | |||
| 497 | Other commands useful for debugging redisplay are 'dump-glyph-row' and | ||
| 498 | 'dump-tool-bar-row'. | ||
| 499 | 506 | ||
| 500 | If you run Emacs under GDB, you can print the contents of any glyph matrix by | 507 | If you run Emacs under GDB, you can print the contents of any glyph matrix by |
| 501 | just calling that function with the matrix as its argument. For example, the | 508 | just calling that function with the matrix as its argument. For example, the |
| @@ -507,13 +514,11 @@ whose pointer is in 'w': | |||
| 507 | (The second argument 2 tells dump_glyph_matrix to print the glyphs in | 514 | (The second argument 2 tells dump_glyph_matrix to print the glyphs in |
| 508 | a long form.) | 515 | a long form.) |
| 509 | 516 | ||
| 510 | The Emacs display code includes special debugging code, but it is normally | 517 | If you are debugging redisplay issues in text-mode frames, you may find the |
| 511 | disabled. Configuring Emacs with --enable-checking='yes,glyphs' enables it. | 518 | command 'dump-frame-glyph-matrix' useful. |
| 512 | 519 | ||
| 513 | Building Emacs like that activates many assertions which scrutinize | 520 | Other commands useful for debugging redisplay are 'dump-glyph-row' and |
| 514 | display code operation more than Emacs does normally. (To see the | 521 | 'dump-tool-bar-row'. |
| 515 | code which tests these assertions, look for calls to the 'eassert' | ||
| 516 | macros.) Any assertion that is reported to fail should be investigated. | ||
| 517 | 522 | ||
| 518 | When you debug display problems running emacs under X, you can use | 523 | When you debug display problems running emacs under X, you can use |
| 519 | the 'ff' command to flush all pending display updates to the screen. | 524 | the 'ff' command to flush all pending display updates to the screen. |
| @@ -535,36 +540,40 @@ object of the relevant type as argument. For example, 'pgrowx' dumps all | |||
| 535 | glyphs in its argument, which must be of type 'struct glyph_row'. | 540 | glyphs in its argument, which must be of type 'struct glyph_row'. |
| 536 | 541 | ||
| 537 | Since redisplay is performed by Emacs very frequently, you need to place your | 542 | Since redisplay is performed by Emacs very frequently, you need to place your |
| 538 | breakpoints cleverly to avoid hitting them all the time, when the issue you are | 543 | breakpoints cleverly to avoid hitting them all the time, when the issue you |
| 539 | debugging did not (yet) happen. Here are some useful techniques for that: | 544 | are debugging did not (yet) happen. Here are some useful techniques for that: |
| 540 | 545 | ||
| 541 | . Put a breakpoint at 'Fredraw_display' before running Emacs. Then do | 546 | . Put a breakpoint at 'Frecenter' or 'Fredraw_display' before running Emacs. |
| 542 | whatever is required to reproduce the bad display, and invoke "M-x | 547 | Then do whatever is required to reproduce the bad display, and type C-l or |
| 543 | redraw-display". The debugger will kick in, and you can set or enable | 548 | "M-x redraw-display" just before invoking the last action that reproduces |
| 544 | breakpoints in strategic places, knowing that the bad display will be | 549 | the bug. The debugger will kick in, and you can set or enable breakpoints |
| 550 | in strategic places, knowing that the bad display will happen soon. With a | ||
| 551 | breakpoint at 'Fredraw_display', you can even reproduce the bug and invoke | ||
| 552 | "M-x redraw-display" afterwards, knowing that the bad display will be | ||
| 545 | redrawn from scratch. | 553 | redrawn from scratch. |
| 546 | 554 | ||
| 547 | . For debugging incorrect cursor position, a good place to put a breakpoint is | 555 | . For debugging incorrect cursor position, a good place to put a breakpoint |
| 548 | in 'set_cursor_from_row'. The first time this function is called as part of | 556 | is in 'set_cursor_from_row'. The first time this function is called as |
| 549 | 'redraw-display', Emacs is redrawing the minibuffer window, which is usually | 557 | part of 'redraw-display', Emacs is redrawing the minibuffer window, which |
| 550 | not what you want; type "continue" to get to the call you want. In general, | 558 | is usually not what you want; type "continue" to get to the call you want. |
| 551 | always make sure 'set_cursor_from_row' is called for the right window and | 559 | In general, always make sure 'set_cursor_from_row' is called for the right |
| 552 | buffer by examining the value of w->contents: it should be the buffer whose | 560 | window and buffer by examining the value of w->contents: it should be the |
| 553 | display you are debugging. | 561 | buffer whose display you are debugging. |
| 554 | 562 | ||
| 555 | . 'set_cursor_from_row' is also a good place to look at the contents of a | 563 | . 'set_cursor_from_row' is also a good place to look at the contents of a |
| 556 | screen line (a.k.a. "glyph row"), by means of the 'pgrow' GDB command. Of | 564 | screen line (a.k.a. "glyph row"), by means of the 'pgrow' GDB command. Of |
| 557 | course, you need first to make sure the cursor is on the screen line which | 565 | course, you need first to make sure the cursor is on the screen line which |
| 558 | you want to investigate. If you have set a breakpoint in 'Fredraw_display', | 566 | you want to investigate. If you have set a breakpoint in 'Fredraw_display' |
| 559 | as advised above, move cursor to that line before invoking 'redraw-display'. | 567 | or 'Frecenter', as advised above, move cursor to that line before invoking |
| 568 | these commands. | ||
| 560 | 569 | ||
| 561 | . If the problem happens only at some specific buffer position or for some | 570 | . If the problem happens only at some specific buffer position or for some |
| 562 | specific rarely-used character, you can make your breakpoints conditional on | 571 | specific rarely-used character, you can make your breakpoints conditional |
| 563 | those values. The display engine maintains the buffer and string position | 572 | on those values. The display engine maintains the buffer and string |
| 564 | it is processing in the it->current member; for example, the buffer | 573 | position it is processing in the it->current member; for example, the |
| 565 | character position is in it->current.pos.charpos. Most redisplay functions | 574 | buffer character position is in it->current.pos.charpos. Most redisplay |
| 566 | accept a pointer to a 'struct it' object as their argument, so you can make | 575 | functions accept a pointer to a 'struct it' object as their argument, so |
| 567 | conditional breakpoints in those functions, like this: | 576 | you can make conditional breakpoints in those functions, like this: |
| 568 | 577 | ||
| 569 | (gdb) break x_produce_glyphs if it->current.pos.charpos == 1234 | 578 | (gdb) break x_produce_glyphs if it->current.pos.charpos == 1234 |
| 570 | 579 | ||
| @@ -578,6 +587,16 @@ debugging did not (yet) happen. Here are some useful techniques for that: | |||
| 578 | GET_FROM_IMAGE for displaying an image, etc. See 'enum it_method' in | 587 | GET_FROM_IMAGE for displaying an image, etc. See 'enum it_method' in |
| 579 | dispextern.h for the full list of values. | 588 | dispextern.h for the full list of values. |
| 580 | 589 | ||
| 590 | . When the display engine is processing a 'display' text property or an | ||
| 591 | overlay string, it pushes on the iterator stack the state variables | ||
| 592 | describing its iteration of buffer text, then reinitializes the iterator | ||
| 593 | object for processing the property or overlay. The it->sp ("stack | ||
| 594 | pointer") member, if it is greater than zero, means the iterator's stack | ||
| 595 | was pushed at least once. You can therefore condition your breakpoints on | ||
| 596 | the value of it->sp being positive or being of a certain positive value, to | ||
| 597 | debug display problems that happen only with display properties or | ||
| 598 | overlays. | ||
| 599 | |||
| 581 | ** Debugging problems with native-compiled Lisp. | 600 | ** Debugging problems with native-compiled Lisp. |
| 582 | 601 | ||
| 583 | When you encounter problems specific to native-compilation of Lisp, we | 602 | When you encounter problems specific to native-compilation of Lisp, we |
| @@ -452,6 +452,10 @@ reformat the region of source code according to the rules. | |||
| 452 | The next step is to use these rules during editing of files residing | 452 | The next step is to use these rules during editing of files residing |
| 453 | in a directory that has such an indentation-rules spec in it. | 453 | in a directory that has such an indentation-rules spec in it. |
| 454 | 454 | ||
| 455 | For some discussion and implementation ideas (including possibly using | ||
| 456 | LSP), see the thread starting at | ||
| 457 | https://lists.gnu.org/archive/html/emacs-devel/2023-09/msg00609.html | ||
| 458 | |||
| 455 | ** FFI (foreign function interface) | 459 | ** FFI (foreign function interface) |
| 456 | See eg https://lists.gnu.org/r/emacs-devel/2013-10/msg00246.html | 460 | See eg https://lists.gnu.org/r/emacs-devel/2013-10/msg00246.html |
| 457 | 461 | ||
diff --git a/lisp/international/characters.el b/lisp/international/characters.el index 1aa570ca59a..465787d4129 100644 --- a/lisp/international/characters.el +++ b/lisp/international/characters.el | |||
| @@ -141,10 +141,10 @@ with L, LRE, or LRO Unicode bidi character type.") | |||
| 141 | ;; Chinese characters (Unicode) | 141 | ;; Chinese characters (Unicode) |
| 142 | (modify-category-entry '(#x2E80 . #x312F) ?|) | 142 | (modify-category-entry '(#x2E80 . #x312F) ?|) |
| 143 | (modify-category-entry '(#x3190 . #x33FF) ?|) | 143 | (modify-category-entry '(#x3190 . #x33FF) ?|) |
| 144 | (modify-category-entry '(#x3400 . #x4DB5) ?C) | 144 | (modify-category-entry '(#x3400 . #x4DBF) ?C) |
| 145 | (modify-category-entry '(#x4E00 . #x9FD5) ?C) | 145 | (modify-category-entry '(#x4E00 . #x9FFF) ?C) |
| 146 | (modify-category-entry '(#x3400 . #x9FD5) ?c) | 146 | (modify-category-entry '(#x3400 . #x9FFF) ?c) |
| 147 | (modify-category-entry '(#x3400 . #x9FD5) ?|) | 147 | (modify-category-entry '(#x3400 . #x9FFF) ?|) |
| 148 | (modify-category-entry '(#xF900 . #xFAFF) ?C) | 148 | (modify-category-entry '(#xF900 . #xFAFF) ?C) |
| 149 | (modify-category-entry '(#xF900 . #xFAFF) ?c) | 149 | (modify-category-entry '(#xF900 . #xFAFF) ?c) |
| 150 | (modify-category-entry '(#xF900 . #xFAFF) ?|) | 150 | (modify-category-entry '(#xF900 . #xFAFF) ?|) |
diff --git a/lisp/international/emoji.el b/lisp/international/emoji.el index 2deb44c6412..8bb31e15b61 100644 --- a/lisp/international/emoji.el +++ b/lisp/international/emoji.el | |||
| @@ -715,10 +715,14 @@ FACTOR is the multiplication factor for the size." | |||
| 715 | (add-text-properties | 715 | (add-text-properties |
| 716 | (point) (1+ (point)) | 716 | (point) (1+ (point)) |
| 717 | (list 'face | 717 | (list 'face |
| 718 | (if (eq (car old) :height) | 718 | (cond |
| 719 | (plist-put (copy-sequence old) :height newheight) | 719 | ((eq (car old) :height) |
| 720 | (plist-put (copy-sequence old) :height newheight)) | ||
| 721 | ((plistp (car old)) | ||
| 720 | (cons (plist-put (car old) :height newheight) | 722 | (cons (plist-put (car old) :height newheight) |
| 721 | (cdr old))) | 723 | (cdr old))) |
| 724 | (t | ||
| 725 | (append (list (list :height newheight)) old))) | ||
| 722 | 'rear-nonsticky t)) | 726 | 'rear-nonsticky t)) |
| 723 | (add-face-text-property (point) (1+ (point)) | 727 | (add-face-text-property (point) (1+ (point)) |
| 724 | (list :height newheight)) | 728 | (list :height newheight)) |
diff --git a/lisp/international/ucs-normalize.el b/lisp/international/ucs-normalize.el index aed7a6a1392..67e8ab428e9 100644 --- a/lisp/international/ucs-normalize.el +++ b/lisp/international/ucs-normalize.el | |||
| @@ -131,11 +131,19 @@ | |||
| 131 | #x1D1BF #x1D1C0) | 131 | #x1D1BF #x1D1C0) |
| 132 | "Composition Exclusion List. | 132 | "Composition Exclusion List. |
| 133 | This list is taken from | 133 | This list is taken from |
| 134 | https://www.unicode.org/Public/UNIDATA/5.2/CompositionExclusions.txt") | 134 | https://www.unicode.org/Public/UNIDATA/15.0/CompositionExclusions.txt") |
| 135 | |||
| 136 | ;; Unicode ranges where decompositions & combining characters are | ||
| 137 | ;; defined. Find them by running the following Awk program on | ||
| 138 | ;; UnicodeData.txt: | ||
| 139 | ;; | ||
| 140 | ;; gawk -F";" "$6 != \"\" {print $0}" | ||
| 135 | 141 | ||
| 136 | ;; Unicode ranges that decompositions & combining characters are defined. | ||
| 137 | (defvar check-range nil) | 142 | (defvar check-range nil) |
| 138 | (setq check-range '((#x00a0 . #x3400) (#xA600 . #xAC00) (#xF900 . #x110ff) (#x1d000 . #x1dfff) (#x1f100 . #x1f2ff) (#x2f800 . #x2faff))) | 143 | (setq check-range |
| 144 | '((#x00A0 . #x3400) (#xA600 . #xAC00) (#xF900 . #x11100) | ||
| 145 | (#x11100 . #x11A00) (#x1D000 . #x1E100) (#x1EE00 . #x1F300) | ||
| 146 | (#x1FBF0 . #x1FC00) (#x2F800 . #x2FB00))) | ||
| 139 | 147 | ||
| 140 | ;; Basic normalization functions | 148 | ;; Basic normalization functions |
| 141 | (defun nfd (char) | 149 | (defun nfd (char) |
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 88c42d248a8..c42d9fd0529 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el | |||
| @@ -540,6 +540,7 @@ shell from reading its init file." | |||
| 540 | (defconst tramp-actions-before-shell | 540 | (defconst tramp-actions-before-shell |
| 541 | '((tramp-login-prompt-regexp tramp-action-login) | 541 | '((tramp-login-prompt-regexp tramp-action-login) |
| 542 | (tramp-password-prompt-regexp tramp-action-password) | 542 | (tramp-password-prompt-regexp tramp-action-password) |
| 543 | (tramp-otp-password-prompt-regexp tramp-action-otp-password) | ||
| 543 | (tramp-wrong-passwd-regexp tramp-action-permission-denied) | 544 | (tramp-wrong-passwd-regexp tramp-action-permission-denied) |
| 544 | (shell-prompt-pattern tramp-action-succeed) | 545 | (shell-prompt-pattern tramp-action-succeed) |
| 545 | (tramp-shell-prompt-pattern tramp-action-succeed) | 546 | (tramp-shell-prompt-pattern tramp-action-succeed) |
| @@ -563,6 +564,7 @@ corresponding PATTERN matches, the ACTION function is called.") | |||
| 563 | 564 | ||
| 564 | (defconst tramp-actions-copy-out-of-band | 565 | (defconst tramp-actions-copy-out-of-band |
| 565 | '((tramp-password-prompt-regexp tramp-action-password) | 566 | '((tramp-password-prompt-regexp tramp-action-password) |
| 567 | (tramp-otp-password-prompt-regexp tramp-action-otp-password) | ||
| 566 | (tramp-wrong-passwd-regexp tramp-action-permission-denied) | 568 | (tramp-wrong-passwd-regexp tramp-action-permission-denied) |
| 567 | (tramp-copy-failed-regexp tramp-action-permission-denied) | 569 | (tramp-copy-failed-regexp tramp-action-permission-denied) |
| 568 | (tramp-security-key-confirm-regexp tramp-action-show-and-confirm-message) | 570 | (tramp-security-key-confirm-regexp tramp-action-show-and-confirm-message) |
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 9ec3f9cb397..5faf1e2647a 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el | |||
| @@ -659,6 +659,16 @@ The `sudo' program appears to insert a `^@' character into the prompt." | |||
| 659 | :version "29.1" | 659 | :version "29.1" |
| 660 | :type 'regexp) | 660 | :type 'regexp) |
| 661 | 661 | ||
| 662 | (defcustom tramp-otp-password-prompt-regexp | ||
| 663 | (rx bol (* nonl) | ||
| 664 | ;; JumpCloud. | ||
| 665 | (group (| "Verification code")) | ||
| 666 | (* nonl) (any "::៖") (* blank)) | ||
| 667 | "Regexp matching one-time password prompts. | ||
| 668 | The regexp should match at end of buffer." | ||
| 669 | :version "29.2" | ||
| 670 | :type 'regexp) | ||
| 671 | |||
| 662 | (defcustom tramp-wrong-passwd-regexp | 672 | (defcustom tramp-wrong-passwd-regexp |
| 663 | (rx bol (* nonl) | 673 | (rx bol (* nonl) |
| 664 | (| "Permission denied" | 674 | (| "Permission denied" |
| @@ -5366,6 +5376,25 @@ of." | |||
| 5366 | (narrow-to-region (point-max) (point-max)))) | 5376 | (narrow-to-region (point-max) (point-max)))) |
| 5367 | t) | 5377 | t) |
| 5368 | 5378 | ||
| 5379 | (defun tramp-action-otp-password (proc vec) | ||
| 5380 | "Query the user for a one-time password." | ||
| 5381 | (with-current-buffer (process-buffer proc) | ||
| 5382 | (let ((case-fold-search t) | ||
| 5383 | prompt) | ||
| 5384 | (goto-char (point-min)) | ||
| 5385 | (tramp-check-for-regexp proc tramp-process-action-regexp) | ||
| 5386 | (setq prompt (concat (match-string 1) " ")) | ||
| 5387 | (tramp-message vec 3 "Sending %s" (match-string 1)) | ||
| 5388 | ;; We don't call `tramp-send-string' in order to hide the | ||
| 5389 | ;; password from the debug buffer and the traces. | ||
| 5390 | (process-send-string | ||
| 5391 | proc | ||
| 5392 | (concat | ||
| 5393 | (tramp-read-passwd-without-cache proc prompt) tramp-local-end-of-line)) | ||
| 5394 | ;; Hide password prompt. | ||
| 5395 | (narrow-to-region (point-max) (point-max)))) | ||
| 5396 | t) | ||
| 5397 | |||
| 5369 | (defun tramp-action-succeed (_proc _vec) | 5398 | (defun tramp-action-succeed (_proc _vec) |
| 5370 | "Signal success in finding shell prompt." | 5399 | "Signal success in finding shell prompt." |
| 5371 | (throw 'tramp-action 'ok)) | 5400 | (throw 'tramp-action 'ok)) |
diff --git a/lisp/outline.el b/lisp/outline.el index 97a51c9b92a..d8dd491212e 100644 --- a/lisp/outline.el +++ b/lisp/outline.el | |||
| @@ -314,12 +314,15 @@ These buttons can be used to hide and show the body under the heading. | |||
| 314 | When the value is `insert', additional placeholders for buttons are | 314 | When the value is `insert', additional placeholders for buttons are |
| 315 | inserted to the buffer, so buttons are not only clickable, | 315 | inserted to the buffer, so buttons are not only clickable, |
| 316 | but also typing `RET' on them can hide and show the body. | 316 | but also typing `RET' on them can hide and show the body. |
| 317 | Using the value `insert' is not recommended in editable | ||
| 318 | buffers because it modifies them. | ||
| 317 | When the value is `in-margins', then clickable buttons are | 319 | When the value is `in-margins', then clickable buttons are |
| 318 | displayed in the margins before the headings. | 320 | displayed in the margins before the headings. |
| 319 | When the value is `t', clickable buttons are displayed | 321 | When the value is `t', clickable buttons are displayed |
| 320 | in the buffer before the headings. The values `t' and | 322 | in the buffer before the headings. The values `t' and |
| 321 | `in-margins' can be used in editing buffers because they | 323 | `in-margins' can be used in editing buffers because they |
| 322 | don't modify the buffer." | 324 | don't modify the buffer." |
| 325 | ;; The value `insert' is not intended to be customizable. | ||
| 323 | :type '(choice (const :tag "Do not use outline buttons" nil) | 326 | :type '(choice (const :tag "Do not use outline buttons" nil) |
| 324 | (const :tag "Show outline buttons in margins" in-margins) | 327 | (const :tag "Show outline buttons in margins" in-margins) |
| 325 | (const :tag "Show outline buttons in buffer" t)) | 328 | (const :tag "Show outline buttons in buffer" t)) |
diff --git a/lisp/play/zone.el b/lisp/play/zone.el index 235c6f4e7b5..b8a83baa44b 100644 --- a/lisp/play/zone.el +++ b/lisp/play/zone.el | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | ;; Copyright (C) 2000-2023 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2000-2023 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Victor Zandy <zandy@cs.wisc.edu> | 5 | ;; Author: Victor Zandy <zandy@cs.wisc.edu> |
| 6 | ;; Maintainer: Thien-Thi Nguyen <ttn@gnu.org> | 6 | ;; Maintainer: emacs-devel@gnu.org |
| 7 | ;; Keywords: games | 7 | ;; Keywords: games |
| 8 | ;; Created: June 6, 1998 | 8 | ;; Created: June 6, 1998 |
| 9 | 9 | ||
diff --git a/lisp/plstore.el b/lisp/plstore.el index 7dc991aeec7..758f9fc7292 100644 --- a/lisp/plstore.el +++ b/lisp/plstore.el | |||
| @@ -570,18 +570,23 @@ SECRET-KEYS is a plist containing secret data." | |||
| 570 | 570 | ||
| 571 | (defvar pp-escape-newlines) | 571 | (defvar pp-escape-newlines) |
| 572 | (defun plstore--insert-buffer (plstore) | 572 | (defun plstore--insert-buffer (plstore) |
| 573 | "Insert the file representation of PLSTORE at point. | 573 | "Insert the file representation of PLSTORE at point." |
| 574 | Assumes that PLSTORE has been decrypted." | ||
| 575 | (insert ";;; public entries -*- mode: plstore -*- \n" | 574 | (insert ";;; public entries -*- mode: plstore -*- \n" |
| 576 | (pp-to-string (plstore--get-alist plstore))) | 575 | (pp-to-string (plstore--get-alist plstore))) |
| 577 | (if (plstore--get-secret-alist plstore) | 576 | (let ((pp-escape-newlines nil) |
| 577 | (cipher nil)) | ||
| 578 | (cond | ||
| 579 | ;; Reuse the encrypted data as cipher text if this store has not | ||
| 580 | ;; been decrypted yet. | ||
| 581 | ((plstore--get-encrypted-data plstore) | ||
| 582 | (setq cipher (plstore--get-encrypted-data plstore))) | ||
| 583 | ;; Encrypt the secret alist to generate the cipher text. | ||
| 584 | ((plstore--get-secret-alist plstore) | ||
| 578 | (let ((context (epg-make-context 'OpenPGP)) | 585 | (let ((context (epg-make-context 'OpenPGP)) |
| 579 | (pp-escape-newlines nil) | ||
| 580 | (recipients | 586 | (recipients |
| 581 | (cond | 587 | (cond |
| 582 | ((listp plstore-encrypt-to) plstore-encrypt-to) | 588 | ((listp plstore-encrypt-to) plstore-encrypt-to) |
| 583 | ((stringp plstore-encrypt-to) (list plstore-encrypt-to)))) | 589 | ((stringp plstore-encrypt-to) (list plstore-encrypt-to))))) |
| 584 | cipher) | ||
| 585 | (setf (epg-context-armor context) t) | 590 | (setf (epg-context-armor context) t) |
| 586 | (epg-context-set-passphrase-callback | 591 | (epg-context-set-passphrase-callback |
| 587 | context | 592 | context |
| @@ -601,9 +606,10 @@ Assumes that PLSTORE has been decrypted." | |||
| 601 | If no one is selected, symmetric encryption will be performed. " | 606 | If no one is selected, symmetric encryption will be performed. " |
| 602 | recipients) | 607 | recipients) |
| 603 | (if plstore-encrypt-to | 608 | (if plstore-encrypt-to |
| 604 | (epg-list-keys context recipients))))) | 609 | (epg-list-keys context recipients)))))))) |
| 605 | (goto-char (point-max)) | 610 | (when cipher |
| 606 | (insert ";;; secret entries\n" (pp-to-string cipher))))) | 611 | (goto-char (point-max)) |
| 612 | (insert ";;; secret entries\n" (pp-to-string cipher))))) | ||
| 607 | 613 | ||
| 608 | (defun plstore-save (plstore) | 614 | (defun plstore-save (plstore) |
| 609 | "Save PLSTORE to its associated file. | 615 | "Save PLSTORE to its associated file. |
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 8f526647436..70717a90caa 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el | |||
| @@ -1418,5 +1418,6 @@ the code is C or C++ and based on that chooses whether to enable | |||
| 1418 | (add-to-list 'auto-mode-alist '("\\.h\\'" . c-or-c++-ts-mode))) | 1418 | (add-to-list 'auto-mode-alist '("\\.h\\'" . c-or-c++-ts-mode))) |
| 1419 | 1419 | ||
| 1420 | (provide 'c-ts-mode) | 1420 | (provide 'c-ts-mode) |
| 1421 | (provide 'c++-ts-mode) | ||
| 1421 | 1422 | ||
| 1422 | ;;; c-ts-mode.el ends here | 1423 | ;;; c-ts-mode.el ends here |
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index feebeae010d..9ca6bee8454 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el | |||
| @@ -3928,6 +3928,8 @@ See `treesit-sexp-type-regexp' for more information.") | |||
| 3928 | '(((regex pattern: (regex_pattern) @regexp)) | 3928 | '(((regex pattern: (regex_pattern) @regexp)) |
| 3929 | ((variable_declarator value: (jsx_element) @jsx)) | 3929 | ((variable_declarator value: (jsx_element) @jsx)) |
| 3930 | ((assignment_expression right: (jsx_element) @jsx)) | 3930 | ((assignment_expression right: (jsx_element) @jsx)) |
| 3931 | ((arguments (jsx_element) @jsx)) | ||
| 3932 | ((parenthesized_expression (jsx_element) @jsx)) | ||
| 3931 | ((return_statement (jsx_element) @jsx)))))) | 3933 | ((return_statement (jsx_element) @jsx)))))) |
| 3932 | 3934 | ||
| 3933 | (defun js-ts--syntax-propertize (beg end) | 3935 | (defun js-ts--syntax-propertize (beg end) |
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el index f5e6e117d99..37c54a90f42 100644 --- a/lisp/progmodes/prog-mode.el +++ b/lisp/progmodes/prog-mode.el | |||
| @@ -248,7 +248,10 @@ If set to the symbol `right-edge', also unprettify if point | |||
| 248 | is immediately after the symbol. The prettification will be | 248 | is immediately after the symbol. The prettification will be |
| 249 | reapplied as soon as point moves away from the symbol. If | 249 | reapplied as soon as point moves away from the symbol. If |
| 250 | set to nil, the prettification persists even when point is | 250 | set to nil, the prettification persists even when point is |
| 251 | on the symbol." | 251 | on the symbol. |
| 252 | |||
| 253 | This will only have an effect if it is set to a non-nil value | ||
| 254 | before `prettify-symbols-mode' is activated." | ||
| 252 | :version "25.1" | 255 | :version "25.1" |
| 253 | :type '(choice (const :tag "Never unprettify" nil) | 256 | :type '(choice (const :tag "Never unprettify" nil) |
| 254 | (const :tag "Unprettify when point is inside" t) | 257 | (const :tag "Unprettify when point is inside" t) |
diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 441cdc1f7aa..7c85a7b6fe9 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el | |||
| @@ -32,8 +32,11 @@ | |||
| 32 | (eval-when-compile (require 'rx)) | 32 | (eval-when-compile (require 'rx)) |
| 33 | (require 'c-ts-common) ; For comment indent and filling. | 33 | (require 'c-ts-common) ; For comment indent and filling. |
| 34 | 34 | ||
| 35 | (declare-function treesit-node-start "treesit.c") | ||
| 36 | (declare-function treesit-node-end "treesit.c") | ||
| 35 | (declare-function treesit-parser-create "treesit.c") | 37 | (declare-function treesit-parser-create "treesit.c") |
| 36 | (declare-function treesit-query-capture "treesit.c") | 38 | (declare-function treesit-query-capture "treesit.c") |
| 39 | (declare-function treesit-query-compile "treesit.c") | ||
| 37 | 40 | ||
| 38 | (defcustom typescript-ts-mode-indent-offset 2 | 41 | (defcustom typescript-ts-mode-indent-offset 2 |
| 39 | "Number of spaces for each indentation step in `typescript-ts-mode'." | 42 | "Number of spaces for each indentation step in `typescript-ts-mode'." |
| @@ -163,7 +166,7 @@ Argument LANGUAGE is either `typescript' or `tsx'." | |||
| 163 | ;; but then raises an error if the wrong node type is used. So it is | 166 | ;; but then raises an error if the wrong node type is used. So it is |
| 164 | ;; important to check with the new node type (member_expression) | 167 | ;; important to check with the new node type (member_expression) |
| 165 | (condition-case nil | 168 | (condition-case nil |
| 166 | (progn (treesit-query-capture language '((member_expression) @capture)) | 169 | (progn (treesit-query-capture language '(jsx_opening_element (member_expression) @capture)) |
| 167 | '((jsx_opening_element | 170 | '((jsx_opening_element |
| 168 | [(member_expression (identifier)) (identifier)] | 171 | [(member_expression (identifier)) (identifier)] |
| 169 | @typescript-ts-jsx-tag-face) | 172 | @typescript-ts-jsx-tag-face) |
| @@ -473,6 +476,7 @@ See `treesit-thing-settings' for more information.") | |||
| 473 | (keyword string escape-sequence) | 476 | (keyword string escape-sequence) |
| 474 | (constant expression identifier number pattern property) | 477 | (constant expression identifier number pattern property) |
| 475 | (function bracket delimiter))) | 478 | (function bracket delimiter))) |
| 479 | (setq-local syntax-propertize-function #'ts-ts--syntax-propertize) | ||
| 476 | 480 | ||
| 477 | (treesit-major-mode-setup))) | 481 | (treesit-major-mode-setup))) |
| 478 | 482 | ||
| @@ -529,9 +533,47 @@ at least 3 (which is the default value)." | |||
| 529 | (keyword string escape-sequence) | 533 | (keyword string escape-sequence) |
| 530 | (constant expression identifier jsx number pattern property) | 534 | (constant expression identifier jsx number pattern property) |
| 531 | (function bracket delimiter))) | 535 | (function bracket delimiter))) |
| 536 | (setq-local syntax-propertize-function #'tsx-ts--syntax-propertize) | ||
| 532 | 537 | ||
| 533 | (treesit-major-mode-setup))) | 538 | (treesit-major-mode-setup))) |
| 534 | 539 | ||
| 540 | (defvar ts-ts--s-p-query | ||
| 541 | (when (treesit-available-p) | ||
| 542 | (treesit-query-compile 'typescript | ||
| 543 | '(((regex pattern: (regex_pattern) @regexp)))))) | ||
| 544 | |||
| 545 | (defvar tsx-ts--s-p-query | ||
| 546 | (when (treesit-available-p) | ||
| 547 | (treesit-query-compile 'tsx | ||
| 548 | '(((regex pattern: (regex_pattern) @regexp)) | ||
| 549 | ((variable_declarator value: (jsx_element) @jsx)) | ||
| 550 | ((assignment_expression right: (jsx_element) @jsx)) | ||
| 551 | ((arguments (jsx_element) @jsx)) | ||
| 552 | ((parenthesized_expression (jsx_element) @jsx)) | ||
| 553 | ((return_statement (jsx_element) @jsx)))))) | ||
| 554 | |||
| 555 | (defun ts-ts--syntax-propertize (beg end) | ||
| 556 | (let ((captures (treesit-query-capture 'typescript ts-ts--s-p-query beg end))) | ||
| 557 | (ts-ts--syntax-propertize-captures captures))) | ||
| 558 | |||
| 559 | (defun tsx-ts--syntax-propertize (beg end) | ||
| 560 | (let ((captures (treesit-query-capture 'tsx tsx-ts--s-p-query beg end))) | ||
| 561 | (ts-ts--syntax-propertize-captures captures))) | ||
| 562 | |||
| 563 | (defun ts-ts--syntax-propertize-captures (captures) | ||
| 564 | (pcase-dolist (`(,name . ,node) captures) | ||
| 565 | (let* ((ns (treesit-node-start node)) | ||
| 566 | (ne (treesit-node-end node)) | ||
| 567 | (syntax (pcase-exhaustive name | ||
| 568 | ('regexp | ||
| 569 | (cl-decf ns) | ||
| 570 | (cl-incf ne) | ||
| 571 | (string-to-syntax "\"/")) | ||
| 572 | ('jsx | ||
| 573 | (string-to-syntax "|"))))) | ||
| 574 | (put-text-property ns (1+ ns) 'syntax-table syntax) | ||
| 575 | (put-text-property (1- ne) ne 'syntax-table syntax)))) | ||
| 576 | |||
| 535 | (if (treesit-ready-p 'tsx) | 577 | (if (treesit-ready-p 'tsx) |
| 536 | (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))) | 578 | (add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))) |
| 537 | 579 | ||
diff --git a/lisp/saveplace.el b/lisp/saveplace.el index a28de6f63a8..590c55d2609 100644 --- a/lisp/saveplace.el +++ b/lisp/saveplace.el | |||
| @@ -196,12 +196,13 @@ removable and network volumes." | |||
| 196 | 196 | ||
| 197 | (defcustom save-place-ignore-files-regexp | 197 | (defcustom save-place-ignore-files-regexp |
| 198 | "\\(?:COMMIT_EDITMSG\\|hg-editor-[[:alnum:]]+\\.txt\\|svn-commit\\.tmp\\|bzr_log\\.[[:alnum:]]+\\)$" | 198 | "\\(?:COMMIT_EDITMSG\\|hg-editor-[[:alnum:]]+\\.txt\\|svn-commit\\.tmp\\|bzr_log\\.[[:alnum:]]+\\)$" |
| 199 | "Regexp matching files for which no position should be recorded. | 199 | "Regexp matching files whose positions should not be recorded. |
| 200 | Useful for temporary file such as commit message files that are | 200 | Useful to exclude temporary files, such as commit message files that are |
| 201 | automatically created by the VCS. If set to nil, this feature is | 201 | automatically created by VCSes. If set to nil, this feature is |
| 202 | disabled, i.e., the position is recorded for all files." | 202 | disabled, i.e., no files are excluded." |
| 203 | :version "24.1" | 203 | :version "24.1" |
| 204 | :type 'regexp) | 204 | :type '(choice (const :tag "Don't exclude any files" nil) |
| 205 | regexp)) | ||
| 205 | 206 | ||
| 206 | (declare-function dired-current-directory "dired" (&optional localp)) | 207 | (declare-function dired-current-directory "dired" (&optional localp)) |
| 207 | 208 | ||
diff --git a/lisp/server.el b/lisp/server.el index 10f15598221..ce68e9aebc9 100644 --- a/lisp/server.el +++ b/lisp/server.el | |||
| @@ -1287,9 +1287,12 @@ The following commands are accepted by the client: | |||
| 1287 | ;; choice there.) In daemon mode on Windows, we can't | 1287 | ;; choice there.) In daemon mode on Windows, we can't |
| 1288 | ;; make tty frames, so force the frame type to GUI | 1288 | ;; make tty frames, so force the frame type to GUI |
| 1289 | ;; there too. | 1289 | ;; there too. |
| 1290 | (when (and (eq system-type 'windows-nt) | 1290 | (when (or (and (eq system-type 'windows-nt) |
| 1291 | (or (daemonp) | 1291 | (or (daemonp) |
| 1292 | (eq window-system 'w32))) | 1292 | (eq window-system 'w32))) |
| 1293 | ;; Client runs on Windows, but the server | ||
| 1294 | ;; runs on a Posix host. | ||
| 1295 | (equal tty-name "CONOUT$")) | ||
| 1293 | (push "-window-system" args-left))) | 1296 | (push "-window-system" args-left))) |
| 1294 | 1297 | ||
| 1295 | ;; -position +LINE[:COLUMN]: Set point to the given | 1298 | ;; -position +LINE[:COLUMN]: Set point to the given |
diff --git a/lisp/sqlite-mode.el b/lisp/sqlite-mode.el index 8cb94485369..71c9e57fc12 100644 --- a/lisp/sqlite-mode.el +++ b/lisp/sqlite-mode.el | |||
| @@ -63,6 +63,7 @@ | |||
| 63 | (setq-local sqlite--db (sqlite-open file)) | 63 | (setq-local sqlite--db (sqlite-open file)) |
| 64 | (unless (sqlitep sqlite--db) | 64 | (unless (sqlitep sqlite--db) |
| 65 | (error "`sqlite-open' failed to open SQLite file")) | 65 | (error "`sqlite-open' failed to open SQLite file")) |
| 66 | (add-hook 'kill-buffer-hook (lambda () (sqlite-close sqlite--db)) nil t) | ||
| 66 | (sqlite-mode-list-tables)) | 67 | (sqlite-mode-list-tables)) |
| 67 | 68 | ||
| 68 | (defun sqlite-mode-list-tables () | 69 | (defun sqlite-mode-list-tables () |
diff --git a/lisp/subr.el b/lisp/subr.el index 3fad9d36b3e..e88815fa58c 100644 --- a/lisp/subr.el +++ b/lisp/subr.el | |||
| @@ -554,8 +554,10 @@ If COUNT is negative, shifting is actually to the right. | |||
| 554 | In this case, if VALUE is a negative fixnum treat it as unsigned, | 554 | In this case, if VALUE is a negative fixnum treat it as unsigned, |
| 555 | i.e., subtract 2 * `most-negative-fixnum' from VALUE before shifting it. | 555 | i.e., subtract 2 * `most-negative-fixnum' from VALUE before shifting it. |
| 556 | 556 | ||
| 557 | This function is provided for compatibility. In new code, use `ash' | 557 | Most uses of this function turn out to be mistakes. We recommend |
| 558 | instead." | 558 | to use `ash' instead, unless COUNT could ever be negative, and |
| 559 | if, when COUNT is negative, your program really needs the special | ||
| 560 | treatment of negative COUNT provided by this function." | ||
| 559 | (declare (compiler-macro | 561 | (declare (compiler-macro |
| 560 | (lambda (form) | 562 | (lambda (form) |
| 561 | (macroexp-warn-and-return | 563 | (macroexp-warn-and-return |
| @@ -5697,9 +5699,11 @@ See also `string-equal'." | |||
| 5697 | (eq t (compare-strings string1 0 nil string2 0 nil t))) | 5699 | (eq t (compare-strings string1 0 nil string2 0 nil t))) |
| 5698 | 5700 | ||
| 5699 | (defun string-prefix-p (prefix string &optional ignore-case) | 5701 | (defun string-prefix-p (prefix string &optional ignore-case) |
| 5700 | "Return non-nil if PREFIX is a prefix of STRING. | 5702 | "Return non-nil if STRING begins with PREFIX. |
| 5703 | PREFIX should be a string; the function returns non-nil if the | ||
| 5704 | characters at the beginning of STRING compare equal with PREFIX. | ||
| 5701 | If IGNORE-CASE is non-nil, the comparison is done without paying attention | 5705 | If IGNORE-CASE is non-nil, the comparison is done without paying attention |
| 5702 | to case differences." | 5706 | to letter-case differences." |
| 5703 | (declare (side-effect-free t)) | 5707 | (declare (side-effect-free t)) |
| 5704 | (let ((prefix-length (length prefix))) | 5708 | (let ((prefix-length (length prefix))) |
| 5705 | (if (> prefix-length (length string)) nil | 5709 | (if (> prefix-length (length string)) nil |
| @@ -5707,9 +5711,11 @@ to case differences." | |||
| 5707 | 0 prefix-length ignore-case))))) | 5711 | 0 prefix-length ignore-case))))) |
| 5708 | 5712 | ||
| 5709 | (defun string-suffix-p (suffix string &optional ignore-case) | 5713 | (defun string-suffix-p (suffix string &optional ignore-case) |
| 5710 | "Return non-nil if SUFFIX is a suffix of STRING. | 5714 | "Return non-nil if STRING ends with SUFFIX. |
| 5715 | SUFFIX should be a string; the function returns non-nil if the | ||
| 5716 | characters at end of STRING compare equal with SUFFIX. | ||
| 5711 | If IGNORE-CASE is non-nil, the comparison is done without paying | 5717 | If IGNORE-CASE is non-nil, the comparison is done without paying |
| 5712 | attention to case differences." | 5718 | attention to letter-case differences." |
| 5713 | (declare (side-effect-free t)) | 5719 | (declare (side-effect-free t)) |
| 5714 | (let ((start-pos (- (length string) (length suffix)))) | 5720 | (let ((start-pos (- (length string) (length suffix)))) |
| 5715 | (and (>= start-pos 0) | 5721 | (and (>= start-pos 0) |
diff --git a/src/buffer.c b/src/buffer.c index 9facc4b7ab8..a7299f4a49e 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -4099,7 +4099,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, bool after, | |||
| 4099 | } | 4099 | } |
| 4100 | /* Test for intersecting intervals. This does the right thing | 4100 | /* Test for intersecting intervals. This does the right thing |
| 4101 | for both insertion and deletion. */ | 4101 | for both insertion and deletion. */ |
| 4102 | if (! insertion || (end_arg > obegin && begin_arg < oend)) | 4102 | if (end_arg > obegin && begin_arg < oend) |
| 4103 | { | 4103 | { |
| 4104 | Lisp_Object prop = Foverlay_get (overlay, Qmodification_hooks); | 4104 | Lisp_Object prop = Foverlay_get (overlay, Qmodification_hooks); |
| 4105 | if (!NILP (prop)) | 4105 | if (!NILP (prop)) |
diff --git a/src/font.h b/src/font.h index ff05ef7356e..9c9f7952560 100644 --- a/src/font.h +++ b/src/font.h | |||
| @@ -303,10 +303,16 @@ struct font | |||
| 303 | SPACE glyph, the value is 0. */ | 303 | SPACE glyph, the value is 0. */ |
| 304 | int space_width; | 304 | int space_width; |
| 305 | 305 | ||
| 306 | /* Average width of glyphs in the font. If the font itself doesn't | 306 | /* Average width of glyphs in the font. Should be the average width |
| 307 | have that information, but has glyphs of ASCII characters, the | 307 | of the glyphs of ASCII characters. The value for the default |
| 308 | value is the average width of those glyphs. Otherwise, the value | 308 | face's font is used to determine the canonical character width of |
| 309 | is 0. */ | 309 | the frame (see FRAME_COLUMN_WIDTH). For fonts that are not |
| 310 | fixed-pitch, the font backend should actually calculate the value | ||
| 311 | from the glyphs of ASCII characters in the range 32..126 | ||
| 312 | inclusively; relying on the average-width attribute recorded in | ||
| 313 | the font is unreliable in this case, especially in fonts that | ||
| 314 | support CJK scripts, where many characters are wide. Value can | ||
| 315 | be zero if the font doesn't have glyphs for ASCII characters. */ | ||
| 310 | int average_width; | 316 | int average_width; |
| 311 | 317 | ||
| 312 | /* Ascent and descent of the font (in pixels). */ | 318 | /* Ascent and descent of the font (in pixels). */ |
diff --git a/src/image.c b/src/image.c index a4b8d21cee6..84db9bfb3b8 100644 --- a/src/image.c +++ b/src/image.c | |||
| @@ -12075,6 +12075,18 @@ svg_load_image (struct frame *f, struct image *img, char *contents, | |||
| 12075 | img->background_valid = 1; | 12075 | img->background_valid = 1; |
| 12076 | } | 12076 | } |
| 12077 | 12077 | ||
| 12078 | #if HAVE_NTGUI | ||
| 12079 | /* Windows stores the image colours in BGR format, and SVG expects | ||
| 12080 | them in RGB. */ | ||
| 12081 | foreground = (foreground & 0x0000FF) << 16 | ||
| 12082 | | (foreground & 0xFF0000) >> 16 | ||
| 12083 | | (foreground & 0x00FF00); | ||
| 12084 | |||
| 12085 | background = (background & 0x0000FF) << 16 | ||
| 12086 | | (background & 0xFF0000) >> 16 | ||
| 12087 | | (background & 0x00FF00); | ||
| 12088 | #endif | ||
| 12089 | |||
| 12078 | wrapped_contents = xmalloc (buffer_size); | 12090 | wrapped_contents = xmalloc (buffer_size); |
| 12079 | 12091 | ||
| 12080 | if (buffer_size <= snprintf (wrapped_contents, buffer_size, wrapper, | 12092 | if (buffer_size <= snprintf (wrapped_contents, buffer_size, wrapper, |
diff --git a/src/treesit.c b/src/treesit.c index 91d4616253d..69b59fca111 100644 --- a/src/treesit.c +++ b/src/treesit.c | |||
| @@ -2208,7 +2208,10 @@ return nil. */) | |||
| 2208 | static bool treesit_cursor_first_child_for_byte | 2208 | static bool treesit_cursor_first_child_for_byte |
| 2209 | (TSTreeCursor *cursor, ptrdiff_t pos, bool named) | 2209 | (TSTreeCursor *cursor, ptrdiff_t pos, bool named) |
| 2210 | { | 2210 | { |
| 2211 | if (!ts_tree_cursor_goto_first_child (cursor)) | 2211 | /* ts_tree_cursor_goto_first_child_for_byte is significantly faster, |
| 2212 | so despite it having problems, we try it first. */ | ||
| 2213 | if (ts_tree_cursor_goto_first_child_for_byte (cursor, pos) == -1 | ||
| 2214 | && !ts_tree_cursor_goto_first_child (cursor)) | ||
| 2212 | return false; | 2215 | return false; |
| 2213 | 2216 | ||
| 2214 | TSNode node = ts_tree_cursor_current_node (cursor); | 2217 | TSNode node = ts_tree_cursor_current_node (cursor); |
| @@ -3075,7 +3078,11 @@ treesit_cursor_helper_1 (TSTreeCursor *cursor, TSNode *target, | |||
| 3075 | if (ts_node_eq (cursor_node, *target)) | 3078 | if (ts_node_eq (cursor_node, *target)) |
| 3076 | return true; | 3079 | return true; |
| 3077 | 3080 | ||
| 3078 | if (ts_tree_cursor_goto_first_child_for_byte (cursor, start_pos) == -1) | 3081 | /* ts_tree_cursor_goto_first_child_for_byte is significantly faster, |
| 3082 | so despite it having problems (see bug#60127), we try it | ||
| 3083 | first. */ | ||
| 3084 | if (ts_tree_cursor_goto_first_child_for_byte (cursor, start_pos) == -1 | ||
| 3085 | && !ts_tree_cursor_goto_first_child (cursor)) | ||
| 3079 | return false; | 3086 | return false; |
| 3080 | 3087 | ||
| 3081 | /* Go through each sibling that could contain TARGET. Because of | 3088 | /* Go through each sibling that could contain TARGET. Because of |
diff --git a/src/xdisp.c b/src/xdisp.c index a9119788663..077245a7791 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -11448,7 +11448,6 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, | |||
| 11448 | else | 11448 | else |
| 11449 | move_it_in_display_line (&it, start, it1_x + 1, | 11449 | move_it_in_display_line (&it, start, it1_x + 1, |
| 11450 | MOVE_TO_POS | MOVE_TO_X); | 11450 | MOVE_TO_POS | MOVE_TO_X); |
| 11451 | move_it_to (&it, start - 1, -1, -1, -1, MOVE_TO_POS); | ||
| 11452 | start_x = it.current_x; | 11451 | start_x = it.current_x; |
| 11453 | /* If we didn't change our buffer position, the pixel | 11452 | /* If we didn't change our buffer position, the pixel |
| 11454 | width of what's here was not yet accounted for; do it | 11453 | width of what's here was not yet accounted for; do it |
diff --git a/test/lisp/international/ucs-normalize-tests.el b/test/lisp/international/ucs-normalize-tests.el index bc7e743291d..002aa3b8c21 100644 --- a/test/lisp/international/ucs-normalize-tests.el +++ b/test/lisp/international/ucs-normalize-tests.el | |||
| @@ -184,43 +184,7 @@ Must be called with `ucs-normalize-tests--norm-buf' as current buffer." | |||
| 184 | (should-not (ucs-normalize-tests--rule1-failing-for-partX 0))) | 184 | (should-not (ucs-normalize-tests--rule1-failing-for-partX 0))) |
| 185 | 185 | ||
| 186 | (defconst ucs-normalize-tests--failing-lines-part1 | 186 | (defconst ucs-normalize-tests--failing-lines-part1 |
| 187 | (list 2412 2413 2414 15133 15134 15135 15136 15137 | 187 | (list )) |
| 188 | 15138 15139 15140 15141 15142 15143 15144 15145 | ||
| 189 | 15146 15147 15148 15149 15150 15151 15152 15153 | ||
| 190 | 15154 15155 15156 15157 15158 15159 15160 15161 | ||
| 191 | 15162 15163 15164 15165 15166 15167 15168 15169 | ||
| 192 | 15170 15171 15172 15173 15174 15175 15176 15177 | ||
| 193 | 15178 15179 15180 15181 15182 15183 15184 15185 | ||
| 194 | 15186 15187 15188 15192 15193 15194 15195 15196 | ||
| 195 | 15197 15198 15199 15200 15201 16211 16212 16213 | ||
| 196 | 16214 16215 16216 16217 16218 16219 16220 16221 | ||
| 197 | 16222 16223 16224 16225 16226 16227 16228 16229 | ||
| 198 | 16230 16231 16232 16233 16234 16235 16236 16237 | ||
| 199 | 16238 16239 16240 16241 16242 16243 16244 16245 | ||
| 200 | 16246 16247 16248 16249 16250 16251 16252 16253 | ||
| 201 | 16254 16255 16256 16257 16258 16259 16260 16261 | ||
| 202 | 16262 16263 16264 16265 16266 16267 16268 16269 | ||
| 203 | 16270 16271 16272 16273 16274 16275 16276 16277 | ||
| 204 | 16278 16279 16280 16281 16282 16283 16284 16285 | ||
| 205 | 16286 16287 16288 16289 16290 16291 16292 16293 | ||
| 206 | 16294 16295 16296 16297 16298 16299 16300 16301 | ||
| 207 | 16302 16303 16304 16305 16306 16307 16308 16309 | ||
| 208 | 16310 16311 16312 16313 16314 16315 16316 16317 | ||
| 209 | 16318 16319 16320 16321 16322 16323 16324 16325 | ||
| 210 | 16326 16327 16328 16329 16330 16331 16332 16333 | ||
| 211 | 16334 16335 16336 16337 16338 16339 16340 16341 | ||
| 212 | 16342 16343 16344 16345 16346 16347 16348 16349 | ||
| 213 | 16350 16351 16352 16353 16354 16355 16356 16357 | ||
| 214 | 16358 16359 16360 16361 16362 16363 16364 16365 | ||
| 215 | 16366 16367 16368 16369 16370 16371 16372 16373 | ||
| 216 | 16374 16375 16376 16377 16378 16379 16380 16381 | ||
| 217 | 16382 16383 16384 16385 16386 16387 16388 16389 | ||
| 218 | 16390 16391 16392 16393 16394 16395 16396 16397 | ||
| 219 | 16398 16399 16400 16401 16402 16403 16404 16405 | ||
| 220 | 16406 16407 16408 16409 16410 16411 16412 16413 | ||
| 221 | 16550 16551 16552 16553 16554 16555 16556 16557 | ||
| 222 | 16488 16489 16490 16491 16492 16493 16494 16495 | ||
| 223 | 16496 16497 16558 16559)) | ||
| 224 | 188 | ||
| 225 | ;; Keep a record of failures, for consulting afterwards (the ert | 189 | ;; Keep a record of failures, for consulting afterwards (the ert |
| 226 | ;; backtrace only shows a truncated version of these lists). | 190 | ;; backtrace only shows a truncated version of these lists). |
| @@ -283,88 +247,20 @@ Must be called with `ucs-normalize-tests--norm-buf' as current buffer." | |||
| 283 | ucs-normalize-tests--failing-lines-part1))) | 247 | ucs-normalize-tests--failing-lines-part1))) |
| 284 | 248 | ||
| 285 | (defconst ucs-normalize-tests--failing-lines-part2 | 249 | (defconst ucs-normalize-tests--failing-lines-part2 |
| 286 | (list 17087 17088 17089 17090 17091 17092 17093 17094 | 250 | (list 17789 17790 17801 17802 17807 17808 17811 17812 |
| 287 | 17098 17099 17100 17101 17102 17103 17104 17105 | 251 | 17815 17816 17821 17822 17829 17830 17907 17908 |
| 288 | 17106 17107 17108 17113 17114 17115 17116 17117 | 252 | 18023 18024 18049 18050 18055 18056 18459 18460 |
| 289 | 17118 17119 17120 17125 17126 17127 17128 17129 | 253 | 18605 18606 18617 18618 18621 18622 18625 18626 |
| 290 | 17130 17131 17132 17133 17134 17135 17136 17137 | 254 | 18627 18628 18631 18632 18633 18634 18663 18664 |
| 291 | 17138 17139 17140 17141 17142 17143 17144 17145 | 255 | 18669 18670 18673 18674 18679 18680 18685 18686 |
| 292 | 17146 17157 17158 17159 17160 17161 17162 17163 | 256 | 18691 18692 18695 18697 18699 18701 18703 18704 |
| 293 | 17164 17185 17186 17187 17188 17189 17190 17197 | 257 | 18705 18707 18709 18711 18713 18715 18717 18719 |
| 294 | 17198 17199 17200 17207 17208 17209 17210 17211 | 258 | 18721 18723 18725 18727 18729 18731 18733 18735 |
| 295 | 17212 17213 17214 17219 17220 17221 17222 17275 | 259 | 18737 18739 18740 18741 18742 18743 18889 18891 |
| 296 | 17276 17285 17286 17295 17296 17309 17310 17311 | 260 | 18893 18895 18897 18899 18901 18903 18905 18907 |
| 297 | 17312 17313 17314 17315 17316 17317 17318 17319 | 261 | 18909 18911 18913 18914 18915 18916 18917 18919 |
| 298 | 17320 17325 17326 17373 17374 17419 17420 17421 | 262 | 18921 18923 18925 18927 18929 18931 18933 18935 |
| 299 | 17422 17433 17434 17439 17440 17465 17466 17473 | 263 | 18937 18939 18941 18943 18945 18947 18948)) |
| 300 | 17474 17479 17480 17485 17486 17491 17492 17497 | ||
| 301 | 17498 17499 17500 17501 17502 17505 17506 17507 | ||
| 302 | 17508 17511 17512 17519 17520 17523 17524 17527 | ||
| 303 | 17528 17531 17532 17551 17552 17555 17556 17599 | ||
| 304 | 17600 17601 17602 17603 17604 17605 17607 17608 | ||
| 305 | 17609 17610 17611 17612 17613 17615 17617 17619 | ||
| 306 | 17621 17623 17625 17627 17629 17631 17632 17633 | ||
| 307 | 17634 17635 17636 17637 17638 17639 17640 17669 | ||
| 308 | 17670 17675 17676 17681 17682 17689 17690 17691 | ||
| 309 | 17692 17693 17694 17707 17708 17713 17714 17715 | ||
| 310 | 17716 17727 17728 17733 17734 17739 17740 17745 | ||
| 311 | 17746 17749 17750 17753 17754 17759 17760 17767 | ||
| 312 | 17768 17789 17790 17801 17802 17807 17808 17809 | ||
| 313 | 17810 17811 17812 17813 17814 17815 17816 17821 | ||
| 314 | 17822 17829 17830 17843 17844 17845 17846 17851 | ||
| 315 | 17852 17861 17875 17876 17879 17880 17899 17900 | ||
| 316 | 17097 17907 17908 17911 17912 17913 17914 17915 | ||
| 317 | 17916 17917 17918 17919 17920 17921 17922 17927 | ||
| 318 | 17928 17929 17930 17931 17932 17933 17935 17937 | ||
| 319 | 17938 17939 17940 17941 17943 17945 17947 17949 | ||
| 320 | 17951 17952 17953 17955 17957 17959 17961 17962 | ||
| 321 | 17967 17968 17987 17988 17993 17994 18003 18004 | ||
| 322 | 18005 18006 18007 18008 18009 18010 18011 18012 | ||
| 323 | 18017 18018 18019 18020 18021 18022 18023 18024 | ||
| 324 | 18041 18042 18049 18050 18053 18054 18055 18056 | ||
| 325 | 18069 18070 18079 18080 18163 18164 18165 18166 | ||
| 326 | 18171 18172 18175 18176 18211 18212 18219 18220 | ||
| 327 | 18221 18222 18223 18224 18225 18226 18301 18302 | ||
| 328 | 18389 18390 18391 18392 18393 18394 18397 18398 | ||
| 329 | 18407 18408 18439 18440 18441 18442 18443 18444 | ||
| 330 | 18445 18446 18447 18448 18449 18450 18451 18452 | ||
| 331 | 18457 18458 18459 18460 18471 18472 18479 18480 | ||
| 332 | 18485 18486 18499 18500 18501 18502 18509 18510 | ||
| 333 | 18513 18514 18515 18516 18517 18518 18519 18520 | ||
| 334 | 18521 18523 18524 18525 18527 18528 18531 18537 | ||
| 335 | 18538 18539 18541 18543 18545 18547 18549 18550 | ||
| 336 | 18551 18553 18554 18555 18557 18558 18559 18560 | ||
| 337 | 18561 18562 18563 18564 18565 18566 18567 18569 | ||
| 338 | 18571 18573 18575 18577 18579 18581 18583 18585 | ||
| 339 | 18587 18589 18591 18593 18595 18596 18597 18599 | ||
| 340 | 18601 18602 18603 18605 18606 18607 18609 18611 | ||
| 341 | 18612 18613 18615 18617 18618 18619 18621 18622 | ||
| 342 | 18623 18624 18625 18626 18627 18628 18629 18631 | ||
| 343 | 18632 18633 18634 18635 18636 18637 18639 18641 | ||
| 344 | 18643 18645 18647 18649 18651 18653 18655 18657 | ||
| 345 | 18659 18661 18663 18664 18665 18667 18668 18669 | ||
| 346 | 18670 18671 18673 18674 18675 18676 18677 18679 | ||
| 347 | 18680 18681 18683 18685 18686 18687 18688 18689 | ||
| 348 | 18690 18691 18692 18693 18694 18695 18696 18697 | ||
| 349 | 18698 18699 18700 18701 18702 18703 18704 18705 | ||
| 350 | 18706 18707 18708 18709 18710 18711 18712 18713 | ||
| 351 | 18714 18715 18717 18719 18721 18722 18723 18724 | ||
| 352 | 18725 18727 18729 18731 18733 18735 18737 18739 | ||
| 353 | 18740 18741 18742 18743 18745 18747 18749 18751 | ||
| 354 | 18753 18755 18757 18759 18761 18763 18765 18767 | ||
| 355 | 18769 18771 18773 18775 18777 18779 18781 18783 | ||
| 356 | 18785 18787 18789 18791 18793 18795 18797 18799 | ||
| 357 | 18801 18803 18805 18807 18809 18811 18813 18815 | ||
| 358 | 18817 18819 18821 18823 18825 18827 18829 18831 | ||
| 359 | 18833 18835 18837 18839 18840 18841 18842 18843 | ||
| 360 | 18844 18845 18846 18847 18848 18849 18850 18851 | ||
| 361 | 18852 18853 18855 18857 18859 18861 18863 18865 | ||
| 362 | 18866 18867 18869 18871 18873 18875 18877 18879 | ||
| 363 | 18881 18883 18885 18887 18888 18889 18891 18893 | ||
| 364 | 18895 18897 18899 18901 18903 18905 18907 18909 | ||
| 365 | 18911 18913 18914 18915 18916 18917 18918 18919 | ||
| 366 | 18920 18921 18923 18925 18927 18929 18931 18933 | ||
| 367 | 18935 18937 18939 18941 18943 18945 18947 18948)) | ||
| 368 | 264 | ||
| 369 | (ert-deftest ucs-normalize-part2 () | 265 | (ert-deftest ucs-normalize-part2 () |
| 370 | :tags '(:expensive-test) | 266 | :tags '(:expensive-test) |
diff --git a/test/src/buffer-tests.el b/test/src/buffer-tests.el index 45914b2b6b0..aa30533c6a0 100644 --- a/test/src/buffer-tests.el +++ b/test/src/buffer-tests.el | |||
| @@ -142,6 +142,7 @@ properties." | |||
| 142 | (expected-calls . ((modification-hooks (nil 3 4)) | 142 | (expected-calls . ((modification-hooks (nil 3 4)) |
| 143 | (modification-hooks (t 3 4 1))))) | 143 | (modification-hooks (t 3 4 1))))) |
| 144 | ((replace . "4")) | 144 | ((replace . "4")) |
| 145 | ((replace . "4") (overlay-beg . 4)) ;bug#65929 | ||
| 145 | ((replace . "12") | 146 | ((replace . "12") |
| 146 | (expected-calls . ((modification-hooks (nil 1 3)) | 147 | (expected-calls . ((modification-hooks (nil 1 3)) |
| 147 | (modification-hooks (t 1 2 2))))) | 148 | (modification-hooks (t 1 2 2))))) |