diff options
| author | Po Lu | 2024-06-30 10:06:09 +0800 |
|---|---|---|
| committer | Po Lu | 2024-06-30 10:06:09 +0800 |
| commit | e2561e267fd2eb37b140a293baec79096f03290b (patch) | |
| tree | 937291ce231a708b51541bbce5f76151b344a0e0 | |
| parent | f0f883da4b410c606b46b61c80b874ead08335ea (diff) | |
| parent | 72cf9964f3c0fd63332884b8145399f1784de7f1 (diff) | |
| download | emacs-e2561e267fd2eb37b140a293baec79096f03290b.tar.gz emacs-e2561e267fd2eb37b140a293baec79096f03290b.zip | |
Merge from savannah/emacs-30
72cf9964f3c Inaccuracy in efaq.texi
fc48e9e8ed5 ; Fix typos in DOS Makefile scripts
9b8d754579f ; * etc/NEWS: Explain Nextstep.
8819e5a45d5 Fix treesit crash (bug#71681)
eaf2dc96c1f ; Fix SHR test on MS-Windows
57880f597c5 Delete redundant mention of `with-eval-after-load'
ea8ce984342 * doc/misc/efaq.texi (New in Emacs 30): Fix typos.
45a20d781a9 ; Fix typos in symbols
d95f039af43 Document security fixes in FAQ
d063af203c8 Add "New in Emacs 30" to FAQ
ca6b484162b ; * etc/NEWS: Move "Minibuffer and Completions"
35c46663e49 ; * etc/NEWS: Move item to "Lisp Changes".
0515b38d289 ; * etc/NEWS: Move keyboard macro items closer together.
22af3a71039 ; * etc/NEWS: More copy-edits.
000ef8876ae ; * etc/NEWS: Move items to "Incompatible Lisp Changes".
4088dc8e4ce ; * etc/NEWS: Rearrange "Incompatible Lisp Changes".
179800f36bb ; * lisp/epg.el (epg--start): Add commentary about encoding.
73898f0214c Fix non-ASCII filename operatiion on EasyPG (bug#71500)
a65b6aac6b5 Silence warning with global minor mode :predicate
f5f7343ac41 ; * etc/NEWS: Move an item to "Startup Changes"
c95066bf188 ; * etc/NEWS: Move some Lisp items to better place.
bf7db88ce1f ; * etc/NEWS: Rearrange "Editing Changes in Emacs 30.1"
000424eb9eb ; * etc/NEWS: Make touch screen support more prominent.
5b5671587fb ; * etc/NEWS: Rearrange "Changes in Emacs 30.1".
31124abdefe ; * lisp/thingatpt.el (sexp-at-point): Doc fix (bug#71777).
44f269d6e60 Fix: make 'xwidget-webkit-scroll-backward' scroll backwards
358085997c6 Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/...
736b7cad406 Add jsdoc support to php-ts-mode in <script> element
5f3d964e397 Update to Transient v0.7.2-4-gf75bc48d
# Conflicts:
# etc/NEWS
| -rw-r--r-- | doc/misc/efaq.texi | 103 | ||||
| -rw-r--r-- | doc/misc/transient.texi | 31 | ||||
| -rw-r--r-- | etc/NEWS.30 | 1226 | ||||
| -rw-r--r-- | lisp/emacs-lisp/comp.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/easy-mmode.el | 3 | ||||
| -rw-r--r-- | lisp/emacs-lisp/rmc.el | 7 | ||||
| -rw-r--r-- | lisp/epg.el | 6 | ||||
| -rw-r--r-- | lisp/erc/erc-common.el | 2 | ||||
| -rw-r--r-- | lisp/frameset.el | 2 | ||||
| -rw-r--r-- | lisp/org/ob-core.el | 2 | ||||
| -rw-r--r-- | lisp/org/ob-lilypond.el | 2 | ||||
| -rw-r--r-- | lisp/org/org-refile.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/cc-engine.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/dcl-mode.el | 1 | ||||
| -rw-r--r-- | lisp/progmodes/ebrowse.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/eglot.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/gdb-mi.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/php-ts-mode.el | 9 | ||||
| -rw-r--r-- | lisp/thingatpt.el | 5 | ||||
| -rw-r--r-- | lisp/transient.el | 8 | ||||
| -rw-r--r-- | lisp/which-key.el | 2 | ||||
| -rw-r--r-- | lisp/xwidget.el | 2 | ||||
| -rw-r--r-- | msdos/sedlibmk.inp | 4 | ||||
| -rw-r--r-- | src/treesit.c | 28 | ||||
| -rw-r--r-- | test/lisp/net/shr-tests.el | 14 | ||||
| -rw-r--r-- | test/lisp/which-key-tests.el | 3 | ||||
| -rw-r--r-- | test/src/comp-resources/comp-test-funcs.el | 2 | ||||
| -rw-r--r-- | test/src/comp-tests.el | 2 |
28 files changed, 808 insertions, 668 deletions
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi index 5b722f9fd77..7ab9731ff8f 100644 --- a/doc/misc/efaq.texi +++ b/doc/misc/efaq.texi | |||
| @@ -847,6 +847,7 @@ in the Emacs development repository (@pxref{Latest version of Emacs}). | |||
| 847 | @menu | 847 | @menu |
| 848 | * Origin of the term Emacs:: | 848 | * Origin of the term Emacs:: |
| 849 | * Latest version of Emacs:: | 849 | * Latest version of Emacs:: |
| 850 | * New in Emacs 30:: | ||
| 850 | * New in Emacs 29:: | 851 | * New in Emacs 29:: |
| 851 | * New in Emacs 28:: | 852 | * New in Emacs 28:: |
| 852 | * New in Emacs 27:: | 853 | * New in Emacs 27:: |
| @@ -920,6 +921,90 @@ Emacs, type @kbd{C-h C-n} (@kbd{M-x view-emacs-news}). You can give | |||
| 920 | this command a prefix argument to read about which features were new | 921 | this command a prefix argument to read about which features were new |
| 921 | in older versions. | 922 | in older versions. |
| 922 | 923 | ||
| 924 | |||
| 925 | @node New in Emacs 30 | ||
| 926 | @section What is different about Emacs 30? | ||
| 927 | @cindex Differences between Emacs 29 and Emacs 30 | ||
| 928 | @cindex Emacs 30, new features in | ||
| 929 | |||
| 930 | Here's a list of the most important changes in Emacs 30 as compared to | ||
| 931 | Emacs 29. The full list is too long to fit here, but can be read in the | ||
| 932 | Emacs @file{NEWS} file by typing @kbd{C-h n} inside Emacs. | ||
| 933 | |||
| 934 | @itemize | ||
| 935 | @item | ||
| 936 | Native compilation is now enabled by default. When Emacs is built on a | ||
| 937 | machine with @samp{libgccjit}, this will improve Emacs performance in | ||
| 938 | many typical workloads. | ||
| 939 | |||
| 940 | @item | ||
| 941 | Emacs has been ported to the Android operating system. See the file | ||
| 942 | @file{java/INSTALL} in the Emacs source distribution for details on how | ||
| 943 | to build it. | ||
| 944 | |||
| 945 | @item | ||
| 946 | Numerous performance improvements, for example in parsing JSON, reading | ||
| 947 | data from subprocesses, handling output from Eshell and in Shell mode, X | ||
| 948 | selection requests, remote files, and so on. | ||
| 949 | |||
| 950 | @item | ||
| 951 | Native JSON support is now always available; libjansson is no longer | ||
| 952 | used. | ||
| 953 | |||
| 954 | @item | ||
| 955 | New major modes based on the | ||
| 956 | @uref{https://tree-sitter.github.io/tree-sitter/, tree-sitter library} | ||
| 957 | library for editing Elixir, HTML, Lua, HEEx, and PHP. | ||
| 958 | |||
| 959 | @item | ||
| 960 | Support for the EditorConfig standard has been added, an editor-neutral | ||
| 961 | way to provide directory local (project-wide) settings. It is enabled | ||
| 962 | via a new global minor mode @code{editorconfig-mode} which makes Emacs | ||
| 963 | obey the @file{.editorconfig} files. | ||
| 964 | |||
| 965 | @item | ||
| 966 | Support for touchscreens has been improved. On systems that understand | ||
| 967 | them (at present X, Android, PGTK, and MS-Windows), many touch screen | ||
| 968 | gestures are now implemented and translated into mouse or gesture | ||
| 969 | events, and support for tapping tool bar buttons and opening menus has | ||
| 970 | been added. | ||
| 971 | |||
| 972 | @item | ||
| 973 | Tool bar tweaks. The new minor mode @code{window-tool-bar-mode} | ||
| 974 | provides a per-window toolbar. Toolbars can be placed on the bottom of | ||
| 975 | a frame by setting the @code{tool-bar-position} variable on all window | ||
| 976 | systems but GNUStep and macOS. | ||
| 977 | |||
| 978 | @item | ||
| 979 | The @samp{which-key} package from GNU ELPA is now included in Emacs. | ||
| 980 | After enabling the minor mode mode @code{which-key-mode}, if you enter | ||
| 981 | @kbd{C-x} and wait for one second, the minibuffer will expand with all | ||
| 982 | available key bindings that follow @kbd{C-x} (or as many as space | ||
| 983 | allows). | ||
| 984 | |||
| 985 | @item | ||
| 986 | New global minor mode @code{kill-ring-deindent-mode}. When enabled, | ||
| 987 | text being saved to the kill ring will be de-indented by the column | ||
| 988 | number at its start. | ||
| 989 | |||
| 990 | @item | ||
| 991 | New minor mode @code{visual-wrap-prefix-mode}. Unlike @kbd{M-q}, the | ||
| 992 | indentation only happens on display, and doesn't change the buffer text | ||
| 993 | in any way. | ||
| 994 | |||
| 995 | @item | ||
| 996 | Automatic regeneration of TAGS files using the new global minor mode | ||
| 997 | @code{etags-regen-mode}. | ||
| 998 | |||
| 999 | @item | ||
| 1000 | Improved warnings from the byte-code compiler to aid Lisp developers. | ||
| 1001 | |||
| 1002 | @item | ||
| 1003 | Support for underline colors on TTY frames. | ||
| 1004 | |||
| 1005 | @end itemize | ||
| 1006 | |||
| 1007 | |||
| 923 | @node New in Emacs 29 | 1008 | @node New in Emacs 29 |
| 924 | @section What is different about Emacs 29? | 1009 | @section What is different about Emacs 29? |
| 925 | @cindex Differences between Emacs 28 and Emacs 29 | 1010 | @cindex Differences between Emacs 28 and Emacs 29 |
| @@ -929,6 +1014,9 @@ Here's a list of the most important changes in Emacs 29 as compared to | |||
| 929 | Emacs 28 (the full list is too long, and can be read in the Emacs | 1014 | Emacs 28 (the full list is too long, and can be read in the Emacs |
| 930 | @file{NEWS} file by typing @kbd{C-h n} inside Emacs). | 1015 | @file{NEWS} file by typing @kbd{C-h n} inside Emacs). |
| 931 | 1016 | ||
| 1017 | Note that Emacs 29.3 and 29.4 both contained important security fixes. | ||
| 1018 | Upgrading is particularly important if you use Emacs as a mail client. | ||
| 1019 | |||
| 932 | @itemize | 1020 | @itemize |
| 933 | @item | 1021 | @item |
| 934 | Emacs can now be built with the | 1022 | Emacs can now be built with the |
| @@ -3577,6 +3665,21 @@ you use the package system (e.g. @code{M-x list-packages}) with third | |||
| 3577 | party archives. Use only third parties that you can trust! | 3665 | party archives. Use only third parties that you can trust! |
| 3578 | 3666 | ||
| 3579 | @item | 3667 | @item |
| 3668 | Using an out-of-date Emacs version. | ||
| 3669 | |||
| 3670 | For security purposes, we recommend always using the latest officially | ||
| 3671 | released version of Emacs. Using old versions of Emacs might put your | ||
| 3672 | security at risk, as newer versions occasionally include important | ||
| 3673 | security fixes. Please review the Emacs release notes and the | ||
| 3674 | @file{etc/NEWS} file for details. | ||
| 3675 | |||
| 3676 | Upgrading to the most recent version is particularly important if you | ||
| 3677 | use Emacs as a mail client, or to edit files that come from untrusted | ||
| 3678 | sources. You should be able to install the latest version of Emacs | ||
| 3679 | through your system's package manager, and it is always available at | ||
| 3680 | @uref{https://www.gnu.org/software/emacs/, the Emacs website}. | ||
| 3681 | |||
| 3682 | @item | ||
| 3580 | The @code{file-local-variable} feature. (Yes, a risk, but easy to | 3683 | The @code{file-local-variable} feature. (Yes, a risk, but easy to |
| 3581 | change.) | 3684 | change.) |
| 3582 | 3685 | ||
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi index 407b55ee017..22db4e82143 100644 --- a/doc/misc/transient.texi +++ b/doc/misc/transient.texi | |||
| @@ -1208,7 +1208,10 @@ prefix's @code{transient--layout} property, but it is often more convenient | |||
| 1208 | to use the same form as understood by @code{transient-define-prefix}, | 1208 | to use the same form as understood by @code{transient-define-prefix}, |
| 1209 | described below. If you use the latter approach, you can use the | 1209 | described below. If you use the latter approach, you can use the |
| 1210 | @code{transient-parse-suffixes} and @code{transient-parse-suffix} functions to | 1210 | @code{transient-parse-suffixes} and @code{transient-parse-suffix} functions to |
| 1211 | transform them from the convenient to the expected form. | 1211 | transform them from the convenient to the expected form. Depending |
| 1212 | on the used group class, @code{transient-parse-suffixes}'s SUFFIXES must be | ||
| 1213 | a list of group vectors (for @code{transient-columns}) or a list of suffix | ||
| 1214 | lists (for all other group classes). | ||
| 1212 | 1215 | ||
| 1213 | If you explicitly specify children and then transform them using | 1216 | If you explicitly specify children and then transform them using |
| 1214 | @code{:setup-children}, then the class of the group is determined as usual, | 1217 | @code{:setup-children}, then the class of the group is determined as usual, |
| @@ -1220,6 +1223,32 @@ For backward compatibility, if you fail to do so, @code{transient-column} | |||
| 1220 | is used and a warning is displayed. This warning will eventually | 1223 | is used and a warning is displayed. This warning will eventually |
| 1221 | be replaced with an error. | 1224 | be replaced with an error. |
| 1222 | 1225 | ||
| 1226 | @lisp | ||
| 1227 | (transient-define-prefix my-finder-by-keyword () | ||
| 1228 | "Select a keyword and list matching packages." | ||
| 1229 | ;; The real `finder-by-keyword' is more convenient | ||
| 1230 | ;; of course, but that is not the point here. | ||
| 1231 | [:class transient-columns | ||
| 1232 | :setup-children | ||
| 1233 | (lambda (_) | ||
| 1234 | (transient-parse-suffixes | ||
| 1235 | 'my-finder-by-keyword | ||
| 1236 | (let ((char (1- ?A))) | ||
| 1237 | (mapcar ; a list ... | ||
| 1238 | (lambda (partition) | ||
| 1239 | (vconcat ; of group vectors ... | ||
| 1240 | (mapcar (lambda (elt) | ||
| 1241 | (let ((keyword (symbol-name (car elt)))) | ||
| 1242 | ; ... where each suffix is a list | ||
| 1243 | (list (format "%c" (cl-incf char)) | ||
| 1244 | keyword | ||
| 1245 | (lambda () | ||
| 1246 | (interactive) | ||
| 1247 | (finder-list-matches keyword))))) | ||
| 1248 | partition))) | ||
| 1249 | (seq-partition finder-known-keywords 7)))))]) | ||
| 1250 | @end lisp | ||
| 1251 | |||
| 1223 | @item | 1252 | @item |
| 1224 | The boolean @code{:pad-keys} argument controls whether keys of all suffixes | 1253 | The boolean @code{:pad-keys} argument controls whether keys of all suffixes |
| 1225 | contained in a group are right padded, effectively aligning the | 1254 | contained in a group are right padded, effectively aligning the |
diff --git a/etc/NEWS.30 b/etc/NEWS.30 index 8f689327bea..d5409d139dc 100644 --- a/etc/NEWS.30 +++ b/etc/NEWS.30 | |||
| @@ -71,6 +71,16 @@ arranges for Emacs to be the default application for the 'org-protocol' | |||
| 71 | URI scheme. See the Org mode manual, Info node "(org) Protocols" for | 71 | URI scheme. See the Org mode manual, Info node "(org) Protocols" for |
| 72 | more details. | 72 | more details. |
| 73 | 73 | ||
| 74 | --- | ||
| 75 | ** New variable lets Lisp code read emacsclient arguments. | ||
| 76 | When '--eval' is passed to emacsclient and Emacs is evaluating each | ||
| 77 | argument, the new variable 'server-eval-args-left' is set to those | ||
| 78 | arguments not yet evaluated. It can be used by Lisp code to 'pop' | ||
| 79 | arguments and process them by the function called in the '--eval' | ||
| 80 | expression, which is useful when those arguments contain arbitrary | ||
| 81 | characters that otherwise might require elaborate and error-prone | ||
| 82 | escaping (to protect them from the shell). | ||
| 83 | |||
| 74 | 84 | ||
| 75 | * Incompatible Changes in Emacs 30.1 | 85 | * Incompatible Changes in Emacs 30.1 |
| 76 | 86 | ||
| @@ -94,18 +104,6 @@ The old variables 'mouse-wheel-up-event', 'mouse-wheel-down-event', | |||
| 94 | obsolete. | 104 | obsolete. |
| 95 | 105 | ||
| 96 | +++ | 106 | +++ |
| 97 | ** URL now never sends user email addresses in HTTP requests. | ||
| 98 | Emacs never sent email addresses by default, but it used to be | ||
| 99 | possible to customize 'url-privacy-level' so that the users email | ||
| 100 | address was sent along in HTTP requests. This feature has now been | ||
| 101 | removed, as it was considered more dangerous than useful. RFC 9110 | ||
| 102 | (§ 10.1.2) also recommends against it. The user option | ||
| 103 | 'url-personal-mail-address' is now also obsolete. | ||
| 104 | |||
| 105 | To send an email address in the header of individual HTTP requests, | ||
| 106 | see the variable 'url-request-extra-headers'. | ||
| 107 | |||
| 108 | +++ | ||
| 109 | ** 'completion-auto-help' now affects 'icomplete-in-buffer'. | 107 | ** 'completion-auto-help' now affects 'icomplete-in-buffer'. |
| 110 | Previously, 'completion-auto-help' mostly affected only minibuffer | 108 | Previously, 'completion-auto-help' mostly affected only minibuffer |
| 111 | completion. Now, if 'completion-auto-help' has the value 'lazy', then | 109 | completion. Now, if 'completion-auto-help' has the value 'lazy', then |
| @@ -122,7 +120,7 @@ appear when using 'icomplete-in-buffer'. Now the "*Completions*" buffer | |||
| 122 | and Icomplete's in-buffer display of possible completions always | 120 | and Icomplete's in-buffer display of possible completions always |
| 123 | appear together. If you would prefer to see only Icomplete's | 121 | appear together. If you would prefer to see only Icomplete's |
| 124 | in-buffer display, and not the "*Completions*" buffer, you can add this | 122 | in-buffer display, and not the "*Completions*" buffer, you can add this |
| 125 | to your init: | 123 | to your init file: |
| 126 | 124 | ||
| 127 | (advice-add 'completion-at-point :after #'minibuffer-hide-completions) | 125 | (advice-add 'completion-at-point :after #'minibuffer-hide-completions) |
| 128 | 126 | ||
| @@ -132,98 +130,68 @@ The round-trip through the Lisp function | |||
| 132 | the default one. It's reimplemented in native code, reducing GC churn. | 130 | the default one. It's reimplemented in native code, reducing GC churn. |
| 133 | To undo this change, set 'fast-read-process-output' to nil. | 131 | To undo this change, set 'fast-read-process-output' to nil. |
| 134 | 132 | ||
| 135 | |||
| 136 | * Changes in Emacs 30.1 | ||
| 137 | |||
| 138 | ** 'advice-remove' is now an interactive command. | ||
| 139 | When called interactively, 'advice-remove' now prompts for an advised | ||
| 140 | function to the advice to remove. | ||
| 141 | |||
| 142 | ** Emacs now supports Unicode Standard version 15.1. | ||
| 143 | |||
| 144 | ** New pre-defined values for 'electric-quote-chars'. | ||
| 145 | The available customization options for 'electric-quote-chars' have been | ||
| 146 | updated with common pairs of quotation characters, including "‘", "’", | ||
| 147 | "“", "”", "«", "»", "‹", "›", "‚", "„", "「", "」", "『", and "』". | ||
| 148 | The default is unchanged. | ||
| 149 | |||
| 150 | ** Network Security Manager | ||
| 151 | |||
| 152 | +++ | 133 | +++ |
| 153 | *** The Network Security Manager now warns about 3DES by default. | 134 | ** The Network Security Manager now warns about 3DES by default. |
| 154 | This cypher is no longer recommended owing to a major vulnerability | 135 | This cypher is no longer recommended owing to a major vulnerability |
| 155 | disclosed in 2016, and its small 112 bit key size. Emacs now warns | 136 | disclosed in 2016, and its small 112 bit key size. Emacs now warns |
| 156 | about its use also when 'network-security-level' is set to 'medium' | 137 | about its use also when 'network-security-level' is set to 'medium' |
| 157 | (the default). See 'network-security-protocol-checks'. | 138 | (the default). See 'network-security-protocol-checks'. |
| 158 | 139 | ||
| 159 | --- | 140 | --- |
| 160 | *** The Network Security Manager now warns about <2048 bits in DH key exchange. | 141 | ** The Network Security Manager now warns about <2048 bits in DH key exchange. |
| 161 | Emacs used to warn for Diffie-Hellman key exchanges with prime numbers | 142 | Emacs used to warn for Diffie-Hellman key exchanges with prime numbers |
| 162 | smaller than 1024 bits. Since more servers now support it, this | 143 | smaller than 1024 bits. Since more servers now support it, this |
| 163 | number has been bumped to 2048 bits. | 144 | number has been bumped to 2048 bits. |
| 164 | 145 | ||
| 165 | ** Help | ||
| 166 | |||
| 167 | +++ | 146 | +++ |
| 168 | *** New command 'help-find-source'. | 147 | ** URL now never sends user email addresses in HTTP requests. |
| 169 | Switch to a buffer visiting the source of what is being described in | 148 | Emacs never sent email addresses by default, but it used to be |
| 170 | "*Help*". It is bound to 'C-h 4 s' globally. | 149 | possible to customize 'url-privacy-level' so that the users email |
| 171 | 150 | address was sent along in HTTP requests. This feature has now been | |
| 172 | *** 'describe-function' shows function inferred type when available. | 151 | removed, as it was considered more dangerous than useful. RFC 9110 |
| 173 | For native compiled Lisp functions 'describe-function' prints (after | 152 | (§ 10.1.2) also recommends against it. The user option |
| 174 | the signature) the automatically inferred function type as well. | 153 | 'url-personal-mail-address' is now also obsolete. |
| 175 | |||
| 176 | *** 'describe-function' now shows the type of the function object. | ||
| 177 | The text used to say things like "car is is a built-in function" whereas | ||
| 178 | it now says "car is a primitive-function" where "primitive-function" is | ||
| 179 | the symbol returned by 'cl-type-of'. You can click on those words to | ||
| 180 | get information about that type. | ||
| 181 | |||
| 182 | --- | ||
| 183 | *** New user option 'describe-bindings-outline-rules'. | ||
| 184 | This user option controls outline visibility in the output buffer of | ||
| 185 | 'describe-bindings' when 'describe-bindings-outline' is non-nil. | ||
| 186 | |||
| 187 | --- | ||
| 188 | *** 'C-h m' ('describe-mode') uses outlining by default. | ||
| 189 | Set 'describe-mode-outline' to nil to get back the old behavior. | ||
| 190 | |||
| 191 | *** 'C-h k' ('describe-key') shows Unicode name. | ||
| 192 | For keybindings which produce single characters via translation or input | ||
| 193 | methods, 'C-h k' now shows the Unicode name of the produced character in | ||
| 194 | addition to the character itself, e.g. | ||
| 195 | |||
| 196 | 'C-h k C-x 8 E' => | ||
| 197 | |||
| 198 | € 'EURO SIGN' (translated from C-x 8 E) | ||
| 199 | 154 | ||
| 200 | *** 'C-h b' ('describe-bindings') shows Unicode names. | 155 | To send an email address in the header of individual HTTP requests, |
| 201 | For keybindings which produce single characters via translation (such as | 156 | see the variable 'url-request-extra-headers'. |
| 202 | those using the 'C-x 8' or 'A-' prefix, or 'dead-acute', 'dead-grave', | ||
| 203 | etc), the Unicode names will now be shown in addition to the character | ||
| 204 | itself, i.e. | ||
| 205 | 157 | ||
| 206 | A-! ¡ INVERTED EXCLAMATION MARK | 158 | |
| 207 | A-$ ¤ CURRENCY SIGN | 159 | * Changes in Emacs 30.1 |
| 208 | 160 | ||
| 209 | and so on. | 161 | ** Emacs now supports Unicode Standard version 15.1. |
| 210 | 162 | ||
| 211 | +++ | 163 | +++ |
| 212 | *** Multi-character key echo now ends with a suggestion to use Help. | 164 | ** Emacs now comes with Org v9.7. |
| 213 | Customize 'echo-keystrokes-help' to nil to prevent that. | 165 | See the file "etc/ORG-NEWS" for user-visible changes in Org. |
| 214 | 166 | ||
| 215 | ** Customize | 167 | +++ |
| 168 | ** Improved support for touchscreen devices. | ||
| 169 | On systems that understand them (at present X, Android, PGTK, and | ||
| 170 | MS-Windows), many touch screen gestures are now implemented and | ||
| 171 | translated into mouse or gesture events, and support for tapping tool | ||
| 172 | bar buttons and opening menus has been added. Countless packages, such | ||
| 173 | as Dired and Custom, have been adjusted to better understand touch | ||
| 174 | screen input. | ||
| 216 | 175 | ||
| 217 | +++ | 176 | +++ |
| 218 | *** New command 'customize-dirlocals'. | 177 | ** Support for styled underline face attributes. |
| 219 | This command pops up a buffer to edit the settings in ".dir-locals.el". | 178 | These are implemented as new values of the 'style' attribute in a face |
| 179 | underline specification, 'double-line', 'dots', and 'dashes', and are | ||
| 180 | available on GUI systems. If your terminal's termcap or terminfo | ||
| 181 | database entry defines the 'Su' or 'Smulx' capability, Emacs will also | ||
| 182 | emit the prescribed escape sequence to render faces with such styles on | ||
| 183 | TTY frames. | ||
| 220 | 184 | ||
| 221 | --- | 185 | --- |
| 222 | *** New command 'customize-toggle-option'. | 186 | ** Support for underline colors on TTY frames. |
| 223 | This command can toggle boolean options for the duration of a session. | 187 | Colors specified in face underlines will now also be displayed in TTY |
| 188 | frames with the previously mentioned capabilities. | ||
| 224 | 189 | ||
| 225 | ** Emacs now comes with Org v9.7. | 190 | ** Modeline elements can now be right-aligned. |
| 226 | See the file "etc/ORG-NEWS" for user-visible changes in Org. | 191 | Anything following the symbol 'mode-line-format-right-align' in |
| 192 | 'mode-line-format' will be right-aligned. Exactly where it is | ||
| 193 | right-aligned to is controlled by the new user option | ||
| 194 | 'mode-line-right-align-edge'. | ||
| 227 | 195 | ||
| 228 | ** X selection requests are now handled much faster and asynchronously. | 196 | ** X selection requests are now handled much faster and asynchronously. |
| 229 | This means it should be less necessary to disable the likes of | 197 | This means it should be less necessary to disable the likes of |
| @@ -236,90 +204,61 @@ compositing manager, Emacs will now redisplay such a frame even though | |||
| 236 | 'frame-visible-p' returns nil or 'icon' for it. This can happen, for | 204 | 'frame-visible-p' returns nil or 'icon' for it. This can happen, for |
| 237 | example, as part of preview for iconified frames. | 205 | example, as part of preview for iconified frames. |
| 238 | 206 | ||
| 239 | --- | ||
| 240 | ** New user option 'menu-bar-close-window'. | ||
| 241 | When non-nil, selecting "Close" from the "File" menu or clicking | ||
| 242 | "Close" in the tool bar will result in the current window being | ||
| 243 | closed, if possible. | ||
| 244 | |||
| 245 | +++ | 207 | +++ |
| 246 | ** New user option 'remote-file-name-inhibit-delete-by-moving-to-trash'. | 208 | ** Most file notification backends detect unmounting of a watched filesystem. |
| 247 | When non-nil, this option suppresses moving remote files to the local | 209 | The only exception is w32notify. |
| 248 | trash when deleting. Default is nil. | ||
| 249 | |||
| 250 | --- | ||
| 251 | ** New user option 'remote-file-name-inhibit-auto-save'. | ||
| 252 | If this user option is non-nil, 'auto-save-mode' will not auto-save | ||
| 253 | remote buffers. The default is nil. | ||
| 254 | |||
| 255 | +++ | ||
| 256 | ** New user option 'remote-file-name-access-timeout'. | ||
| 257 | When a positive number, this option limits the call of 'access-file' | ||
| 258 | for remote files to this number of seconds. Default is nil. | ||
| 259 | |||
| 260 | --- | ||
| 261 | ** New icon images for general use. | ||
| 262 | Several symbolic icons are added to "etc/images/symbols", including | ||
| 263 | plus, minus, check-mark, star, etc. | ||
| 264 | |||
| 265 | ** Tool bars | ||
| 266 | |||
| 267 | +++ | ||
| 268 | *** Tool bars can now be placed on the bottom on more systems. | ||
| 269 | The 'tool-bar-position' frame parameter can be set to 'bottom' on all | ||
| 270 | window systems other than Nextstep. | ||
| 271 | |||
| 272 | +++ | ||
| 273 | *** New global minor mode 'modifier-bar-mode'. | ||
| 274 | When this minor mode is enabled, buttons representing modifier keys | ||
| 275 | are displayed along the tool bar. | ||
| 276 | 210 | ||
| 277 | +++ | 211 | +++ |
| 278 | *** New user option 'tool-bar-always-show-default'. | 212 | ** Image ':map' property is now recomputed when image is transformed. |
| 279 | When non-nil, the tool bar at the top of a frame does not show buffer | 213 | Now images with clickable maps work as expected after you run commands |
| 280 | local customization of the tool bar. The default value is nil. | 214 | such as 'image-increase-size', 'image-decrease-size', 'image-rotate', |
| 281 | 215 | 'image-flip-horizontally', and 'image-flip-vertically'. | |
| 282 | --- | 216 | Set the new user option 'image-recompute-map-p' to nil to prevent Emacs |
| 283 | ** New user option 'uniquify-dirname-transform'. | 217 | from recomputing image maps. |
| 284 | This can be used to customize how buffer names are uniquified, by | ||
| 285 | making arbitrary transforms on the buffer's directory name (whose | ||
| 286 | components are used to uniquify buffer names when they clash). You | ||
| 287 | can use this to distinguish between buffers visiting files with the | ||
| 288 | same base name that belong to different projects by using the provided | ||
| 289 | transform function 'project-uniquify-dirname-transform'. | ||
| 290 | 218 | ||
| 291 | +++ | 219 | ** Minibuffer and Completions |
| 292 | ** CL Print | ||
| 293 | 220 | ||
| 294 | +++ | 221 | *** New commands 'previous-line-completion' and 'next-line-completion'. |
| 295 | *** You can expand the "..." truncation everywhere. | 222 | Bound to '<up>' and '<down>' arrow keys, respectively, they navigate |
| 296 | The code that allowed "..." to be expanded in the "*Backtrace*" buffer | 223 | the "*Completions*" buffer vertically by lines, wrapping at the |
| 297 | should now work anywhere the data is generated by 'cl-print'. | 224 | top/bottom when 'completion-auto-wrap' is non-nil. |
| 298 | 225 | ||
| 299 | +++ | 226 | *** New user option 'minibuffer-visible-completions'. |
| 300 | *** The 'backtrace-ellipsis' button is replaced by 'cl-print-ellipsis'. | 227 | When customized to non-nil, you can use arrow keys in the minibuffer |
| 228 | to navigate the completions displayed in the "*Completions*" window. | ||
| 229 | Typing 'RET' selects the highlighted candidate. 'C-g' hides the | ||
| 230 | completions window. When the completions window is not visible, | ||
| 231 | then all these keys have their usual meaning in the minibuffer. | ||
| 232 | This option is supported for in-buffer completion as well. | ||
| 301 | 233 | ||
| 302 | +++ | 234 | *** Selected completion candidates are deselected on typing. |
| 303 | *** hash-tables' contents can be expanded via the ellipsis. | 235 | When you type at the minibuffer prompt, the current completion |
| 236 | candidate will be un-highlighted, and point in the "*Completions*" window | ||
| 237 | will be moved off that candidate. 'minibuffer-choose-completion' | ||
| 238 | ('M-RET') will still choose a previously-selected completion | ||
| 239 | candidate, but the new command 'minibuffer-choose-completion-or-exit' | ||
| 240 | (bound to 'RET' by 'minibuffer-visible-completions') will exit with | ||
| 241 | the minibuffer contents instead. This deselection behavior can be | ||
| 242 | controlled with the new user option 'completion-auto-deselect', which | ||
| 243 | is t by default. | ||
| 304 | 244 | ||
| 305 | +++ | 245 | *** New value 'historical' for user option 'completions-sort'. |
| 306 | *** Modes can control the expansion via 'cl-print-expand-ellipsis-function'. | 246 | When 'completions-sort' is set to 'historical', completion candidates |
| 247 | will be first sorted alphabetically, and then re-sorted by their order | ||
| 248 | in the minibuffer history, with more recent candidates appearing first. | ||
| 307 | 249 | ||
| 308 | +++ | 250 | +++ |
| 309 | *** New setting 'raw' for 'cl-print-compiled'. | 251 | *** 'completion-category-overrides' supports more metadata. |
| 310 | This setting causes byte-compiled functions to be printed in full by | 252 | The new supported completion properties are 'cycle-sort-function', |
| 311 | 'prin1'. A button on this output can be activated to disassemble the | 253 | 'display-sort-function', 'annotation-function', 'affixation-function', |
| 312 | function. | 254 | and 'group-function'. You can now customize them for any category in |
| 255 | 'completion-category-overrides' that will override the properties | ||
| 256 | defined in completion metadata. | ||
| 313 | 257 | ||
| 314 | +++ | 258 | +++ |
| 315 | *** There is a new chapter in the CL manual documenting cl-print.el. | 259 | *** 'completion-extra-properties' supports more metadata. |
| 316 | See the Info node "(cl) Printing". | 260 | The new supported completion properties are 'category', |
| 317 | 261 | 'group-function', 'display-sort-function', and 'cycle-sort-function'. | |
| 318 | ** Modeline elements can now be right-aligned. | ||
| 319 | Anything following the symbol 'mode-line-format-right-align' in | ||
| 320 | 'mode-line-format' will be right-aligned. Exactly where it is | ||
| 321 | right-aligned to is controlled by the new user option | ||
| 322 | 'mode-line-right-align-edge'. | ||
| 323 | 262 | ||
| 324 | ** Windows | 263 | ** Windows |
| 325 | 264 | ||
| @@ -359,13 +298,6 @@ by adding '(category . symbol)' to the condition part of | |||
| 359 | It specifies whether the window of the displayed buffer should be | 298 | It specifies whether the window of the displayed buffer should be |
| 360 | selected or deselected at the end of executing the current command. | 299 | selected or deselected at the end of executing the current command. |
| 361 | 300 | ||
| 362 | --- | ||
| 363 | *** User option 'display-comint-buffer-action' is now obsolete. | ||
| 364 | You can use a '(category . comint)' condition in 'display-buffer-alist' | ||
| 365 | to match buffers displayed by comint-related commands. Another | ||
| 366 | user option 'display-tex-shell-buffer-action' is obsolete too | ||
| 367 | for which you can use '(category . tex-shell)'. | ||
| 368 | |||
| 369 | +++ | 301 | +++ |
| 370 | *** New variable 'window-restore-killed-buffer-windows'. | 302 | *** New variable 'window-restore-killed-buffer-windows'. |
| 371 | It specifies how 'set-window-configuration' and 'window-state-put' | 303 | It specifies how 'set-window-configuration' and 'window-state-put' |
| @@ -388,6 +320,30 @@ according to the context stored in a window parameter. | |||
| 388 | are always created with a 'window-cursor-type' of t, which means to | 320 | are always created with a 'window-cursor-type' of t, which means to |
| 389 | consult the variable 'cursor-type' as before. | 321 | consult the variable 'cursor-type' as before. |
| 390 | 322 | ||
| 323 | --- | ||
| 324 | *** The user option 'display-comint-buffer-action' is now obsolete. | ||
| 325 | You can use a '(category . comint)' condition in 'display-buffer-alist' | ||
| 326 | to match buffers displayed by comint-related commands. Another | ||
| 327 | user option 'display-tex-shell-buffer-action' is obsolete too | ||
| 328 | for which you can use '(category . tex-shell)'. | ||
| 329 | |||
| 330 | ** Tool bars | ||
| 331 | |||
| 332 | +++ | ||
| 333 | *** Tool bars can now be placed on the bottom on more systems. | ||
| 334 | The 'tool-bar-position' frame parameter can be set to 'bottom' on all | ||
| 335 | window systems other than macOS and GNUstep (Nextstep). | ||
| 336 | |||
| 337 | +++ | ||
| 338 | *** New global minor mode 'modifier-bar-mode'. | ||
| 339 | When this minor mode is enabled, buttons representing modifier keys | ||
| 340 | are displayed along the tool bar. | ||
| 341 | |||
| 342 | +++ | ||
| 343 | *** New user option 'tool-bar-always-show-default'. | ||
| 344 | When non-nil, the tool bar at the top of a frame does not show buffer | ||
| 345 | local customization of the tool bar. The default value is nil. | ||
| 346 | |||
| 391 | ** Tab Bars and Tab Lines | 347 | ** Tab Bars and Tab Lines |
| 392 | 348 | ||
| 393 | --- | 349 | --- |
| @@ -410,6 +366,11 @@ It can be used to add, remove and reorder functions that change the | |||
| 410 | appearance of every tab on the tab bar. | 366 | appearance of every tab on the tab bar. |
| 411 | 367 | ||
| 412 | --- | 368 | --- |
| 369 | *** New user option 'tab-line-tabs-buffer-group-function'. | ||
| 370 | It provides two choices to group tab buffers by major mode and by | ||
| 371 | project name. | ||
| 372 | |||
| 373 | --- | ||
| 413 | *** New hook 'tab-bar-tab-post-select-functions'. | 374 | *** New hook 'tab-bar-tab-post-select-functions'. |
| 414 | 375 | ||
| 415 | --- | 376 | --- |
| @@ -436,68 +397,106 @@ these buffers. You can drag the tabs and release at a new position | |||
| 436 | to manually reorder the buffers on the tab line. | 397 | to manually reorder the buffers on the tab line. |
| 437 | 398 | ||
| 438 | --- | 399 | --- |
| 439 | *** New user option 'tab-line-tabs-buffer-group-function'. | ||
| 440 | It provides two choices to group tab buffers by major mode and by | ||
| 441 | project name. | ||
| 442 | |||
| 443 | --- | ||
| 444 | *** Buffers on group tabs are now sorted alphabetically. | 400 | *** Buffers on group tabs are now sorted alphabetically. |
| 445 | This will keep the fixed order of tabs, even after switching between | 401 | This will keep the fixed order of tabs, even after switching between |
| 446 | them. | 402 | them. |
| 447 | 403 | ||
| 404 | ** Help | ||
| 405 | |||
| 448 | +++ | 406 | +++ |
| 449 | ** New prefix argument for modifying directory-local variables. | 407 | *** New command 'help-find-source'. |
| 408 | Switch to a buffer visiting the source of what is being described in | ||
| 409 | "*Help*". It is bound to 'C-h 4 s' globally. | ||
| 410 | |||
| 411 | --- | ||
| 412 | *** New user option 'describe-bindings-outline-rules'. | ||
| 413 | This user option controls outline visibility in the output buffer of | ||
| 414 | 'describe-bindings' when 'describe-bindings-outline' is non-nil. | ||
| 415 | |||
| 416 | *** 'describe-function' shows function inferred type when available. | ||
| 417 | For native compiled Lisp functions 'describe-function' prints (after | ||
| 418 | the signature) the automatically inferred function type as well. | ||
| 419 | |||
| 420 | *** 'describe-function' now shows the type of the function object. | ||
| 421 | The text used to say things like "car is is a built-in function" whereas | ||
| 422 | it now says "car is a primitive-function" where "primitive-function" is | ||
| 423 | the symbol returned by 'cl-type-of'. You can click on those words to | ||
| 424 | get information about that type. | ||
| 425 | |||
| 426 | --- | ||
| 427 | *** 'C-h m' ('describe-mode') uses outlining by default. | ||
| 428 | Set 'describe-mode-outline' to nil to get back the old behavior. | ||
| 429 | |||
| 430 | *** 'C-h k' ('describe-key') shows Unicode name. | ||
| 431 | For keybindings which produce single characters via translation or input | ||
| 432 | methods, 'C-h k' now shows the Unicode name of the produced character in | ||
| 433 | addition to the character itself, e.g. | ||
| 434 | |||
| 435 | 'C-h k C-x 8 E' => | ||
| 436 | |||
| 437 | € 'EURO SIGN' (translated from C-x 8 E) | ||
| 438 | |||
| 439 | *** 'C-h b' ('describe-bindings') shows Unicode names. | ||
| 440 | For keybindings which produce single characters via translation (such as | ||
| 441 | those using the 'C-x 8' or 'A-' prefix, or 'dead-acute', 'dead-grave', | ||
| 442 | etc), the Unicode names will now be shown in addition to the character | ||
| 443 | itself, i.e. | ||
| 444 | |||
| 445 | A-! ¡ INVERTED EXCLAMATION MARK | ||
| 446 | A-$ ¤ CURRENCY SIGN | ||
| 447 | |||
| 448 | and so on. | ||
| 449 | |||
| 450 | +++ | ||
| 451 | *** Multi-character key echo now ends with a suggestion to use Help. | ||
| 452 | Customize 'echo-keystrokes-help' to nil to prevent that. | ||
| 453 | |||
| 454 | ** Customize | ||
| 455 | |||
| 456 | +++ | ||
| 457 | *** New command 'customize-dirlocals'. | ||
| 458 | This command pops up a buffer to edit the settings in ".dir-locals.el". | ||
| 459 | |||
| 460 | --- | ||
| 461 | *** New command 'customize-toggle-option'. | ||
| 462 | This command can toggle boolean options for the duration of a session. | ||
| 463 | |||
| 464 | +++ | ||
| 465 | *** New prefix argument for modifying directory-local variables. | ||
| 450 | The commands 'add-dir-local-variable', 'delete-dir-local-variable' and | 466 | The commands 'add-dir-local-variable', 'delete-dir-local-variable' and |
| 451 | 'copy-file-locals-to-dir-locals' now take an optional prefix argument, | 467 | 'copy-file-locals-to-dir-locals' now take an optional prefix argument, |
| 452 | to enter the file name you want to modify. | 468 | to enter the file name you want to modify. |
| 453 | 469 | ||
| 454 | ** Emacs Server and Client | 470 | *** New user option 'safe-local-variable-directories'. |
| 471 | This user option names directories in which Emacs will treat all | ||
| 472 | directory-local variables as safe. | ||
| 455 | 473 | ||
| 456 | --- | 474 | +++ |
| 457 | *** 'server-eval-args-left' can be used to pop and eval subsequent args. | 475 | ** CL Print |
| 458 | When '--eval' is passed to emacsclient and Emacs is evaluating each | ||
| 459 | argument, this variable is set to those arguments not yet evaluated. | ||
| 460 | It can be used to 'pop' arguments and process them by the function | ||
| 461 | called in the '--eval' expression, which is useful when those | ||
| 462 | arguments contain arbitrary characters that otherwise might require | ||
| 463 | elaborate and error-prone escaping (to protect them from the shell). | ||
| 464 | 476 | ||
| 465 | +++ | 477 | +++ |
| 466 | ** 'recover-file' can show diffs between auto save file and current file. | 478 | *** You can expand the "..." truncation everywhere. |
| 467 | When answering the prompt with "diff" or "=", it now shows the diffs | 479 | The code that allowed "..." to be expanded in the "*Backtrace*" buffer |
| 468 | between the auto save file and the current file. | 480 | should now work anywhere the data is generated by 'cl-print'. |
| 469 | 481 | ||
| 470 | +++ | 482 | +++ |
| 471 | ** 'read-passwd' can toggle the visibility of passwords. | 483 | *** The 'backtrace-ellipsis' button is replaced by 'cl-print-ellipsis'. |
| 472 | Use 'TAB' in the minibuffer to show or hide the password. Likewise, | ||
| 473 | there is an icon on the mode-line, which toggles the visibility of the | ||
| 474 | password when clicking with 'mouse-1'. | ||
| 475 | 484 | ||
| 476 | +++ | 485 | +++ |
| 477 | ** Support for styled underline face attributes. | 486 | *** hash-tables' contents can be expanded via the ellipsis. |
| 478 | These are implemented as new values of the 'style' attribute in a face | ||
| 479 | underline specification, 'double-line', 'dots', and 'dashes', and are | ||
| 480 | available on GUI systems. If your terminal's termcap or terminfo | ||
| 481 | database entry defines the 'Su' or 'Smulx' capability, Emacs will also | ||
| 482 | emit the prescribed escape sequence to render faces with such styles on | ||
| 483 | TTY frames. | ||
| 484 | 487 | ||
| 485 | --- | 488 | +++ |
| 486 | ** Support for underline colors on TTY frames. | 489 | *** Modes can control the expansion via 'cl-print-expand-ellipsis-function'. |
| 487 | Colors specified in face underlines will now also be displayed in TTY | ||
| 488 | frames with the previously mentioned capabilities. | ||
| 489 | 490 | ||
| 490 | +++ | 491 | +++ |
| 491 | ** Image ':map' property is now recomputed when image is transformed. | 492 | *** New setting 'raw' for 'cl-print-compiled'. |
| 492 | Now images with clickable maps work as expected after you run commands | 493 | This setting causes byte-compiled functions to be printed in full by |
| 493 | such as 'image-increase-size', 'image-decrease-size', 'image-rotate', | 494 | 'prin1'. A button on this output can be activated to disassemble the |
| 494 | 'image-flip-horizontally', and 'image-flip-vertically'. | 495 | function. |
| 495 | Set the new user option 'image-recompute-map-p' to nil to prevent Emacs | ||
| 496 | from recomputing image maps. | ||
| 497 | 496 | ||
| 498 | +++ | 497 | +++ |
| 499 | ** Most file notification backends detect unmounting of a watched filesystem. | 498 | *** There is a new chapter in the CL manual documenting cl-print.el. |
| 500 | The only exception is w32notify. | 499 | See the Info node "(cl) Printing". |
| 501 | 500 | ||
| 502 | ** Miscellaneous | 501 | ** Miscellaneous |
| 503 | 502 | ||
| @@ -506,14 +505,44 @@ The only exception is w32notify. | |||
| 506 | This works like 'kill-matching-buffers', but without asking for | 505 | This works like 'kill-matching-buffers', but without asking for |
| 507 | confirmation. | 506 | confirmation. |
| 508 | 507 | ||
| 509 | *** New user option 'safe-local-variable-directories'. | 508 | +++ |
| 510 | This user option names directories in which Emacs will treat all | 509 | *** 'recover-file' can show diffs between auto save file and current file. |
| 511 | directory-local variables as safe. | 510 | When answering the prompt with "diff" or "=", it now shows the diffs |
| 511 | between the auto save file and the current file. | ||
| 512 | |||
| 513 | +++ | ||
| 514 | *** 'read-passwd' can toggle the visibility of passwords. | ||
| 515 | Use 'TAB' in the minibuffer to show or hide the password. Likewise, | ||
| 516 | there is an icon on the mode-line, which toggles the visibility of the | ||
| 517 | password when clicking with 'mouse-1'. | ||
| 518 | |||
| 519 | *** 'advice-remove' is now an interactive command. | ||
| 520 | When called interactively, 'advice-remove' now prompts for an advised | ||
| 521 | function to the advice to remove. | ||
| 512 | 522 | ||
| 513 | --- | 523 | --- |
| 514 | *** New face 'appt-notification' for 'appt-display-mode-line'. | 524 | *** New user option 'uniquify-dirname-transform'. |
| 515 | It can be used to customize the look of the appointment notification | 525 | This can be used to customize how buffer names are uniquified, by |
| 516 | displayed on the mode line when 'appt-display-mode-line' is non-nil. | 526 | making arbitrary transforms on the buffer's directory name (whose |
| 527 | components are used to uniquify buffer names when they clash). You | ||
| 528 | can use this to distinguish between buffers visiting files with the | ||
| 529 | same base name that belong to different projects by using the provided | ||
| 530 | transform function 'project-uniquify-dirname-transform'. | ||
| 531 | |||
| 532 | +++ | ||
| 533 | *** New user option 'remote-file-name-inhibit-delete-by-moving-to-trash'. | ||
| 534 | When non-nil, this option suppresses moving remote files to the local | ||
| 535 | trash when deleting. Default is nil. | ||
| 536 | |||
| 537 | --- | ||
| 538 | *** New user option 'remote-file-name-inhibit-auto-save'. | ||
| 539 | If this user option is non-nil, 'auto-save-mode' will not auto-save | ||
| 540 | remote buffers. The default is nil. | ||
| 541 | |||
| 542 | +++ | ||
| 543 | *** New user option 'remote-file-name-access-timeout'. | ||
| 544 | When a positive number, this option limits the call of 'access-file' | ||
| 545 | for remote files to this number of seconds. Default is nil. | ||
| 517 | 546 | ||
| 518 | +++ | 547 | +++ |
| 519 | *** New user option 'yes-or-no-prompt'. | 548 | *** New user option 'yes-or-no-prompt'. |
| @@ -522,22 +551,32 @@ This allows the user to customize the prompt that is appended by | |||
| 522 | "(yes or no) ". | 551 | "(yes or no) ". |
| 523 | 552 | ||
| 524 | --- | 553 | --- |
| 554 | *** New user option 'menu-bar-close-window'. | ||
| 555 | When non-nil, selecting "Close" from the "File" menu or clicking | ||
| 556 | "Close" in the tool bar will result in the current window being | ||
| 557 | closed, if possible. | ||
| 558 | |||
| 559 | --- | ||
| 525 | *** New face 'display-time-date-and-time'. | 560 | *** New face 'display-time-date-and-time'. |
| 526 | This is used for displaying the time and date components of | 561 | This is used for displaying the time and date components of |
| 527 | 'display-time-mode'. | 562 | 'display-time-mode'. |
| 528 | 563 | ||
| 529 | --- | 564 | --- |
| 565 | *** New face 'appt-notification' for 'appt-display-mode-line'. | ||
| 566 | It can be used to customize the look of the appointment notification | ||
| 567 | displayed on the mode line when 'appt-display-mode-line' is non-nil. | ||
| 568 | |||
| 569 | --- | ||
| 570 | *** New icon images for general use. | ||
| 571 | Several symbolic icons have been added to "etc/images/symbols", | ||
| 572 | including plus, minus, check-mark, star, etc. | ||
| 573 | |||
| 574 | --- | ||
| 530 | *** Emacs now recognizes shebang lines that pass '-S'/'--split-string' to 'env'. | 575 | *** Emacs now recognizes shebang lines that pass '-S'/'--split-string' to 'env'. |
| 531 | When visiting a script that invokes 'env -S INTERPRETER ARGS...' in | 576 | When visiting a script that invokes 'env -S INTERPRETER ARGS...' in |
| 532 | its shebang line, Emacs will now skip over 'env -S' and deduce the | 577 | its shebang line, Emacs will now skip over 'env -S' and deduce the |
| 533 | major mode based on the interpreter after 'env -S'. | 578 | major mode based on the interpreter after 'env -S'. |
| 534 | 579 | ||
| 535 | +++ | ||
| 536 | *** New function 'sqlite-execute-batch'. | ||
| 537 | This function lets the user execute multiple SQL statements in one go. | ||
| 538 | It is useful, for example, when a Lisp program needs to evaluate an | ||
| 539 | entire SQL file. | ||
| 540 | |||
| 541 | *** 'insert-directory-program' is now a user option. | 580 | *** 'insert-directory-program' is now a user option. |
| 542 | On *BSD and macOS systems, this user option now defaults to the "gls" | 581 | On *BSD and macOS systems, this user option now defaults to the "gls" |
| 543 | executable, if it exists. This should remove the need to change its | 582 | executable, if it exists. This should remove the need to change its |
| @@ -574,28 +613,6 @@ buffers. | |||
| 574 | (This minor mode is the 'adaptive-wrap' ELPA package renamed and | 613 | (This minor mode is the 'adaptive-wrap' ELPA package renamed and |
| 575 | lightly edited for inclusion in Emacs.) | 614 | lightly edited for inclusion in Emacs.) |
| 576 | 615 | ||
| 577 | ** New command 'replace-regexp-as-diff'. | ||
| 578 | It reads a regexp to search for and a string to replace with, then | ||
| 579 | displays a buffer with replacements as diffs. After reviewing the | ||
| 580 | changes in the output buffer you can apply the replacements as | ||
| 581 | a patch to the current file buffer. There are also new commands | ||
| 582 | 'multi-file-replace-regexp-as-diff' that shows as diffs replacements | ||
| 583 | in a list of specified files, and 'dired-do-replace-regexp-as-diff' | ||
| 584 | that shows as diffs replacements in the marked files in Dired. | ||
| 585 | |||
| 586 | +++ | ||
| 587 | ** New mode of prompting for register names and showing preview. | ||
| 588 | The new user option 'register-use-preview' can be customized to the | ||
| 589 | value t or insist to request a different user interface of prompting for | ||
| 590 | register names and previewing the registers: Emacs will require | ||
| 591 | confirmation for overwriting the value of a register, and will show | ||
| 592 | the preview of registers without delay. You can also customize this | ||
| 593 | new option to disable the preview completely. | ||
| 594 | |||
| 595 | The default value of 'register-use-preview' preserves the behavior of | ||
| 596 | Emacs 29 and before. See the Info node "(emacs) Registers" for more | ||
| 597 | details about the new UI and its variants. | ||
| 598 | |||
| 599 | --- | 616 | --- |
| 600 | ** New global minor mode 'kill-ring-deindent-mode'. | 617 | ** New global minor mode 'kill-ring-deindent-mode'. |
| 601 | When enabled, text being saved to the kill ring will be de-indented by | 618 | When enabled, text being saved to the kill ring will be de-indented by |
| @@ -619,34 +636,39 @@ to the kill ring, omitting the two columns of extra indentation that | |||
| 619 | would otherwise be present in the second and third lines of the | 636 | would otherwise be present in the second and third lines of the |
| 620 | function call. | 637 | function call. |
| 621 | 638 | ||
| 639 | ** New command 'replace-regexp-as-diff'. | ||
| 640 | It reads a regexp to search for and a string to replace with, then | ||
| 641 | displays a buffer with replacements as diffs. After reviewing the | ||
| 642 | changes in the output buffer you can apply the replacements as | ||
| 643 | a patch to the current file buffer. There are also new commands | ||
| 644 | 'multi-file-replace-regexp-as-diff' that shows as diffs replacements | ||
| 645 | in a list of specified files, and 'dired-do-replace-regexp-as-diff' | ||
| 646 | that shows as diffs replacements in the marked files in Dired. | ||
| 647 | |||
| 622 | +++ | 648 | +++ |
| 623 | ** Emacs now has better support for touchscreen devices. | 649 | ** New mode of prompting for register names and showing preview. |
| 624 | On systems that understand them (at present X, Android, PGTK, and | 650 | The new user option 'register-use-preview' can be customized to the |
| 625 | MS-Windows), many touch screen gestures are now implemented and | 651 | value t or insist to request a different user interface of prompting for |
| 626 | translated into mouse or gesture events, and support for tapping tool | 652 | register names and previewing the registers: Emacs will require |
| 627 | bar buttons and opening menus has been written. Countless packages, | 653 | confirmation for overwriting the value of a register, and will show |
| 628 | such as Dired and Custom have been adjusted to better understand touch | 654 | the preview of registers without delay. You can also customize this |
| 629 | screen input. | 655 | new option to disable the preview completely. |
| 630 | 656 | ||
| 631 | --- | 657 | The default value of 'register-use-preview' preserves the behavior of |
| 632 | ** On X, Emacs now supports input methods which perform "string conversion". | 658 | Emacs 29 and before. See the Info node "(emacs) Registers" for more |
| 633 | This means an input method can now ask Emacs to delete text | 659 | details about the new UI and its variants. |
| 634 | surrounding point and replace it with something else, as well as query | ||
| 635 | Emacs for surrounding text. If your input method allows you to "undo" | ||
| 636 | mistaken compositions, this will now work as well. | ||
| 637 | 660 | ||
| 638 | +++ | 661 | +++ |
| 639 | ** New Advanced Macro Counter functions. | 662 | ** New advanced macro counter commands. |
| 640 | New commands have been added to implement advanced macro counter | 663 | New commands have been added to implement advanced macro counter |
| 641 | functions. | 664 | functions. |
| 642 | 665 | ||
| 643 | The commands 'C-x C-k C-r l' and 'C-x C-k C-r s' load and save the | 666 | The commands 'C-x C-k C-r l' and 'C-x C-k C-r s' load and save the |
| 644 | macro counter from and to a number register, respectively. | 667 | macro counter from and to a number register, respectively. |
| 645 | 668 | ||
| 646 | The commands 'C-x C-k C-r a =', 'C-x C-k C-r a <', and | 669 | The commands 'C-x C-k C-r a =', 'C-x C-k C-r a <', and 'C-x C-k C-r a >' |
| 647 | 'C-x C-k C-r a >' compare the macro counter with the contents of a | 670 | compare the macro counter with the contents of a number register and |
| 648 | number register and increment the counter by an optional prefix if the | 671 | increment the counter by an optional prefix if the comparison succeeds. |
| 649 | comparison succeeds. | ||
| 650 | 672 | ||
| 651 | The commands 'C-x C-k C-q =', 'C-x C-k C-q <', and 'C-x C-k C-q >' | 673 | The commands 'C-x C-k C-q =', 'C-x C-k C-q <', and 'C-x C-k C-q >' |
| 652 | compare the macro counter with an optional prefix and terminate the | 674 | compare the macro counter with an optional prefix and terminate the |
| @@ -662,6 +684,13 @@ duplicating them, deleting them, and editing their counters, formats, | |||
| 662 | and keys. | 684 | and keys. |
| 663 | 685 | ||
| 664 | --- | 686 | --- |
| 687 | ** On X, Emacs now supports input methods which perform "string conversion". | ||
| 688 | This means an input method can now ask Emacs to delete text | ||
| 689 | surrounding point and replace it with something else, as well as query | ||
| 690 | Emacs for surrounding text. If your input method allows you to "undo" | ||
| 691 | mistaken compositions, this will now work as well. | ||
| 692 | |||
| 693 | --- | ||
| 665 | ** New user option 'duplicate-region-final-position'. | 694 | ** New user option 'duplicate-region-final-position'. |
| 666 | It controls the placement of point and the region after duplicating a | 695 | It controls the placement of point and the region after duplicating a |
| 667 | region with 'duplicate-dwim'. | 696 | region with 'duplicate-dwim'. |
| @@ -677,6 +706,37 @@ whereas if the mouse pointer is in the left half of a glyph, point | |||
| 677 | will be put in front the buffer position corresponding to that glyph. | 706 | will be put in front the buffer position corresponding to that glyph. |
| 678 | By default this is disabled. | 707 | By default this is disabled. |
| 679 | 708 | ||
| 709 | ** New pre-defined values for 'electric-quote-chars'. | ||
| 710 | The available customization options for 'electric-quote-chars' have been | ||
| 711 | updated with common pairs of quotation characters, including "‘", "’", | ||
| 712 | "“", "”", "«", "»", "‹", "›", "‚", "„", "「", "」", "『", and "』". | ||
| 713 | The default is unchanged. | ||
| 714 | |||
| 715 | +++ | ||
| 716 | ** 'M-TAB' now invokes 'completion-at-point' also in Text mode. | ||
| 717 | By default, Text mode no longer binds 'M-TAB' to 'ispell-complete-word'. | ||
| 718 | Instead, this mode arranges for 'completion-at-point', globally bound to | ||
| 719 | 'M-TAB', to perform word completion as well. You can have Text mode | ||
| 720 | bind 'M-TAB' to 'ispell-complete-word' as it did in previous Emacs | ||
| 721 | versions, or disable Ispell word completion in Text mode altogether, by | ||
| 722 | customizing the new user option 'text-mode-ispell-word-completion'. | ||
| 723 | |||
| 724 | --- | ||
| 725 | ** Mode-line mnemonics for some coding-systems have changed. | ||
| 726 | The mode-line mnemonic for 'utf-7' is now the lowercase 'u', to be | ||
| 727 | consistent with the other encodings of this family. | ||
| 728 | |||
| 729 | The mode-line mnemonic for 'koi8-u' is now 'У', U+0423 CYRILLIC | ||
| 730 | CAPITAL LETTER U, to distinguish between this encoding and the | ||
| 731 | UTF-8/UTF-16 family. | ||
| 732 | |||
| 733 | If your terminal cannot display 'У', or if you want to get the old | ||
| 734 | behavior back for any other reason, you can do that using the | ||
| 735 | 'coding-system-put' function. For example, the following restores the | ||
| 736 | previous behavior of showing 'U' in the mode line for 'koi8-u': | ||
| 737 | |||
| 738 | (coding-system-put 'koi8-u :mnemonic ?U) | ||
| 739 | |||
| 680 | ** Internationalization | 740 | ** Internationalization |
| 681 | 741 | ||
| 682 | --- | 742 | --- |
| @@ -746,16 +806,6 @@ This can now be entered using 'C-x 8 E' in addition to the existing | |||
| 746 | 806 | ||
| 747 | * Changes in Specialized Modes and Packages in Emacs 30.1 | 807 | * Changes in Specialized Modes and Packages in Emacs 30.1 |
| 748 | 808 | ||
| 749 | --- | ||
| 750 | ** Trace | ||
| 751 | In batch mode, tracing now sends the trace to stdout. | ||
| 752 | |||
| 753 | ** Xterm Mouse mode | ||
| 754 | This mode now emits 'wheel-up/down/right/left' events instead of | ||
| 755 | 'mouse-4/5/6/7' events for the mouse wheel. | ||
| 756 | It uses the new variable 'mouse-wheel-buttons' to decide which button | ||
| 757 | maps to which wheel event (if any). | ||
| 758 | |||
| 759 | ** Outline mode | 809 | ** Outline mode |
| 760 | 810 | ||
| 761 | *** New commands to show/hide outlines by regexp. | 811 | *** New commands to show/hide outlines by regexp. |
| @@ -769,7 +819,6 @@ shows the matched outlines. | |||
| 769 | It can be used in all tree-sitter major modes that set either the | 819 | It can be used in all tree-sitter major modes that set either the |
| 770 | variable 'treesit-simple-imenu-settings' or 'treesit-outline-predicate'. | 820 | variable 'treesit-simple-imenu-settings' or 'treesit-outline-predicate'. |
| 771 | 821 | ||
| 772 | |||
| 773 | ** Info | 822 | ** Info |
| 774 | 823 | ||
| 775 | --- | 824 | --- |
| @@ -823,8 +872,7 @@ default is t, to preserve previous behavior. | |||
| 823 | When non-nil, the output of Grep is split into sections, one for each | 872 | When non-nil, the output of Grep is split into sections, one for each |
| 824 | file, instead of having file names prefixed to each line. It is | 873 | file, instead of having file names prefixed to each line. It is |
| 825 | equivalent to the "--heading" option of some tools such as 'git grep' | 874 | equivalent to the "--heading" option of some tools such as 'git grep' |
| 826 | and 'rg'. The headings are displayed using the new 'grep-heading' | 875 | and 'rg'. The headings are displayed using the new 'grep-heading' face. |
| 827 | face. | ||
| 828 | 876 | ||
| 829 | ** Compilation mode | 877 | ** Compilation mode |
| 830 | 878 | ||
| @@ -1135,50 +1183,6 @@ If non-nil, each Eshell session will save history by appending new | |||
| 1135 | entries of that session to the history file rather than overwriting | 1183 | entries of that session to the history file rather than overwriting |
| 1136 | the file with the whole history of the session. The default is nil. | 1184 | the file with the whole history of the session. The default is nil. |
| 1137 | 1185 | ||
| 1138 | ** Minibuffer and Completions | ||
| 1139 | |||
| 1140 | *** New commands 'previous-line-completion' and 'next-line-completion'. | ||
| 1141 | Bound to '<up>' and '<down>' arrow keys, respectively, they navigate | ||
| 1142 | the "*Completions*" buffer vertically by lines, wrapping at the | ||
| 1143 | top/bottom when 'completion-auto-wrap' is non-nil. | ||
| 1144 | |||
| 1145 | *** New user option 'minibuffer-visible-completions'. | ||
| 1146 | When customized to non-nil, you can use arrow keys in the minibuffer | ||
| 1147 | to navigate the completions displayed in the "*Completions*" window. | ||
| 1148 | Typing 'RET' selects the highlighted candidate. 'C-g' hides the | ||
| 1149 | completions window. When the completions window is not visible, | ||
| 1150 | then all these keys have their usual meaning in the minibuffer. | ||
| 1151 | This option is supported for in-buffer completion as well. | ||
| 1152 | |||
| 1153 | *** Selected completion candidates are deselected on typing. | ||
| 1154 | When you type at the minibuffer prompt, the current completion | ||
| 1155 | candidate will be un-highlighted, and point in the "*Completions*" window | ||
| 1156 | will be moved off that candidate. 'minibuffer-choose-completion' | ||
| 1157 | ('M-RET') will still choose a previously-selected completion | ||
| 1158 | candidate, but the new command 'minibuffer-choose-completion-or-exit' | ||
| 1159 | (bound to 'RET' by 'minibuffer-visible-completions') will exit with | ||
| 1160 | the minibuffer contents instead. This deselection behavior can be | ||
| 1161 | controlled with the new user option 'completion-auto-deselect', which | ||
| 1162 | is t by default. | ||
| 1163 | |||
| 1164 | *** New value 'historical' for user option 'completions-sort'. | ||
| 1165 | When 'completions-sort' is set to 'historical', completion candidates | ||
| 1166 | will be first sorted alphabetically, and then re-sorted by their order | ||
| 1167 | in the minibuffer history, with more recent candidates appearing first. | ||
| 1168 | |||
| 1169 | +++ | ||
| 1170 | *** 'completion-category-overrides' supports more metadata. | ||
| 1171 | The new supported completion properties are 'cycle-sort-function', | ||
| 1172 | 'display-sort-function', 'annotation-function', 'affixation-function', | ||
| 1173 | and 'group-function'. You can now customize them for any category in | ||
| 1174 | 'completion-category-overrides' that will override the properties | ||
| 1175 | defined in completion metadata. | ||
| 1176 | |||
| 1177 | +++ | ||
| 1178 | *** 'completion-extra-properties' supports more metadata. | ||
| 1179 | The new supported completion properties are 'category', | ||
| 1180 | 'group-function', 'display-sort-function', and 'cycle-sort-function'. | ||
| 1181 | |||
| 1182 | ** Pcomplete | 1186 | ** Pcomplete |
| 1183 | 1187 | ||
| 1184 | --- | 1188 | --- |
| @@ -1221,9 +1225,9 @@ To restore the old behavior, set 'comint-password-prompt-max-length' to | |||
| 1221 | +++ | 1225 | +++ |
| 1222 | *** New command 'prog-fill-reindent-defun'. | 1226 | *** New command 'prog-fill-reindent-defun'. |
| 1223 | This command either fills a single paragraph in a defun, such as a | 1227 | This command either fills a single paragraph in a defun, such as a |
| 1224 | docstring, or a comment, or (re)indents the surrounding defun if | 1228 | docstring, or a comment, or (re)indents the surrounding defun if point |
| 1225 | point is not in a comment or a string. It is by default bound to | 1229 | is not in a comment or a string. By default, it is bound to 'M-q' in |
| 1226 | 'M-q' in 'prog-mode' and all its descendants. | 1230 | 'prog-mode' and all its descendants. |
| 1227 | 1231 | ||
| 1228 | ** Imenu | 1232 | ** Imenu |
| 1229 | 1233 | ||
| @@ -1775,16 +1779,6 @@ Similarly to buffer restoration by Desktop, 'recentf-mode' checking | |||
| 1775 | of the accessibility of remote files can now time out if | 1779 | of the accessibility of remote files can now time out if |
| 1776 | 'remote-file-name-access-timeout' is set to a positive number. | 1780 | 'remote-file-name-access-timeout' is set to a positive number. |
| 1777 | 1781 | ||
| 1778 | ** Notifications | ||
| 1779 | |||
| 1780 | +++ | ||
| 1781 | *** Allow using Icon Naming Specification for ':app-icon'. | ||
| 1782 | You can use a symbol as the value for ':app-icon' to provide icon name | ||
| 1783 | without specifying a file, like this: | ||
| 1784 | |||
| 1785 | (notifications-notify | ||
| 1786 | :title "I am playing music" :app-icon 'multimedia-player) | ||
| 1787 | |||
| 1788 | ** Image Dired | 1782 | ** Image Dired |
| 1789 | 1783 | ||
| 1790 | *** New user option 'image-dired-thumb-naming'. | 1784 | *** New user option 'image-dired-thumb-naming'. |
| @@ -1896,7 +1890,6 @@ will return the URL for that bug. | |||
| 1896 | 1890 | ||
| 1897 | ** Miscellaneous | 1891 | ** Miscellaneous |
| 1898 | 1892 | ||
| 1899 | --- | ||
| 1900 | +++ | 1893 | +++ |
| 1901 | *** New user option 'rcirc-log-time-format'. | 1894 | *** New user option 'rcirc-log-time-format'. |
| 1902 | This allows for rcirc logs to use a custom timestamp format, than the | 1895 | This allows for rcirc logs to use a custom timestamp format, than the |
| @@ -1953,6 +1946,7 @@ options of GNU 'ls'. | |||
| 1953 | Typing 'C-u M-x ping' prompts first for the host, and then for the flags | 1946 | Typing 'C-u M-x ping' prompts first for the host, and then for the flags |
| 1954 | to give to "ping". | 1947 | to give to "ping". |
| 1955 | 1948 | ||
| 1949 | --- | ||
| 1956 | *** Webjump now assumes URIs are HTTPS instead of HTTP. | 1950 | *** Webjump now assumes URIs are HTTPS instead of HTTP. |
| 1957 | For links in 'webjump-sites' without an explicit URI scheme, it was | 1951 | For links in 'webjump-sites' without an explicit URI scheme, it was |
| 1958 | previously assumed that they should be prefixed with "http://". Such | 1952 | previously assumed that they should be prefixed with "http://". Such |
| @@ -2094,9 +2088,12 @@ preventing the installation of Compat if unnecessary. | |||
| 2094 | 2088 | ||
| 2095 | * Incompatible Lisp Changes in Emacs 30.1 | 2089 | * Incompatible Lisp Changes in Emacs 30.1 |
| 2096 | 2090 | ||
| 2097 | --- | 2091 | ** Bytecode is now always loaded eagerly. |
| 2098 | ** 'subr-native-elisp-p' is renamed to 'native-comp-function-p'. | 2092 | Bytecode compiled with older Emacs versions for lazy loading using |
| 2099 | The previous name still exists but is marked as obsolete. | 2093 | 'byte-compile-dynamic' is now loaded all at once. |
| 2094 | As a consequence, 'fetch-bytecode' has no use, does nothing, and is | ||
| 2095 | now obsolete. The variable 'byte-compile-dynamic' has no effect any | ||
| 2096 | more; compilation will always yield bytecode for eager loading. | ||
| 2100 | 2097 | ||
| 2101 | +++ | 2098 | +++ |
| 2102 | ** Evaluating a 'lambda' returns an object of type 'interpreted-function'. | 2099 | ** Evaluating a 'lambda' returns an object of type 'interpreted-function'. |
| @@ -2116,6 +2113,219 @@ various subparts (when 'interactive-form', 'documentation', and | |||
| 2116 | 'help-function-arglist' aren't adequate). | 2113 | 'help-function-arglist' aren't adequate). |
| 2117 | 2114 | ||
| 2118 | +++ | 2115 | +++ |
| 2116 | ** Returned strings from functions and macros are never docstrings. | ||
| 2117 | Functions and macros whose bodies consist of a single string literal now | ||
| 2118 | only return that string; it is not used as a docstring. Example: | ||
| 2119 | |||
| 2120 | (defun sing-a-song () | ||
| 2121 | "Sing a song.") | ||
| 2122 | |||
| 2123 | The above function returns the string '"Sing a song."' but has no | ||
| 2124 | docstring. Previously, that string was used as both a docstring and | ||
| 2125 | return value, which was never what the programmer wanted. If you want | ||
| 2126 | the string to be a docstring, add an explicit return value. | ||
| 2127 | |||
| 2128 | This change applies to 'defun', 'defsubst', 'defmacro' and 'lambda' | ||
| 2129 | forms; other defining forms such as 'cl-defun' already worked this way. | ||
| 2130 | |||
| 2131 | ** New or changed byte-compilation warnings | ||
| 2132 | |||
| 2133 | --- | ||
| 2134 | *** Warn about missing 'lexical-binding' directive. | ||
| 2135 | The compiler now warns if an Elisp file lacks the standard | ||
| 2136 | '-*- lexical-binding: ... -*-' cookie on the first line. | ||
| 2137 | This line typically looks something like | ||
| 2138 | |||
| 2139 | ;;; My little pony mode -*- lexical-binding: t -*- | ||
| 2140 | |||
| 2141 | It is needed to inform the compiler about which dialect of ELisp | ||
| 2142 | your code is using: the modern dialect with lexical binding or | ||
| 2143 | the old dialect with only dynamic binding. | ||
| 2144 | |||
| 2145 | Lexical binding avoids some name conflicts and allows the compiler to | ||
| 2146 | detect more mistakes and generate more efficient code, so it is | ||
| 2147 | recommended. For how to adapt your code to lexical binding, see the | ||
| 2148 | manual section "(elisp) Converting to Lexical Binding". | ||
| 2149 | |||
| 2150 | If your code cannot be converted to lexical binding, you can insert | ||
| 2151 | the line | ||
| 2152 | |||
| 2153 | ;;; -*- lexical-binding: nil -*- | ||
| 2154 | |||
| 2155 | first in the file to declare that it uses the old dialect. | ||
| 2156 | |||
| 2157 | --- | ||
| 2158 | *** Warn about empty bodies for more special forms and macros. | ||
| 2159 | The compiler now warns about an empty body argument to 'when', | ||
| 2160 | 'unless', 'ignore-error' and 'with-suppressed-warnings' in addition to | ||
| 2161 | the existing warnings for 'let' and 'let*'. Example: | ||
| 2162 | |||
| 2163 | (when (> x 2)) | ||
| 2164 | |||
| 2165 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2166 | the warning name 'empty-body'. | ||
| 2167 | |||
| 2168 | --- | ||
| 2169 | *** Warn about quoted error names in 'condition-case' and 'ignore-error'. | ||
| 2170 | The compiler now warns about quoted condition (error) names | ||
| 2171 | in 'condition-case' and 'ignore-error'. Example: | ||
| 2172 | |||
| 2173 | (condition-case nil | ||
| 2174 | (/ x y) | ||
| 2175 | ('arith-error "division by zero")) | ||
| 2176 | |||
| 2177 | Quoting them adds the error name 'quote' to those handled or ignored | ||
| 2178 | respectively, which was probably not intended. | ||
| 2179 | |||
| 2180 | --- | ||
| 2181 | *** Warn about comparison with literal constants without defined identity. | ||
| 2182 | The compiler now warns about comparisons by identity with a literal | ||
| 2183 | string, cons, vector, record, function, large integer or float as this | ||
| 2184 | may not match any value at all. Example: | ||
| 2185 | |||
| 2186 | (eq x "hello") | ||
| 2187 | |||
| 2188 | Only literals for symbols and small integers (fixnums), including | ||
| 2189 | characters, are guaranteed to have a consistent (unique) identity. | ||
| 2190 | This warning applies to 'eq', 'eql', 'memq', 'memql', 'assq', 'rassq', | ||
| 2191 | 'remq' and 'delq'. | ||
| 2192 | |||
| 2193 | To compare by (structural) value, use 'equal', 'member', 'assoc', | ||
| 2194 | 'rassoc', 'remove' or 'delete' instead. Floats and bignums can also | ||
| 2195 | be compared using 'eql', '=' and 'memql'. Function literals cannot be | ||
| 2196 | compared reliably at all. | ||
| 2197 | |||
| 2198 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2199 | the warning name 'suspicious'. | ||
| 2200 | |||
| 2201 | --- | ||
| 2202 | *** Warn about 'condition-case' without handlers. | ||
| 2203 | The compiler now warns when the 'condition-case' form is used without | ||
| 2204 | any actual handlers, as in | ||
| 2205 | |||
| 2206 | (condition-case nil (read buffer)) | ||
| 2207 | |||
| 2208 | because it has no effect other than the execution of the body form. | ||
| 2209 | In particular, no errors are caught or suppressed. If the intention | ||
| 2210 | was to catch all errors, add an explicit handler for 'error', or use | ||
| 2211 | 'ignore-error' or 'ignore-errors'. | ||
| 2212 | |||
| 2213 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2214 | the warning name 'suspicious'. | ||
| 2215 | |||
| 2216 | --- | ||
| 2217 | *** Warn about 'unwind-protect' without unwind forms. | ||
| 2218 | The compiler now warns when the 'unwind-protect' form is used without | ||
| 2219 | any unwind forms, as in | ||
| 2220 | |||
| 2221 | (unwind-protect (read buffer)) | ||
| 2222 | |||
| 2223 | because the behavior is identical to that of the argument; there is | ||
| 2224 | no protection of any kind. Perhaps the intended unwind forms have | ||
| 2225 | been misplaced or forgotten, or the use of 'unwind-protect' could be | ||
| 2226 | simplified away. | ||
| 2227 | |||
| 2228 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2229 | the warning name 'suspicious'. | ||
| 2230 | |||
| 2231 | --- | ||
| 2232 | *** Warn about useless trailing 'cond' clauses. | ||
| 2233 | The compiler now warns when a 'cond' form contains clauses following a | ||
| 2234 | default (unconditional) clause. Example: | ||
| 2235 | |||
| 2236 | (cond ((= x 0) (say "none")) | ||
| 2237 | (t (say "some")) | ||
| 2238 | (say "goodbye")) | ||
| 2239 | |||
| 2240 | Such a clause will never be executed but is likely to be a mistake, | ||
| 2241 | perhaps due to misplaced brackets. | ||
| 2242 | |||
| 2243 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2244 | the warning name 'suspicious'. | ||
| 2245 | |||
| 2246 | --- | ||
| 2247 | *** Warn about mutation of constant values. | ||
| 2248 | The compiler now warns about code that modifies program constants in | ||
| 2249 | some obvious cases. Examples: | ||
| 2250 | |||
| 2251 | (setcar '(1 2) 7) | ||
| 2252 | (aset [3 4] 0 8) | ||
| 2253 | (aset "abc" 1 ?d) | ||
| 2254 | |||
| 2255 | Such code may have unpredictable behavior because the constants are | ||
| 2256 | part of the program, not data structures generated afresh during | ||
| 2257 | execution, and the compiler does not expect them to change. | ||
| 2258 | |||
| 2259 | To avoid the warning, operate on an object created by the program | ||
| 2260 | (maybe a copy of the constant), or use a non-destructive operation | ||
| 2261 | instead. | ||
| 2262 | |||
| 2263 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2264 | the warning name 'mutate-constant'. | ||
| 2265 | |||
| 2266 | --- | ||
| 2267 | *** Warn about more ignored function return values. | ||
| 2268 | The compiler now warns when the return value from certain functions is | ||
| 2269 | implicitly ignored. Example: | ||
| 2270 | |||
| 2271 | (progn (nreverse my-list) my-list) | ||
| 2272 | |||
| 2273 | will elicit a warning because it is usually pointless to call | ||
| 2274 | 'nreverse' on a list without using the returned value. | ||
| 2275 | |||
| 2276 | To silence the warning, make use of the value in some way, such as | ||
| 2277 | assigning it to a variable. You can also wrap the function call in | ||
| 2278 | '(ignore ...)', or use 'with-suppressed-warnings' with the warning | ||
| 2279 | name 'ignored-return-value'. | ||
| 2280 | |||
| 2281 | The warning will only be issued for calls to functions declared | ||
| 2282 | 'important-return-value' or 'side-effect-free' (but not 'error-free'). | ||
| 2283 | |||
| 2284 | --- | ||
| 2285 | *** Warn about docstrings that contain control characters. | ||
| 2286 | The compiler now warns about docstrings with control characters other | ||
| 2287 | than newline and tab. This is often a result of improper escaping. | ||
| 2288 | Example: | ||
| 2289 | |||
| 2290 | (defun my-fun () | ||
| 2291 | "Uses c:\remote\dir\files and the key \C-x." | ||
| 2292 | ...) | ||
| 2293 | |||
| 2294 | where the docstring contains the four control characters 'CR', 'DEL', | ||
| 2295 | 'FF' and 'C-x'. | ||
| 2296 | |||
| 2297 | The warning name is 'docstrings-control-chars'. | ||
| 2298 | |||
| 2299 | --- | ||
| 2300 | *** The warning about wide docstrings can now be disabled separately. | ||
| 2301 | Its warning name is 'docstrings-wide'. | ||
| 2302 | |||
| 2303 | +++ | ||
| 2304 | ** 'fset', 'defalias' and 'defvaralias' now signal an error for cyclic aliases. | ||
| 2305 | Previously, 'fset', 'defalias' and 'defvaralias' could be made to | ||
| 2306 | build circular function and variable indirection chains as in | ||
| 2307 | |||
| 2308 | (defalias 'able 'baker) | ||
| 2309 | (defalias 'baker 'able) | ||
| 2310 | |||
| 2311 | but trying to use them would sometimes make Emacs hang. Now, an attempt | ||
| 2312 | to create such a loop results in an error. | ||
| 2313 | |||
| 2314 | Since circular alias chains now cannot occur, 'function-alias-p', | ||
| 2315 | 'indirect-function' and 'indirect-variable' will never signal an error. | ||
| 2316 | Their 'noerror' arguments have no effect and are therefore obsolete. | ||
| 2317 | |||
| 2318 | --- | ||
| 2319 | ** The escape sequence '\x' not followed by hex digits is now an error. | ||
| 2320 | Previously, '\x' without at least one hex digit denoted character code | ||
| 2321 | zero (NUL) but as this was neither intended nor documented or even | ||
| 2322 | known by anyone, it is now treated as an error by the Lisp reader. | ||
| 2323 | |||
| 2324 | --- | ||
| 2325 | ** 'subr-native-elisp-p' is renamed to 'native-comp-function-p'. | ||
| 2326 | The previous name still exists but is marked as obsolete. | ||
| 2327 | |||
| 2328 | +++ | ||
| 2119 | ** 'define-globalized-minor-mode' requires that modes use 'run-mode-hooks'. | 2329 | ** 'define-globalized-minor-mode' requires that modes use 'run-mode-hooks'. |
| 2120 | Minor modes defined with 'define-globalized-minor-mode', such as | 2330 | Minor modes defined with 'define-globalized-minor-mode', such as |
| 2121 | 'global-font-lock-mode', will not be enabled any more in those buffers | 2331 | 'global-font-lock-mode', will not be enabled any more in those buffers |
| @@ -2123,26 +2333,6 @@ whose major modes fail to use 'run-mode-hooks'. Major modes defined | |||
| 2123 | with 'define-derived-mode' are not affected. 'run-mode-hooks' has been the | 2333 | with 'define-derived-mode' are not affected. 'run-mode-hooks' has been the |
| 2124 | recommended way to run major mode hooks since Emacs 22. | 2334 | recommended way to run major mode hooks since Emacs 22. |
| 2125 | 2335 | ||
| 2126 | --- | ||
| 2127 | ** Old derived.el functions removed. | ||
| 2128 | The following functions have been deleted because they were only used | ||
| 2129 | by code compiled with Emacs<21: | ||
| 2130 | 'derived-mode-init-mode-variables', 'derived-mode-merge-abbrev-tables', | ||
| 2131 | 'derived-mode-merge-keymaps', 'derived-mode-merge-syntax-tables', | ||
| 2132 | 'derived-mode-run-hooks', 'derived-mode-set-abbrev-table', | ||
| 2133 | 'derived-mode-set-keymap', 'derived-mode-set-syntax-table', | ||
| 2134 | 'derived-mode-setup-function-name'. | ||
| 2135 | |||
| 2136 | +++ | ||
| 2137 | ** 'M-TAB' now invokes 'completion-at-point' also in Text mode. | ||
| 2138 | By default, Text mode no longer binds 'M-TAB' to | ||
| 2139 | 'ispell-complete-word'. Instead, this mode arranges for | ||
| 2140 | 'completion-at-point', globally bound to 'M-TAB', to perform word | ||
| 2141 | completion as well. You can have Text mode bind 'M-TAB' to | ||
| 2142 | 'ispell-complete-word' as it did in previous Emacs versions, or | ||
| 2143 | disable Ispell word completion in Text mode altogether, by customizing | ||
| 2144 | the new user option 'text-mode-ispell-word-completion'. | ||
| 2145 | |||
| 2146 | ** 'pp' and 'pp-to-string' now always include a terminating newline. | 2336 | ** 'pp' and 'pp-to-string' now always include a terminating newline. |
| 2147 | In the past they included a terminating newline in most cases but not all. | 2337 | In the past they included a terminating newline in most cases but not all. |
| 2148 | 2338 | ||
| @@ -2156,27 +2346,10 @@ supports it (with a warning) for backward compatibility. | |||
| 2156 | ** 'post-gc-hook' runs after updating 'gcs-done' and 'gcs-elapsed'. | 2346 | ** 'post-gc-hook' runs after updating 'gcs-done' and 'gcs-elapsed'. |
| 2157 | 2347 | ||
| 2158 | --- | 2348 | --- |
| 2159 | ** The escape sequence '\x' not followed by hex digits is now an error. | ||
| 2160 | Previously, '\x' without at least one hex digit denoted character code | ||
| 2161 | zero (NUL) but as this was neither intended nor documented or even | ||
| 2162 | known by anyone, it is now treated as an error by the Lisp reader. | ||
| 2163 | |||
| 2164 | --- | ||
| 2165 | ** Connection-local variables are applied in buffers visiting a remote file. | 2349 | ** Connection-local variables are applied in buffers visiting a remote file. |
| 2166 | This overrides possible directory-local or file-local variables with | 2350 | This overrides possible directory-local or file-local variables with |
| 2167 | the same name. | 2351 | the same name. |
| 2168 | 2352 | ||
| 2169 | --- | ||
| 2170 | ** User option 'tramp-completion-reread-directory-timeout' has been removed. | ||
| 2171 | This user option has been obsoleted in Emacs 27, use | ||
| 2172 | 'remote-file-name-inhibit-cache' instead. | ||
| 2173 | |||
| 2174 | --- | ||
| 2175 | ** User options 'eshell-NAME-unload-hook' are now obsolete. | ||
| 2176 | These hooks were named incorrectly, and so they never actually ran | ||
| 2177 | when unloading the corresponding feature. Instead, you should use | ||
| 2178 | hooks named after the feature name, like 'esh-mode-unload-hook'. | ||
| 2179 | |||
| 2180 | +++ | 2353 | +++ |
| 2181 | ** 'copy-tree' now copies records when its optional 2nd argument is non-nil. | 2354 | ** 'copy-tree' now copies records when its optional 2nd argument is non-nil. |
| 2182 | 2355 | ||
| @@ -2189,22 +2362,6 @@ operator character following '^' or '\`' becomes literal, but we | |||
| 2189 | advise against relying on this. | 2362 | advise against relying on this. |
| 2190 | 2363 | ||
| 2191 | --- | 2364 | --- |
| 2192 | ** Mode-line mnemonics for some coding-systems have changed. | ||
| 2193 | The mode-line mnemonic for 'utf-7' is now the lowercase 'u', to be | ||
| 2194 | consistent with the other encodings of this family. | ||
| 2195 | |||
| 2196 | The mode-line mnemonic for 'koi8-u' is now 'У', U+0423 CYRILLIC | ||
| 2197 | CAPITAL LETTER U, to distinguish between this encoding and the | ||
| 2198 | UTF-8/UTF-16 family. | ||
| 2199 | |||
| 2200 | If your terminal cannot display 'У', or if you want to get the old | ||
| 2201 | behavior back for any other reason, you can do that using the | ||
| 2202 | 'coding-system-put' function. For example, the following restores the | ||
| 2203 | previous behavior of showing 'U' in the mode line for 'koi8-u': | ||
| 2204 | |||
| 2205 | (coding-system-put 'koi8-u :mnemonic ?U) | ||
| 2206 | |||
| 2207 | --- | ||
| 2208 | ** 'vietnamese-tcvn' is now a coding system alias for 'vietnamese-vscii'. | 2365 | ** 'vietnamese-tcvn' is now a coding system alias for 'vietnamese-vscii'. |
| 2209 | VSCII-1 and TCVN-5712 are different names for the same character | 2366 | VSCII-1 and TCVN-5712 are different names for the same character |
| 2210 | encoding. Therefore, the duplicate coding system definition has been | 2367 | encoding. Therefore, the duplicate coding system definition has been |
| @@ -2222,25 +2379,6 @@ finite value, and a NaN with some other non-numeric object that | |||
| 2222 | provokes an error if used numerically. | 2379 | provokes an error if used numerically. |
| 2223 | 2380 | ||
| 2224 | +++ | 2381 | +++ |
| 2225 | ** X color support compatibility aliases are now marked obsolete. | ||
| 2226 | The compatibility aliases 'x-defined-colors', 'x-color-defined-p', | ||
| 2227 | 'x-color-values', and 'x-display-color-p' are now obsolete. | ||
| 2228 | |||
| 2229 | +++ | ||
| 2230 | ** 'easy-mmode-define-{minor,global}-mode' aliases are now obsolete. | ||
| 2231 | Use 'define-minor-mode' and 'define-globalized-minor-mode' instead. | ||
| 2232 | |||
| 2233 | ** The obsolete calling convention of 'sit-for' has been removed. | ||
| 2234 | That convention was: '(sit-for SECONDS MILLISEC &optional NODISP)'. | ||
| 2235 | |||
| 2236 | ** The 'millisec' argument of 'sleep-for' has been declared obsolete. | ||
| 2237 | Use a float value for the first argument instead. | ||
| 2238 | |||
| 2239 | ** 'eshell-process-wait-{seconds,milliseconds}' options are now obsolete. | ||
| 2240 | Instead, use 'eshell-process-wait-time', which supports floating-point | ||
| 2241 | values. | ||
| 2242 | |||
| 2243 | +++ | ||
| 2244 | ** Conversion of strings to and from byte-arrays works with multibyte strings. | 2382 | ** Conversion of strings to and from byte-arrays works with multibyte strings. |
| 2245 | The functions 'dbus-string-to-byte-array' and | 2383 | The functions 'dbus-string-to-byte-array' and |
| 2246 | 'dbus-byte-array-to-string' now accept and return multibyte Lisp | 2384 | 'dbus-byte-array-to-string' now accept and return multibyte Lisp |
| @@ -2262,6 +2400,53 @@ When it has a non-nil value, then completion functions like | |||
| 2262 | 'completing-read' don't discard text properties from the returned | 2400 | 'completing-read' don't discard text properties from the returned |
| 2263 | completion candidate. | 2401 | completion candidate. |
| 2264 | 2402 | ||
| 2403 | ** 'defadvice' is marked as obsolete. | ||
| 2404 | See the "(elisp) Porting Old Advice" Info node for help converting | ||
| 2405 | them to use 'advice-add' or 'define-advice' instead. | ||
| 2406 | |||
| 2407 | ** 'cl-old-struct-compat-mode' is marked as obsolete. | ||
| 2408 | You may need to recompile our code if it was compiled with Emacs < 24.3. | ||
| 2409 | |||
| 2410 | +++ | ||
| 2411 | ** X color support compatibility aliases are now obsolete. | ||
| 2412 | The compatibility aliases 'x-defined-colors', 'x-color-defined-p', | ||
| 2413 | 'x-color-values', and 'x-display-color-p' are now obsolete. | ||
| 2414 | |||
| 2415 | +++ | ||
| 2416 | ** 'easy-mmode-define-{minor,global}-mode' aliases are now obsolete. | ||
| 2417 | Use 'define-minor-mode' and 'define-globalized-minor-mode' instead. | ||
| 2418 | |||
| 2419 | ** The 'millisec' argument of 'sleep-for' is now obsolete. | ||
| 2420 | Use a float value for the first argument instead. | ||
| 2421 | |||
| 2422 | --- | ||
| 2423 | ** User options 'eshell-NAME-unload-hook' are now obsolete. | ||
| 2424 | These hooks were named incorrectly, and so they never actually ran | ||
| 2425 | when unloading the corresponding feature. Instead, you should use | ||
| 2426 | hooks named after the feature name, like 'esh-mode-unload-hook'. | ||
| 2427 | |||
| 2428 | ** User options 'eshell-process-wait-{seconds,milliseconds}' are now obsolete. | ||
| 2429 | Instead, use 'eshell-process-wait-time', which supports floating-point | ||
| 2430 | values. | ||
| 2431 | |||
| 2432 | --- | ||
| 2433 | ** User option 'tramp-completion-reread-directory-timeout' has been removed. | ||
| 2434 | This user option has been obsoleted in Emacs 27, use | ||
| 2435 | 'remote-file-name-inhibit-cache' instead. | ||
| 2436 | |||
| 2437 | ** The obsolete calling convention of 'sit-for' has been removed. | ||
| 2438 | That convention was: '(sit-for SECONDS MILLISEC &optional NODISP)'. | ||
| 2439 | |||
| 2440 | --- | ||
| 2441 | ** Old derived.el functions removed. | ||
| 2442 | The following functions have been deleted because they were only used | ||
| 2443 | by code compiled with Emacs<21: | ||
| 2444 | 'derived-mode-init-mode-variables', 'derived-mode-merge-abbrev-tables', | ||
| 2445 | 'derived-mode-merge-keymaps', 'derived-mode-merge-syntax-tables', | ||
| 2446 | 'derived-mode-run-hooks', 'derived-mode-set-abbrev-table', | ||
| 2447 | 'derived-mode-set-keymap', 'derived-mode-set-syntax-table', | ||
| 2448 | 'derived-mode-setup-function-name'. | ||
| 2449 | |||
| 2265 | 2450 | ||
| 2266 | * Lisp Changes in Emacs 30.1 | 2451 | * Lisp Changes in Emacs 30.1 |
| 2267 | 2452 | ||
| @@ -2272,6 +2457,14 @@ to specify the 'mouse-4/5/6/7' events that might still happen to be | |||
| 2272 | generated by some old packages (or if 'mouse-wheel-buttons' has been set | 2457 | generated by some old packages (or if 'mouse-wheel-buttons' has been set |
| 2273 | to nil). | 2458 | to nil). |
| 2274 | 2459 | ||
| 2460 | ** Xterm Mouse mode now emits 'wheel-up/down/right/left' events. | ||
| 2461 | This is instead of 'mouse-4/5/6/7' events for the mouse wheel. It uses | ||
| 2462 | the new variable 'mouse-wheel-buttons' to decide which button maps to | ||
| 2463 | which wheel event (if any). | ||
| 2464 | |||
| 2465 | --- | ||
| 2466 | ** In batch mode, tracing now sends the trace to stdout. | ||
| 2467 | |||
| 2275 | +++ | 2468 | +++ |
| 2276 | ** New hook 'hack-dir-local-get-variables-functions'. | 2469 | ** New hook 'hack-dir-local-get-variables-functions'. |
| 2277 | This can be used to provide support for other directory-local settings | 2470 | This can be used to provide support for other directory-local settings |
| @@ -2320,7 +2513,7 @@ t only if the argument is a function rather than a special-form, | |||
| 2320 | and 'cl-functionp' is like 'functionp' except it returns nil | 2513 | and 'cl-functionp' is like 'functionp' except it returns nil |
| 2321 | for lists and symbols. | 2514 | for lists and symbols. |
| 2322 | 2515 | ||
| 2323 | ** Built-in types have now corresponding classes. | 2516 | ** Built-in types now have corresponding classes. |
| 2324 | At the Lisp level, this means that things like '(cl-find-class 'integer)' | 2517 | At the Lisp level, this means that things like '(cl-find-class 'integer)' |
| 2325 | will now return a class object, and at the UI level it means that | 2518 | will now return a class object, and at the UI level it means that |
| 2326 | things like 'C-h o integer RET' will show some information about that type. | 2519 | things like 'C-h o integer RET' will show some information about that type. |
| @@ -2438,6 +2631,14 @@ See the Info node "(elisp) Drag and Drop". | |||
| 2438 | The function 'dnd-handle-one-url' has been made obsolete, since it | 2631 | The function 'dnd-handle-one-url' has been made obsolete, since it |
| 2439 | cannot take these new handlers into account. | 2632 | cannot take these new handlers into account. |
| 2440 | 2633 | ||
| 2634 | +++ | ||
| 2635 | ** 'notifications-notify' can use Icon Naming Specification for ':app-icon'. | ||
| 2636 | You can use a symbol as the value for ':app-icon' to provide icon name | ||
| 2637 | without specifying a file, like this: | ||
| 2638 | |||
| 2639 | (notifications-notify | ||
| 2640 | :title "I am playing music" :app-icon 'multimedia-player) | ||
| 2641 | |||
| 2441 | ** New function 're-disassemble' to see the innards of a regexp. | 2642 | ** New function 're-disassemble' to see the innards of a regexp. |
| 2442 | If you built Emacs with '--enable-checking', you can use this to help | 2643 | If you built Emacs with '--enable-checking', you can use this to help |
| 2443 | debug either your regexp performance problems or the regexp engine. | 2644 | debug either your regexp performance problems or the regexp engine. |
| @@ -2449,13 +2650,6 @@ characters in length, provided that the LONG_XLFDs argument is true. | |||
| 2449 | Other features in Emacs which employ XLFDs have been modified to | 2650 | Other features in Emacs which employ XLFDs have been modified to |
| 2450 | produce and understand XLFDs larger than 255 characters. | 2651 | produce and understand XLFDs larger than 255 characters. |
| 2451 | 2652 | ||
| 2452 | ** 'defadvice' is marked as obsolete. | ||
| 2453 | See the "(elisp) Porting Old Advice" Info node for help converting | ||
| 2454 | them to use 'advice-add' or 'define-advice' instead. | ||
| 2455 | |||
| 2456 | ** 'cl-old-struct-compat-mode' is marked as obsolete. | ||
| 2457 | You may need to recompile our code if it was compiled with Emacs < 24.3. | ||
| 2458 | |||
| 2459 | +++ | 2653 | +++ |
| 2460 | ** New macro 'static-if' for conditional evaluation of code. | 2654 | ** New macro 'static-if' for conditional evaluation of code. |
| 2461 | This macro hides a form from the evaluator or byte-compiler based on a | 2655 | This macro hides a form from the evaluator or byte-compiler based on a |
| @@ -2587,194 +2781,6 @@ Tree-sitter conditionally sets 'forward-sexp-function' for major modes | |||
| 2587 | that have defined 'sexp' in 'treesit-thing-settings' to enable | 2781 | that have defined 'sexp' in 'treesit-thing-settings' to enable |
| 2588 | sexp-related motion commands. | 2782 | sexp-related motion commands. |
| 2589 | 2783 | ||
| 2590 | +++ | ||
| 2591 | ** Returned strings are never docstrings. | ||
| 2592 | Functions and macros whose bodies consist of a single string literal now | ||
| 2593 | only return that string; it is not used as a docstring. Example: | ||
| 2594 | |||
| 2595 | (defun sing-a-song () | ||
| 2596 | "Sing a song.") | ||
| 2597 | |||
| 2598 | The above function returns the string '"Sing a song."' but has no | ||
| 2599 | docstring. Previously, that string was used as both a docstring and | ||
| 2600 | return value, which was never what the programmer wanted. If you want | ||
| 2601 | the string to be a docstring, add an explicit return value. | ||
| 2602 | |||
| 2603 | This change applies to 'defun', 'defsubst', 'defmacro' and 'lambda' | ||
| 2604 | forms; other defining forms such as 'cl-defun' already worked this way. | ||
| 2605 | |||
| 2606 | ** New or changed byte-compilation warnings | ||
| 2607 | |||
| 2608 | --- | ||
| 2609 | *** Warn about missing 'lexical-binding' directive. | ||
| 2610 | The compiler now warns if an Elisp file lacks the standard | ||
| 2611 | '-*- lexical-binding: ... -*-' cookie on the first line. | ||
| 2612 | This line typically looks something like | ||
| 2613 | |||
| 2614 | ;;; My little pony mode -*- lexical-binding: t -*- | ||
| 2615 | |||
| 2616 | It is needed to inform the compiler about which dialect of ELisp | ||
| 2617 | your code is using: the modern dialect with lexical binding or | ||
| 2618 | the old dialect with only dynamic binding. | ||
| 2619 | |||
| 2620 | Lexical binding avoids some name conflicts and allows the compiler to | ||
| 2621 | detect more mistakes and generate more efficient code, so it is | ||
| 2622 | recommended. For how to adapt your code to lexical binding, see the | ||
| 2623 | manual section "(elisp) Converting to Lexical Binding". | ||
| 2624 | |||
| 2625 | If your code cannot be converted to lexical binding, you can insert | ||
| 2626 | the line | ||
| 2627 | |||
| 2628 | ;;; -*- lexical-binding: nil -*- | ||
| 2629 | |||
| 2630 | first in the file to declare that it uses the old dialect. | ||
| 2631 | |||
| 2632 | --- | ||
| 2633 | *** Warn about empty bodies for more special forms and macros. | ||
| 2634 | The compiler now warns about an empty body argument to 'when', | ||
| 2635 | 'unless', 'ignore-error' and 'with-suppressed-warnings' in addition to | ||
| 2636 | the existing warnings for 'let' and 'let*'. Example: | ||
| 2637 | |||
| 2638 | (when (> x 2)) | ||
| 2639 | |||
| 2640 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2641 | the warning name 'empty-body'. | ||
| 2642 | |||
| 2643 | --- | ||
| 2644 | *** Warn about quoted error names in 'condition-case' and 'ignore-error'. | ||
| 2645 | The compiler now warns about quoted condition (error) names | ||
| 2646 | in 'condition-case' and 'ignore-error'. Example: | ||
| 2647 | |||
| 2648 | (condition-case nil | ||
| 2649 | (/ x y) | ||
| 2650 | ('arith-error "division by zero")) | ||
| 2651 | |||
| 2652 | Quoting them adds the error name 'quote' to those handled or ignored | ||
| 2653 | respectively, which was probably not intended. | ||
| 2654 | |||
| 2655 | --- | ||
| 2656 | *** Warn about comparison with literal constants without defined identity. | ||
| 2657 | The compiler now warns about comparisons by identity with a literal | ||
| 2658 | string, cons, vector, record, function, large integer or float as this | ||
| 2659 | may not match any value at all. Example: | ||
| 2660 | |||
| 2661 | (eq x "hello") | ||
| 2662 | |||
| 2663 | Only literals for symbols and small integers (fixnums), including | ||
| 2664 | characters, are guaranteed to have a consistent (unique) identity. | ||
| 2665 | This warning applies to 'eq', 'eql', 'memq', 'memql', 'assq', 'rassq', | ||
| 2666 | 'remq' and 'delq'. | ||
| 2667 | |||
| 2668 | To compare by (structural) value, use 'equal', 'member', 'assoc', | ||
| 2669 | 'rassoc', 'remove' or 'delete' instead. Floats and bignums can also | ||
| 2670 | be compared using 'eql', '=' and 'memql'. Function literals cannot be | ||
| 2671 | compared reliably at all. | ||
| 2672 | |||
| 2673 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2674 | the warning name 'suspicious'. | ||
| 2675 | |||
| 2676 | --- | ||
| 2677 | *** Warn about 'condition-case' without handlers. | ||
| 2678 | The compiler now warns when the 'condition-case' form is used without | ||
| 2679 | any actual handlers, as in | ||
| 2680 | |||
| 2681 | (condition-case nil (read buffer)) | ||
| 2682 | |||
| 2683 | because it has no effect other than the execution of the body form. | ||
| 2684 | In particular, no errors are caught or suppressed. If the intention | ||
| 2685 | was to catch all errors, add an explicit handler for 'error', or use | ||
| 2686 | 'ignore-error' or 'ignore-errors'. | ||
| 2687 | |||
| 2688 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2689 | the warning name 'suspicious'. | ||
| 2690 | |||
| 2691 | --- | ||
| 2692 | *** Warn about 'unwind-protect' without unwind forms. | ||
| 2693 | The compiler now warns when the 'unwind-protect' form is used without | ||
| 2694 | any unwind forms, as in | ||
| 2695 | |||
| 2696 | (unwind-protect (read buffer)) | ||
| 2697 | |||
| 2698 | because the behavior is identical to that of the argument; there is | ||
| 2699 | no protection of any kind. Perhaps the intended unwind forms have | ||
| 2700 | been misplaced or forgotten, or the use of 'unwind-protect' could be | ||
| 2701 | simplified away. | ||
| 2702 | |||
| 2703 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2704 | the warning name 'suspicious'. | ||
| 2705 | |||
| 2706 | --- | ||
| 2707 | *** Warn about useless trailing 'cond' clauses. | ||
| 2708 | The compiler now warns when a 'cond' form contains clauses following a | ||
| 2709 | default (unconditional) clause. Example: | ||
| 2710 | |||
| 2711 | (cond ((= x 0) (say "none")) | ||
| 2712 | (t (say "some")) | ||
| 2713 | (say "goodbye")) | ||
| 2714 | |||
| 2715 | Such a clause will never be executed but is likely to be a mistake, | ||
| 2716 | perhaps due to misplaced brackets. | ||
| 2717 | |||
| 2718 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2719 | the warning name 'suspicious'. | ||
| 2720 | |||
| 2721 | --- | ||
| 2722 | *** Warn about mutation of constant values. | ||
| 2723 | The compiler now warns about code that modifies program constants in | ||
| 2724 | some obvious cases. Examples: | ||
| 2725 | |||
| 2726 | (setcar '(1 2) 7) | ||
| 2727 | (aset [3 4] 0 8) | ||
| 2728 | (aset "abc" 1 ?d) | ||
| 2729 | |||
| 2730 | Such code may have unpredictable behavior because the constants are | ||
| 2731 | part of the program, not data structures generated afresh during | ||
| 2732 | execution, and the compiler does not expect them to change. | ||
| 2733 | |||
| 2734 | To avoid the warning, operate on an object created by the program | ||
| 2735 | (maybe a copy of the constant), or use a non-destructive operation | ||
| 2736 | instead. | ||
| 2737 | |||
| 2738 | This warning can be suppressed using 'with-suppressed-warnings' with | ||
| 2739 | the warning name 'mutate-constant'. | ||
| 2740 | |||
| 2741 | --- | ||
| 2742 | *** Warn about more ignored function return values. | ||
| 2743 | The compiler now warns when the return value from certain functions is | ||
| 2744 | implicitly ignored. Example: | ||
| 2745 | |||
| 2746 | (progn (nreverse my-list) my-list) | ||
| 2747 | |||
| 2748 | will elicit a warning because it is usually pointless to call | ||
| 2749 | 'nreverse' on a list without using the returned value. | ||
| 2750 | |||
| 2751 | To silence the warning, make use of the value in some way, such as | ||
| 2752 | assigning it to a variable. You can also wrap the function call in | ||
| 2753 | '(ignore ...)', or use 'with-suppressed-warnings' with the warning | ||
| 2754 | name 'ignored-return-value'. | ||
| 2755 | |||
| 2756 | The warning will only be issued for calls to functions declared | ||
| 2757 | 'important-return-value' or 'side-effect-free' (but not 'error-free'). | ||
| 2758 | |||
| 2759 | --- | ||
| 2760 | *** Warn about docstrings that contain control characters. | ||
| 2761 | The compiler now warns about docstrings with control characters other | ||
| 2762 | than newline and tab. This is often a result of improper escaping. | ||
| 2763 | Example: | ||
| 2764 | |||
| 2765 | (defun my-fun () | ||
| 2766 | "Uses c:\remote\dir\files and the key \C-x." | ||
| 2767 | ...) | ||
| 2768 | |||
| 2769 | where the docstring contains the four control characters 'CR', 'DEL', | ||
| 2770 | 'FF' and 'C-x'. | ||
| 2771 | |||
| 2772 | The warning name is 'docstrings-control-chars'. | ||
| 2773 | |||
| 2774 | --- | ||
| 2775 | *** The warning about wide docstrings can now be disabled separately. | ||
| 2776 | Its warning name is 'docstrings-wide'. | ||
| 2777 | |||
| 2778 | --- | 2784 | --- |
| 2779 | ** New user option 'native-comp-async-warnings-errors-kind'. | 2785 | ** New user option 'native-comp-async-warnings-errors-kind'. |
| 2780 | It allows control of what kinds of warnings and errors from asynchronous | 2786 | It allows control of what kinds of warnings and errors from asynchronous |
| @@ -2808,13 +2814,6 @@ The declaration '(important-return-value t)' sets the | |||
| 2808 | 'important-return-value' property which indicates that the function | 2814 | 'important-return-value' property which indicates that the function |
| 2809 | return value should probably not be thrown away implicitly. | 2815 | return value should probably not be thrown away implicitly. |
| 2810 | 2816 | ||
| 2811 | ** Bytecode is now always loaded eagerly. | ||
| 2812 | Bytecode compiled with older Emacs versions for lazy loading using | ||
| 2813 | 'byte-compile-dynamic' is now loaded all at once. | ||
| 2814 | As a consequence, 'fetch-bytecode' has no use, does nothing, and is | ||
| 2815 | now obsolete. The variable 'byte-compile-dynamic' has no effect any | ||
| 2816 | more; compilation will always yield bytecode for eager loading. | ||
| 2817 | |||
| 2818 | +++ | 2817 | +++ |
| 2819 | ** New functions 'file-user-uid' and 'file-group-gid'. | 2818 | ** New functions 'file-user-uid' and 'file-group-gid'. |
| 2820 | These functions are like 'user-uid' and 'group-gid', respectively, but | 2819 | These functions are like 'user-uid' and 'group-gid', respectively, but |
| @@ -2822,21 +2821,6 @@ are aware of file name handlers, so they will return the remote UID or | |||
| 2822 | GID for remote files (or -1 if the connection has no associated user). | 2821 | GID for remote files (or -1 if the connection has no associated user). |
| 2823 | 2822 | ||
| 2824 | +++ | 2823 | +++ |
| 2825 | ** 'fset', 'defalias' and 'defvaralias' now signal an error for cyclic aliases. | ||
| 2826 | Previously, 'fset', 'defalias' and 'defvaralias' could be made to | ||
| 2827 | build circular function and variable indirection chains as in | ||
| 2828 | |||
| 2829 | (defalias 'able 'baker) | ||
| 2830 | (defalias 'baker 'able) | ||
| 2831 | |||
| 2832 | but trying to use them would sometimes make Emacs hang. Now, an attempt | ||
| 2833 | to create such a loop results in an error. | ||
| 2834 | |||
| 2835 | Since circular alias chains now cannot occur, 'function-alias-p', | ||
| 2836 | 'indirect-function' and 'indirect-variable' will never signal an error. | ||
| 2837 | Their 'noerror' arguments have no effect and are therefore obsolete. | ||
| 2838 | |||
| 2839 | +++ | ||
| 2840 | ** 'treesit-font-lock-rules' now accepts additional global keywords. | 2824 | ** 'treesit-font-lock-rules' now accepts additional global keywords. |
| 2841 | When supplied with ':default-language LANGUAGE', rules after it will | 2825 | When supplied with ':default-language LANGUAGE', rules after it will |
| 2842 | default to use 'LANGUAGE'. | 2826 | default to use 'LANGUAGE'. |
| @@ -2950,6 +2934,12 @@ this was not possible.) In addition, LOCATION can be an integer, a | |||
| 2950 | (zero-based) index into the table at which the new object is inserted | 2934 | (zero-based) index into the table at which the new object is inserted |
| 2951 | (BEFORE is ignored in this case). | 2935 | (BEFORE is ignored in this case). |
| 2952 | 2936 | ||
| 2937 | +++ | ||
| 2938 | ** New function 'sqlite-execute-batch'. | ||
| 2939 | This function lets the user execute multiple SQL statements in one go. | ||
| 2940 | It is useful, for example, when a Lisp program needs to evaluate an | ||
| 2941 | entire SQL file. | ||
| 2942 | |||
| 2953 | ** JSON | 2943 | ** JSON |
| 2954 | 2944 | ||
| 2955 | --- | 2945 | --- |
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 032e49840a8..6c56fd78859 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el | |||
| @@ -1055,7 +1055,7 @@ If DST-N is specified, use it; otherwise assume it to be the current slot." | |||
| 1055 | "Set constant VAL to current slot." | 1055 | "Set constant VAL to current slot." |
| 1056 | (comp--add-const-to-relocs val) | 1056 | (comp--add-const-to-relocs val) |
| 1057 | ;; Leave relocation index nil on purpose, will be fixed-up in final | 1057 | ;; Leave relocation index nil on purpose, will be fixed-up in final |
| 1058 | ;; by `comp-finalize-relocs'. | 1058 | ;; by `comp--finalize-relocs'. |
| 1059 | (comp--emit `(setimm ,(comp--slot) ,val))) | 1059 | (comp--emit `(setimm ,(comp--slot) ,val))) |
| 1060 | 1060 | ||
| 1061 | (defun comp--make-curr-block (block-name entry-sp &optional addr) | 1061 | (defun comp--make-curr-block (block-name entry-sp &optional addr) |
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 12712cb2bc3..7006ae6c785 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el | |||
| @@ -524,7 +524,8 @@ on if the hook has explicitly disabled it. | |||
| 524 | (progn | 524 | (progn |
| 525 | (put ',global-mode 'globalized-minor-mode t) | 525 | (put ',global-mode 'globalized-minor-mode t) |
| 526 | :autoload-end | 526 | :autoload-end |
| 527 | (defvar-local ,MODE-major-mode nil)) | 527 | (defvar-local ,MODE-major-mode nil) |
| 528 | ,@(when predicate `((defvar ,MODE-predicate)))) | ||
| 528 | ;; The actual global minor-mode | 529 | ;; The actual global minor-mode |
| 529 | (define-minor-mode ,global-mode | 530 | (define-minor-mode ,global-mode |
| 530 | ,(concat (format "Toggle %s in all buffers.\n" pretty-name) | 531 | ,(concat (format "Toggle %s in all buffers.\n" pretty-name) |
diff --git a/lisp/emacs-lisp/rmc.el b/lisp/emacs-lisp/rmc.el index dab119e8a99..1260b50b0c7 100644 --- a/lisp/emacs-lisp/rmc.el +++ b/lisp/emacs-lisp/rmc.el | |||
| @@ -228,10 +228,9 @@ Usage example: | |||
| 228 | (when (setq command | 228 | (when (setq command |
| 229 | (let ((current-key-remap-sequence | 229 | (let ((current-key-remap-sequence |
| 230 | (vector tchar))) | 230 | (vector tchar))) |
| 231 | ;; Provide an empty prompt to `t-s-t-t' so | 231 | ;; Provide an empty prompt so that it may |
| 232 | ;; that it may not repeatedly display | 232 | ;; not repeatedly display and/or disable |
| 233 | ;; and/or disable the on-screen keyboard, | 233 | ;; the on-screen keyboard, or move point. |
| 234 | ;; or move point. | ||
| 235 | (touch-screen-translate-touch ""))) | 234 | (touch-screen-translate-touch ""))) |
| 236 | (setq command (if (> (length command) 0) | 235 | (setq command (if (> (length command) 0) |
| 237 | (aref command 0) | 236 | (aref command 0) |
diff --git a/lisp/epg.el b/lisp/epg.el index 7bec91f616d..494bdd68c41 100644 --- a/lisp/epg.el +++ b/lisp/epg.el | |||
| @@ -676,10 +676,14 @@ callback data (if any)." | |||
| 676 | :command (cons (epg-context-program context) | 676 | :command (cons (epg-context-program context) |
| 677 | args) | 677 | args) |
| 678 | :connection-type 'pipe | 678 | :connection-type 'pipe |
| 679 | :coding 'raw-text | 679 | :coding '(raw-text . nil) |
| 680 | :filter #'epg--process-filter | 680 | :filter #'epg--process-filter |
| 681 | :stderr error-process | 681 | :stderr error-process |
| 682 | :noquery t)))) | 682 | :noquery t)))) |
| 683 | ;; We encode and decode ourselves the text sent/received from gpg, | ||
| 684 | ;; so the below disables automatic encoding and decoding by | ||
| 685 | ;; subprocess communications routines. | ||
| 686 | (set-process-coding-system process 'raw-text 'raw-text) | ||
| 683 | (setf (epg-context-process context) process))) | 687 | (setf (epg-context-process context) process))) |
| 684 | 688 | ||
| 685 | (defun epg--process-filter (process input) | 689 | (defun epg--process-filter (process input) |
diff --git a/lisp/erc/erc-common.el b/lisp/erc/erc-common.el index 3577e697515..057e7981515 100644 --- a/lisp/erc/erc-common.el +++ b/lisp/erc/erc-common.el | |||
| @@ -363,7 +363,7 @@ instead of a `set' state, which precludes any actual saving." | |||
| 363 | Non-nil inside an ERC module's activation (or deactivation) | 363 | Non-nil inside an ERC module's activation (or deactivation) |
| 364 | command, such as `erc-spelling-enable', when it's been called | 364 | command, such as `erc-spelling-enable', when it's been called |
| 365 | indirectly via the module's minor-mode toggle, i.e., | 365 | indirectly via the module's minor-mode toggle, i.e., |
| 366 | `erc-spelling-mode'. Nil otherwise. Its value is either the | 366 | `erc-spelling-mode'. nil otherwise. Its value is either the |
| 367 | symbol `toggle' or an integer produced by `prefix-numeric-value'. | 367 | symbol `toggle' or an integer produced by `prefix-numeric-value'. |
| 368 | See Info node `(elisp) Defining Minor Modes' for more.") | 368 | See Info node `(elisp) Defining Minor Modes' for more.") |
| 369 | 369 | ||
diff --git a/lisp/frameset.el b/lisp/frameset.el index 436e51905fb..18e2a3ac666 100644 --- a/lisp/frameset.el +++ b/lisp/frameset.el | |||
| @@ -200,7 +200,7 @@ Properties can be set with | |||
| 200 | ;; - can be ignored by window managers (most positional args, like `height', | 200 | ;; - can be ignored by window managers (most positional args, like `height', |
| 201 | ;; `width', `left' and `top', and others, like `auto-raise', `auto-lower') | 201 | ;; `width', `left' and `top', and others, like `auto-raise', `auto-lower') |
| 202 | ;; - can be set externally in X resources or Window registry (again, most | 202 | ;; - can be set externally in X resources or Window registry (again, most |
| 203 | ;; positional parameters, and also `toolbar-lines', `menu-bar-lines' etc.) | 203 | ;; positional parameters, and also `tool-bar-lines', `menu-bar-lines' etc.) |
| 204 | ;, - can contain references to live objects (`buffer-list', `minibuffer') or | 204 | ;, - can contain references to live objects (`buffer-list', `minibuffer') or |
| 205 | ;; code (`buffer-predicate') | 205 | ;; code (`buffer-predicate') |
| 206 | ;; - are set automatically, and cannot be changed (`window-id', `parent-id'), | 206 | ;; - are set automatically, and cannot be changed (`window-id', `parent-id'), |
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el index 727ace84463..bd96556846f 100644 --- a/lisp/org/ob-core.el +++ b/lisp/org/ob-core.el | |||
| @@ -1778,7 +1778,7 @@ shown below. | |||
| 1778 | 1778 | ||
| 1779 | #+PROPERTY: var foo=1, bar=2 | 1779 | #+PROPERTY: var foo=1, bar=2 |
| 1780 | 1780 | ||
| 1781 | HEADER-ARGUMENTS is alist of all the arguments." | 1781 | HEADER-ARGUMENTS is an alist of all the arguments." |
| 1782 | (let (results) | 1782 | (let (results) |
| 1783 | (mapc (lambda (pair) | 1783 | (mapc (lambda (pair) |
| 1784 | (if (eq (car pair) :var) | 1784 | (if (eq (car pair) :var) |
diff --git a/lisp/org/ob-lilypond.el b/lisp/org/ob-lilypond.el index a8d85ce7c85..ef747d9bb2c 100644 --- a/lisp/org/ob-lilypond.el +++ b/lisp/org/ob-lilypond.el | |||
| @@ -160,7 +160,7 @@ Otherwise, execute block according to header settings." | |||
| 160 | (org-babel-lilypond-process-basic body params))) | 160 | (org-babel-lilypond-process-basic body params))) |
| 161 | 161 | ||
| 162 | (defun org-babel-lilypond-tangle () | 162 | (defun org-babel-lilypond-tangle () |
| 163 | "Tangle lilypond blocks, then `org-babel-liypond-execute-tangled-ly'." | 163 | "Tangle lilypond blocks, then `org-babel-lilypond-execute-tangled-ly'." |
| 164 | (interactive) | 164 | (interactive) |
| 165 | (if (org-babel-tangle nil "yes" "lilypond") | 165 | (if (org-babel-tangle nil "yes" "lilypond") |
| 166 | (org-babel-lilypond-execute-tangled-ly) nil)) | 166 | (org-babel-lilypond-execute-tangled-ly) nil)) |
diff --git a/lisp/org/org-refile.el b/lisp/org/org-refile.el index c8e64903c33..391e2402859 100644 --- a/lisp/org/org-refile.el +++ b/lisp/org/org-refile.el | |||
| @@ -557,7 +557,7 @@ prefix argument (`C-u C-u C-u C-c C-w')." | |||
| 557 | (let ((origin (point-marker))) | 557 | (let ((origin (point-marker))) |
| 558 | ;; Handle special case when we refile to exactly same | 558 | ;; Handle special case when we refile to exactly same |
| 559 | ;; location with tree promotion/demotion. Point marker | 559 | ;; location with tree promotion/demotion. Point marker |
| 560 | ;; saved by `org-width-wide-buffer' (`save-excursion') | 560 | ;; saved by `org-with-wide-buffer' (`save-excursion') |
| 561 | ;; will then remain before the inserted subtree in | 561 | ;; will then remain before the inserted subtree in |
| 562 | ;; unexpected location. | 562 | ;; unexpected location. |
| 563 | (set-marker-insertion-type origin t) | 563 | (set-marker-insertion-type origin t) |
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 0b50844732f..7dc850cb839 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el | |||
| @@ -13864,7 +13864,7 @@ comment at the start of cc-engine.el for more info." | |||
| 13864 | ;; | 13864 | ;; |
| 13865 | ;; This is true when point is at the last non syntactic WS position on the | 13865 | ;; This is true when point is at the last non syntactic WS position on the |
| 13866 | ;; line, there is a macro call last on the line, and this particular macro's | 13866 | ;; line, there is a macro call last on the line, and this particular macro's |
| 13867 | ;; name is defined by the regexp `c-vs-macro-regexp' as not needing a | 13867 | ;; name is defined by the regexp `c-macro-with-semi-re' as not needing a |
| 13868 | ;; semicolon. | 13868 | ;; semicolon. |
| 13869 | (save-excursion | 13869 | (save-excursion |
| 13870 | (save-restriction | 13870 | (save-restriction |
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el index b8ca1f2d600..686555221cb 100644 --- a/lisp/progmodes/dcl-mode.el +++ b/lisp/progmodes/dcl-mode.el | |||
| @@ -500,7 +500,6 @@ Variables controlling indentation style and extra features: | |||
| 500 | dcl-imenu-label-call | 500 | dcl-imenu-label-call |
| 501 | Change the text that is used as sub-listing labels in imenu. | 501 | Change the text that is used as sub-listing labels in imenu. |
| 502 | 502 | ||
| 503 | To run code after DCL mode has loaded, use `with-eval-after-load'. | ||
| 504 | Turning on DCL mode calls the value of the variable `dcl-mode-hook' | 503 | Turning on DCL mode calls the value of the variable `dcl-mode-hook' |
| 505 | with no args, if that value is non-nil. | 504 | with no args, if that value is non-nil. |
| 506 | 505 | ||
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el index 37b3a5f190b..a8a0495ab11 100644 --- a/lisp/progmodes/ebrowse.el +++ b/lisp/progmodes/ebrowse.el | |||
| @@ -851,7 +851,7 @@ Return the buffer created." | |||
| 851 | For each member, a symbol is added to the table. Members are | 851 | For each member, a symbol is added to the table. Members are |
| 852 | extracted from the buffer-local tree `ebrowse--tree-table'. | 852 | extracted from the buffer-local tree `ebrowse--tree-table'. |
| 853 | 853 | ||
| 854 | Each symbol has its property `ebrowse-info' set to a list (TREE MEMBER-LIST | 854 | Each symbol has its property `ebrowse-tree' set to a list (TREE MEMBER-LIST |
| 855 | MEMBER) where TREE is the tree in which the member is defined, | 855 | MEMBER) where TREE is the tree in which the member is defined, |
| 856 | MEMBER-LIST is a symbol describing the member list in which the member | 856 | MEMBER-LIST is a symbol describing the member list in which the member |
| 857 | is found, and MEMBER is a MEMBER structure describing the member. | 857 | is found, and MEMBER is a MEMBER structure describing the member. |
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index df4cbe50dc0..bb6b0281d9f 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el | |||
| @@ -2544,7 +2544,7 @@ THINGS are either registrations or unregisterations (sic)." | |||
| 2544 | 2544 | ||
| 2545 | (defun eglot--TextDocumentIdentifier () | 2545 | (defun eglot--TextDocumentIdentifier () |
| 2546 | "Compute TextDocumentIdentifier object for current buffer. | 2546 | "Compute TextDocumentIdentifier object for current buffer. |
| 2547 | Sets `eglot--TextDocumentIdentifier-uri' (which see) as a side effect." | 2547 | Sets `eglot--TextDocumentIdentifier-cache' (which see) as a side effect." |
| 2548 | (unless eglot--TextDocumentIdentifier-cache | 2548 | (unless eglot--TextDocumentIdentifier-cache |
| 2549 | (let ((truename (file-truename (or buffer-file-name | 2549 | (let ((truename (file-truename (or buffer-file-name |
| 2550 | (ignore-errors | 2550 | (ignore-errors |
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index c8b086cfad2..0ce5e1df794 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el | |||
| @@ -5122,7 +5122,7 @@ commands) or source buffers (that display program source code)." | |||
| 5122 | 5122 | ||
| 5123 | (defun gdb--buffer-type (buffer) | 5123 | (defun gdb--buffer-type (buffer) |
| 5124 | "Return the type of BUFFER if it is a function buffer. | 5124 | "Return the type of BUFFER if it is a function buffer. |
| 5125 | Buffer type is like `gdb-registers-type', `gdb-stack-buffer'. | 5125 | Buffer type is like `gdb-registers-buffer', `gdb-stack-buffer'. |
| 5126 | These symbols are used by `gdb-get-buffer-create'. | 5126 | These symbols are used by `gdb-get-buffer-create'. |
| 5127 | 5127 | ||
| 5128 | Return nil if BUFFER is not a GDB function buffer." | 5128 | Return nil if BUFFER is not a GDB function buffer." |
diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 826c131ca70..1298b39311b 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | ;; * https://github.com/tree-sitter/tree-sitter-php | 36 | ;; * https://github.com/tree-sitter/tree-sitter-php |
| 37 | ;; * https://github.com/tree-sitter/tree-sitter-html | 37 | ;; * https://github.com/tree-sitter/tree-sitter-html |
| 38 | ;; * https://github.com/tree-sitter/tree-sitter-javascript | 38 | ;; * https://github.com/tree-sitter/tree-sitter-javascript |
| 39 | ;; * https://github.com/tree-sitter/tree-sitter-jsdoc | ||
| 39 | ;; * https://github.com/tree-sitter/tree-sitter-css | 40 | ;; * https://github.com/tree-sitter/tree-sitter-css |
| 40 | ;; * https://github.com/claytonrcarter/tree-sitter-phpdoc | 41 | ;; * https://github.com/claytonrcarter/tree-sitter-phpdoc |
| 41 | ;; | 42 | ;; |
| @@ -86,6 +87,7 @@ | |||
| 86 | (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc")) | 87 | (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc")) |
| 87 | (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.3")) | 88 | (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.3")) |
| 88 | (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.21.2")) | 89 | (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.21.2")) |
| 90 | (jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.21.0")) | ||
| 89 | (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.21.0"))) | 91 | (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.21.0"))) |
| 90 | "Treesitter language parsers required by `php-ts-mode'. | 92 | "Treesitter language parsers required by `php-ts-mode'. |
| 91 | You can customize this variable if you want to stick to a specific | 93 | You can customize this variable if you want to stick to a specific |
| @@ -1296,6 +1298,7 @@ Depends on `c-ts-common-comment-setup'." | |||
| 1296 | (treesit-ready-p 'phpdoc) | 1298 | (treesit-ready-p 'phpdoc) |
| 1297 | (treesit-ready-p 'html) | 1299 | (treesit-ready-p 'html) |
| 1298 | (treesit-ready-p 'javascript) | 1300 | (treesit-ready-p 'javascript) |
| 1301 | (treesit-ready-p 'jsdoc) | ||
| 1299 | (treesit-ready-p 'css))) | 1302 | (treesit-ready-p 'css))) |
| 1300 | (error "Tree-sitter for PHP isn't | 1303 | (error "Tree-sitter for PHP isn't |
| 1301 | available. You can install the parsers with M-x | 1304 | available. You can install the parsers with M-x |
| @@ -1334,6 +1337,12 @@ Depends on `c-ts-common-comment-setup'." | |||
| 1334 | (start_tag (tag_name)) | 1337 | (start_tag (tag_name)) |
| 1335 | (raw_text) @cap)) | 1338 | (raw_text) @cap)) |
| 1336 | 1339 | ||
| 1340 | :embed 'jsdoc | ||
| 1341 | :host 'javascript | ||
| 1342 | :local t | ||
| 1343 | `(((comment) @cap | ||
| 1344 | (:match ,js--treesit-jsdoc-beginning-regexp @cap))) | ||
| 1345 | |||
| 1337 | :embed 'css | 1346 | :embed 'css |
| 1338 | :host 'html | 1347 | :host 'html |
| 1339 | :offset '(1 . -1) | 1348 | :offset '(1 . -1) |
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el index a593b6c6241..3cfd3905701 100644 --- a/lisp/thingatpt.el +++ b/lisp/thingatpt.el | |||
| @@ -778,7 +778,10 @@ Signal an error if the entire string was not used." | |||
| 778 | 778 | ||
| 779 | ;;;###autoload | 779 | ;;;###autoload |
| 780 | (defun sexp-at-point () | 780 | (defun sexp-at-point () |
| 781 | "Return the sexp at point, or nil if none is found." | 781 | "Return the sexp at point, or nil if none is found. |
| 782 | This is for returning the Lisp object represented by text at point; | ||
| 783 | use (thing-at-point \\='sexp) instead if you rather want the balanced | ||
| 784 | expression at point regardless of Lisp syntax." | ||
| 782 | (form-at-point 'sexp)) | 785 | (form-at-point 'sexp)) |
| 783 | ;;;###autoload | 786 | ;;;###autoload |
| 784 | (defun symbol-at-point () | 787 | (defun symbol-at-point () |
diff --git a/lisp/transient.el b/lisp/transient.el index 805b0acd6f3..312ed540f73 100644 --- a/lisp/transient.el +++ b/lisp/transient.el | |||
| @@ -2550,7 +2550,10 @@ value. Otherwise return CHILDREN as is." | |||
| 2550 | (transient--pop-keymap 'transient--redisplay-map) | 2550 | (transient--pop-keymap 'transient--redisplay-map) |
| 2551 | (setq transient--redisplay-map new) | 2551 | (setq transient--redisplay-map new) |
| 2552 | (transient--push-keymap 'transient--redisplay-map)) | 2552 | (transient--push-keymap 'transient--redisplay-map)) |
| 2553 | (transient--redisplay))))))) | 2553 | (transient--redisplay))))) |
| 2554 | (setq transient-current-prefix nil) | ||
| 2555 | (setq transient-current-command nil) | ||
| 2556 | (setq transient-current-suffixes nil))) | ||
| 2554 | 2557 | ||
| 2555 | (defun transient--post-exit (&optional command) | 2558 | (defun transient--post-exit (&optional command) |
| 2556 | (transient--debug 'post-exit) | 2559 | (transient--debug 'post-exit) |
| @@ -2573,9 +2576,6 @@ value. Otherwise return CHILDREN as is." | |||
| 2573 | (remove-hook 'pre-command-hook #'transient--pre-command) | 2576 | (remove-hook 'pre-command-hook #'transient--pre-command) |
| 2574 | (remove-hook 'post-command-hook #'transient--post-command) | 2577 | (remove-hook 'post-command-hook #'transient--post-command) |
| 2575 | (advice-remove 'recursive-edit #'transient--recursive-edit)) | 2578 | (advice-remove 'recursive-edit #'transient--recursive-edit)) |
| 2576 | (setq transient-current-prefix nil) | ||
| 2577 | (setq transient-current-command nil) | ||
| 2578 | (setq transient-current-suffixes nil) | ||
| 2579 | (let ((resume (and transient--stack | 2579 | (let ((resume (and transient--stack |
| 2580 | (not (memq transient--exitp '(replace suspend)))))) | 2580 | (not (memq transient--exitp '(replace suspend)))))) |
| 2581 | (unless (or resume (eq transient--exitp 'replace)) | 2581 | (unless (or resume (eq transient--exitp 'replace)) |
diff --git a/lisp/which-key.el b/lisp/which-key.el index 8ad2ba2c365..677a84b328d 100644 --- a/lisp/which-key.el +++ b/lisp/which-key.el | |||
| @@ -1614,7 +1614,7 @@ Within these categories order using `which-key-key-order'." | |||
| 1614 | (when found `(replaced . ,key-binding)))) | 1614 | (when found `(replaced . ,key-binding)))) |
| 1615 | 1615 | ||
| 1616 | (defun which-key--maybe-replace (key-binding) | 1616 | (defun which-key--maybe-replace (key-binding) |
| 1617 | "Use `which-key--replacement-alist' to maybe replace KEY-BINDING. | 1617 | "Use `which-key-replacement-alist' to maybe replace KEY-BINDING. |
| 1618 | KEY-BINDING is a cons cell of the form \(KEY . BINDING\) each of | 1618 | KEY-BINDING is a cons cell of the form \(KEY . BINDING\) each of |
| 1619 | which are strings. KEY is of the form produced by `key-binding'." | 1619 | which are strings. KEY is of the form produced by `key-binding'." |
| 1620 | (let* ((replacer (if which-key-allow-multiple-replacements | 1620 | (let* ((replacer (if which-key-allow-multiple-replacements |
diff --git a/lisp/xwidget.el b/lisp/xwidget.el index cca01c8cb3a..bf5987d742f 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el | |||
| @@ -378,7 +378,7 @@ one char." | |||
| 378 | (> (window-hscroll) 0)) | 378 | (> (window-hscroll) 0)) |
| 379 | (set-window-hscroll nil (- (window-hscroll) n)) | 379 | (set-window-hscroll nil (- (window-hscroll) n)) |
| 380 | (xwidget-webkit-execute-script session | 380 | (xwidget-webkit-execute-script session |
| 381 | (format "window.scrollBy(%-d, 0);" | 381 | (format "window.scrollBy(-%d, 0);" |
| 382 | (* n (window-font-width))))))) | 382 | (* n (window-font-width))))))) |
| 383 | 383 | ||
| 384 | (defun xwidget-webkit-scroll-top () | 384 | (defun xwidget-webkit-scroll-top () |
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp index b4681d2ae07..624983798c4 100644 --- a/msdos/sedlibmk.inp +++ b/msdos/sedlibmk.inp | |||
| @@ -288,7 +288,7 @@ s/@PACKAGE@/emacs/ | |||
| 288 | /^MKDIR_P *=/s/@MKDIR_P@/echo/ | 288 | /^MKDIR_P *=/s/@MKDIR_P@/echo/ |
| 289 | /^NEXT_AS_FIRST_DIRECTIVE_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ | 289 | /^NEXT_AS_FIRST_DIRECTIVE_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ |
| 290 | /^NEXT_AS_FIRST_DIRECTIVE_ERRNO_H *=/s/@[^@\n]*@// | 290 | /^NEXT_AS_FIRST_DIRECTIVE_ERRNO_H *=/s/@[^@\n]*@// |
| 291 | /^NEXT_AS_FIRST_DIRECTIVE_ENDIAN_H *=/s/@[^@\n]*@/<machine/endian.h>/ | 291 | /^NEXT_AS_FIRST_DIRECTIVE_ENDIAN_H *=/s|@[^@\n]*@|<machine/endian.h>| |
| 292 | /^NEXT_AS_FIRST_DIRECTIVE_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/ | 292 | /^NEXT_AS_FIRST_DIRECTIVE_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/ |
| 293 | /^NEXT_AS_FIRST_DIRECTIVE_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/ | 293 | /^NEXT_AS_FIRST_DIRECTIVE_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/ |
| 294 | /^NEXT_AS_FIRST_DIRECTIVE_LIMITS_H *=/s/@[^@\n]*@/<limits.h>/ | 294 | /^NEXT_AS_FIRST_DIRECTIVE_LIMITS_H *=/s/@[^@\n]*@/<limits.h>/ |
| @@ -307,7 +307,7 @@ s/@PACKAGE@/emacs/ | |||
| 307 | /^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ | 307 | /^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ |
| 308 | /^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ | 308 | /^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ |
| 309 | /^NEXT_ERRNO_H *=/s/@[^@\n]*@// | 309 | /^NEXT_ERRNO_H *=/s/@[^@\n]*@// |
| 310 | /^NEXT_ENDIAN_H *=/s/@[^@\n]*@/<machine/endian.h>/ | 310 | /^NEXT_ENDIAN_H *=/s|@[^@\n]*@|<machine/endian.h>| |
| 311 | /^NEXT_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/ | 311 | /^NEXT_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/ |
| 312 | /^NEXT_FLOAT_H *=/s/@[^@\n]*@// | 312 | /^NEXT_FLOAT_H *=/s/@[^@\n]*@// |
| 313 | /^NEXT_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/ | 313 | /^NEXT_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/ |
diff --git a/src/treesit.c b/src/treesit.c index 54b16eb1bb3..f0c786e921d 100644 --- a/src/treesit.c +++ b/src/treesit.c | |||
| @@ -846,7 +846,6 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, | |||
| 846 | treesit_tree_edit_1 (tree, start_offset, old_end_offset, | 846 | treesit_tree_edit_1 (tree, start_offset, old_end_offset, |
| 847 | new_end_offset); | 847 | new_end_offset); |
| 848 | XTS_PARSER (lisp_parser)->need_reparse = true; | 848 | XTS_PARSER (lisp_parser)->need_reparse = true; |
| 849 | XTS_PARSER (lisp_parser)->timestamp++; | ||
| 850 | 849 | ||
| 851 | /* VISIBLE_BEG/END records tree-sitter's range of view in | 850 | /* VISIBLE_BEG/END records tree-sitter's range of view in |
| 852 | the buffer. We need to adjust them when tree-sitter's | 851 | the buffer. We need to adjust them when tree-sitter's |
| @@ -948,10 +947,7 @@ treesit_sync_visible_region (Lisp_Object parser) | |||
| 948 | this function is called), we need to reparse. */ | 947 | this function is called), we need to reparse. */ |
| 949 | if (visible_beg != BUF_BEGV_BYTE (buffer) | 948 | if (visible_beg != BUF_BEGV_BYTE (buffer) |
| 950 | || visible_end != BUF_ZV_BYTE (buffer)) | 949 | || visible_end != BUF_ZV_BYTE (buffer)) |
| 951 | { | 950 | XTS_PARSER (parser)->need_reparse = true; |
| 952 | XTS_PARSER (parser)->need_reparse = true; | ||
| 953 | XTS_PARSER (parser)->timestamp++; | ||
| 954 | } | ||
| 955 | 951 | ||
| 956 | /* Before we parse or set ranges, catch up with the narrowing | 952 | /* Before we parse or set ranges, catch up with the narrowing |
| 957 | situation. We change visible_beg and visible_end to match | 953 | situation. We change visible_beg and visible_end to match |
| @@ -1090,6 +1086,7 @@ treesit_ensure_parsed (Lisp_Object parser) | |||
| 1090 | 1086 | ||
| 1091 | XTS_PARSER (parser)->tree = new_tree; | 1087 | XTS_PARSER (parser)->tree = new_tree; |
| 1092 | XTS_PARSER (parser)->need_reparse = false; | 1088 | XTS_PARSER (parser)->need_reparse = false; |
| 1089 | XTS_PARSER (parser)->timestamp++; | ||
| 1093 | 1090 | ||
| 1094 | /* After-change functions should run at the very end, most crucially | 1091 | /* After-change functions should run at the very end, most crucially |
| 1095 | after need_reparse is set to false, this way if the function | 1092 | after need_reparse is set to false, this way if the function |
| @@ -1725,7 +1722,6 @@ buffer. */) | |||
| 1725 | ranges); | 1722 | ranges); |
| 1726 | 1723 | ||
| 1727 | XTS_PARSER (parser)->need_reparse = true; | 1724 | XTS_PARSER (parser)->need_reparse = true; |
| 1728 | XTS_PARSER (parser)->timestamp++; | ||
| 1729 | return Qnil; | 1725 | return Qnil; |
| 1730 | } | 1726 | } |
| 1731 | 1727 | ||
| @@ -2923,11 +2919,10 @@ be completely in the region. | |||
| 2923 | 2919 | ||
| 2924 | If NODE-ONLY is non-nil, return a list of nodes. | 2920 | If NODE-ONLY is non-nil, return a list of nodes. |
| 2925 | 2921 | ||
| 2926 | Besides a node, NODE can also be a parser, in which case the root node | 2922 | Besides a node, NODE can be a parser, in which case the root node of |
| 2927 | of that parser is used. | 2923 | that parser is used. NODE can also be a language symbol, in which case |
| 2928 | NODE can also be a language symbol, in which case the root node of a | 2924 | the root node of a parser for that language is used. If such a parser |
| 2929 | parser for that language is used. If such a parser doesn't exist, it | 2925 | doesn't exist, it is created. |
| 2930 | is created. | ||
| 2931 | 2926 | ||
| 2932 | Signal `treesit-query-error' if QUERY is malformed or something else | 2927 | Signal `treesit-query-error' if QUERY is malformed or something else |
| 2933 | goes wrong. You can use `treesit-query-validate' to validate and debug | 2928 | goes wrong. You can use `treesit-query-validate' to validate and debug |
| @@ -2941,8 +2936,13 @@ the query. */) | |||
| 2941 | 2936 | ||
| 2942 | treesit_initialize (); | 2937 | treesit_initialize (); |
| 2943 | 2938 | ||
| 2944 | /* Resolve NODE into an actual node. */ | 2939 | /* Resolve NODE into an actual node, signals if node not |
| 2940 | up-to-date. */ | ||
| 2945 | Lisp_Object lisp_node = treesit_resolve_node (node); | 2941 | Lisp_Object lisp_node = treesit_resolve_node (node); |
| 2942 | /* As of right now, the node returned by treesit_resolve_node always | ||
| 2943 | passes treesit_check_node; but it might not be true in the future, | ||
| 2944 | so adding the line below just to be safe. */ | ||
| 2945 | treesit_check_node (node); | ||
| 2946 | 2946 | ||
| 2947 | /* Extract C values from Lisp objects. */ | 2947 | /* Extract C values from Lisp objects. */ |
| 2948 | TSNode treesit_node = XTS_NODE (lisp_node)->node; | 2948 | TSNode treesit_node = XTS_NODE (lisp_node)->node; |
| @@ -2970,8 +2970,8 @@ the query. */) | |||
| 2970 | &signal_symbol, &signal_data)) | 2970 | &signal_symbol, &signal_data)) |
| 2971 | xsignal (signal_symbol, signal_data); | 2971 | xsignal (signal_symbol, signal_data); |
| 2972 | 2972 | ||
| 2973 | /* WARN: After this point, free TREESIT_QUERY and CURSOR before every | 2973 | /* WARN: After this point, if NEEDS_TO_FREE_QUERY_AND_CURSOR is true, |
| 2974 | signal and return if NEEDS_TO_FREE_QUERY_AND_CURSOR is true. */ | 2974 | free TREESIT_QUERY and CURSOR before every signal and return. */ |
| 2975 | 2975 | ||
| 2976 | /* Set query range. */ | 2976 | /* Set query range. */ |
| 2977 | if (!NILP (beg) && !NILP (end)) | 2977 | if (!NILP (beg) && !NILP (end)) |
diff --git a/test/lisp/net/shr-tests.el b/test/lisp/net/shr-tests.el index 4864fc488e2..54d85ee95f9 100644 --- a/test/lisp/net/shr-tests.el +++ b/test/lisp/net/shr-tests.el | |||
| @@ -136,13 +136,15 @@ settings, then once more for each (OPTION . VALUE) pair.") | |||
| 136 | (ert-deftest shr-test/zoom-image () | 136 | (ert-deftest shr-test/zoom-image () |
| 137 | "Test that `shr-zoom-image' properly replaces the original image." | 137 | "Test that `shr-zoom-image' properly replaces the original image." |
| 138 | (skip-unless (bound-and-true-p image-types)) | 138 | (skip-unless (bound-and-true-p image-types)) |
| 139 | (let ((image (expand-file-name "data/image/blank-100x200.png" | 139 | (let* ((image (expand-file-name "data/image/blank-100x200.png" |
| 140 | (getenv "EMACS_TEST_DIRECTORY")))) | 140 | (getenv "EMACS_TEST_DIRECTORY"))) |
| 141 | (image-url (concat "file://" (if (string-prefix-p "/" image) | ||
| 142 | image (concat "/" image))))) | ||
| 141 | (dolist (alt '(nil "" "nothing to see here")) | 143 | (dolist (alt '(nil "" "nothing to see here")) |
| 142 | (with-temp-buffer | 144 | (with-temp-buffer |
| 143 | (ert-info ((format "image with alt=%S" alt)) | 145 | (ert-info ((format "image with alt=%S" alt)) |
| 144 | (let ((attrs (if alt (format " alt=\"%s\"" alt) ""))) | 146 | (let ((attrs (if alt (format " alt=\"%s\"" alt) ""))) |
| 145 | (insert (format "<img src=\"file://%s\" %s" image attrs))) | 147 | (insert (format "<img src=\"%s\" %s" image-url attrs))) |
| 146 | (cl-letf* (;; Pretend we're a graphical display. | 148 | (cl-letf* (;; Pretend we're a graphical display. |
| 147 | ((symbol-function 'display-graphic-p) #'always) | 149 | ((symbol-function 'display-graphic-p) #'always) |
| 148 | ((symbol-function 'url-queue-retrieve) | 150 | ((symbol-function 'url-queue-retrieve) |
| @@ -161,11 +163,13 @@ settings, then once more for each (OPTION . VALUE) pair.") | |||
| 161 | ;; Render the document. | 163 | ;; Render the document. |
| 162 | (erase-buffer) | 164 | (erase-buffer) |
| 163 | (shr-insert-document dom) | 165 | (shr-insert-document dom) |
| 164 | (shr-test-wait-for (lambda () (= put-image-calls 1))) | 166 | (shr-test-wait-for (lambda () (= put-image-calls 1)) |
| 167 | "Timed out waiting for initial load") | ||
| 165 | ;; Now zoom the image. | 168 | ;; Now zoom the image. |
| 166 | (goto-char (point-min)) | 169 | (goto-char (point-min)) |
| 167 | (shr-zoom-image) | 170 | (shr-zoom-image) |
| 168 | (shr-test-wait-for (lambda () (= put-image-calls 2))) | 171 | (shr-test-wait-for (lambda () (= put-image-calls 2)) |
| 172 | "Timed out waiting to zoom image") | ||
| 169 | ;; Check that we got a sliced image. | 173 | ;; Check that we got a sliced image. |
| 170 | (let ((slice-count 0)) | 174 | (let ((slice-count 0)) |
| 171 | (goto-char (point-min)) | 175 | (goto-char (point-min)) |
diff --git a/test/lisp/which-key-tests.el b/test/lisp/which-key-tests.el index 1f2b1965ec3..3b42a7bd504 100644 --- a/test/lisp/which-key-tests.el +++ b/test/lisp/which-key-tests.el | |||
| @@ -53,8 +53,7 @@ | |||
| 53 | '(("C-a" . "which-key-test--named-map")))))) | 53 | '(("C-a" . "which-key-test--named-map")))))) |
| 54 | 54 | ||
| 55 | (ert-deftest which-key-test--prefix-declaration () | 55 | (ert-deftest which-key-test--prefix-declaration () |
| 56 | "Test `which-key-declare-prefixes' and | 56 | ;; See Bug #109. |
| 57 | `which-key-declare-prefixes-for-mode'. See Bug #109." | ||
| 58 | (let* ((major-mode 'test-mode) | 57 | (let* ((major-mode 'test-mode) |
| 59 | which-key-replacement-alist) | 58 | which-key-replacement-alist) |
| 60 | (which-key-add-key-based-replacements | 59 | (which-key-add-key-based-replacements |
diff --git a/test/src/comp-resources/comp-test-funcs.el b/test/src/comp-resources/comp-test-funcs.el index 54f339f6373..084fcd8c9db 100644 --- a/test/src/comp-resources/comp-test-funcs.el +++ b/test/src/comp-resources/comp-test-funcs.el | |||
| @@ -361,7 +361,7 @@ | |||
| 361 | 2)) | 361 | 2)) |
| 362 | 362 | ||
| 363 | (defun comp-test-copy-insn-f (insn) | 363 | (defun comp-test-copy-insn-f (insn) |
| 364 | ;; From `comp-copy-insn'. | 364 | ;; From `comp--copy-insn'. |
| 365 | (if (consp insn) | 365 | (if (consp insn) |
| 366 | (let (result) | 366 | (let (result) |
| 367 | (while (consp insn) | 367 | (while (consp insn) |
diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el index dffb7097a3e..6744f14435b 100644 --- a/test/src/comp-tests.el +++ b/test/src/comp-tests.el | |||
| @@ -1320,7 +1320,7 @@ Return a list of results." | |||
| 1320 | (5 (message "five"))) | 1320 | (5 (message "five"))) |
| 1321 | x) | 1321 | x) |
| 1322 | 't | 1322 | 't |
| 1323 | ;; FIXME improve `comp-cond-cstrs-target-mvar' to cross block | 1323 | ;; FIXME improve `comp--cond-cstrs-target-mvar' to cross block |
| 1324 | ;; boundary if necessary as this should return: | 1324 | ;; boundary if necessary as this should return: |
| 1325 | ;; (or (integer 1 1) (integer 5 5)) | 1325 | ;; (or (integer 1 1) (integer 5 5)) |
| 1326 | ) | 1326 | ) |