diff options
| author | Eli Zaretskii | 2023-04-28 12:14:26 -0400 |
|---|---|---|
| committer | Eli Zaretskii | 2023-04-28 12:14:26 -0400 |
| commit | e155df7da785df732d34c9437abd24252c5be9ae (patch) | |
| tree | f149e17506e6afd34fca75ca90650ae214fcce9d | |
| parent | 6ebce84ff2b4e488fbffaa0f7cc2b06580557bf7 (diff) | |
| parent | 212e30f6789cd080a9428958872ffcaab6bf248a (diff) | |
| download | emacs-e155df7da785df732d34c9437abd24252c5be9ae.tar.gz emacs-e155df7da785df732d34c9437abd24252c5be9ae.zip | |
Merge from origin/emacs-29
212e30f6789 ; Fix byte-compilation warnings in c-ts-mode.el
1f2214dabd0 Skip over whitespace in annotation-top-cont check (bug#63...
7e136c51f6f Update zh-CN tutorial translation
d3ca0b3aa2e ; * lisp/progmodes/c-ts-mode.el: Fix comments and doc str...
c6f15c24862 ; Fix last change.
b9e06330f75 ; * etc/NEWS: Followup to bug#62720.
b33d25f5967 ; Minor improvements in doc strings of package-upgrade co...
c3a61870b94 Fix eglot.texi
# Conflicts:
# etc/NEWS
| -rw-r--r-- | doc/misc/eglot.texi | 33 | ||||
| -rw-r--r-- | etc/NEWS.29 | 7 | ||||
| -rw-r--r-- | etc/tutorials/TUTORIAL.cn | 152 | ||||
| -rw-r--r-- | etc/tutorials/TUTORIAL.translators | 1 | ||||
| -rw-r--r-- | lisp/emacs-lisp/package.el | 11 | ||||
| -rw-r--r-- | lisp/progmodes/c-ts-mode.el | 37 | ||||
| -rw-r--r-- | lisp/progmodes/csharp-mode.el | 5 |
7 files changed, 147 insertions, 99 deletions
diff --git a/doc/misc/eglot.texi b/doc/misc/eglot.texi index 4599b78ba56..542a4259d66 100644 --- a/doc/misc/eglot.texi +++ b/doc/misc/eglot.texi | |||
| @@ -1275,9 +1275,15 @@ pop up special buffers that can be used to inspect the communications | |||
| 1275 | between the Eglot and language server. In many cases, this will | 1275 | between the Eglot and language server. In many cases, this will |
| 1276 | indicate the problems or at least provide a hint. | 1276 | indicate the problems or at least provide a hint. |
| 1277 | 1277 | ||
| 1278 | @menu | ||
| 1279 | * Performance:: | ||
| 1280 | * Getting the latest version:: | ||
| 1281 | * Reporting bugs:: | ||
| 1282 | @end menu | ||
| 1283 | |||
| 1278 | @node Performance | 1284 | @node Performance |
| 1279 | @section Performance | 1285 | @section Performance |
| 1280 | @cindex performance | 1286 | @cindex performance problems, with Eglot |
| 1281 | A common and easy-to-fix cause of performance problems is the length | 1287 | A common and easy-to-fix cause of performance problems is the length |
| 1282 | of the Eglot events buffer because it represent additional work that | 1288 | of the Eglot events buffer because it represent additional work that |
| 1283 | Eglot must do. After verifying Eglot is operating correctly but | 1289 | Eglot must do. After verifying Eglot is operating correctly but |
| @@ -1293,23 +1299,26 @@ configuration}). | |||
| 1293 | 1299 | ||
| 1294 | @node Getting the latest version | 1300 | @node Getting the latest version |
| 1295 | @section Getting the latest version | 1301 | @section Getting the latest version |
| 1296 | @cindex updating Eglot | 1302 | @cindex upgrading Eglot |
| 1297 | 1303 | ||
| 1298 | To install the latest Eglot on an Emacs version that does not bundle | 1304 | To install the latest Eglot in an Emacs version that does not bundle |
| 1299 | Eglot, use @kbd{M-x package-install}. | 1305 | Eglot, use @kbd{M-x package-install}. |
| 1300 | 1306 | ||
| 1301 | Often, a newer Eglot version exists that has fixed a longstanding bug, | 1307 | Often, a newer Eglot version exists that has fixed a longstanding bug, |
| 1302 | has more LSP features, or just better support for a particular | 1308 | has more LSP features, or just better supports a particular language |
| 1303 | language server. Recent Eglot versions can self-update via the | 1309 | server. Recent Eglot versions can self-update via the command |
| 1304 | command @kbd{M-x eglot-update}. This will replace any currently | 1310 | @kbd{M-x eglot-update}. This will replace any currently installed |
| 1305 | installed version with the newest one available from the ELPA archives | 1311 | version with the newest one available from the ELPA archives |
| 1306 | configured in @code{package-archives}. | 1312 | configured in @code{package-archives}. |
| 1307 | 1313 | ||
| 1308 | You may update though other methods, such as @code{package-install}, | 1314 | You can also update Eglot through other methods, such as |
| 1309 | @code{use-package}, @code{list-packages} or the newer | 1315 | @code{use-package} (@pxref{Installing packages,,, use-package, |
| 1310 | @code{package-update}. However, do read the docstrings of these | 1316 | use-package User Manual}), @code{package-install}, |
| 1311 | commands, as some may not work in exactly the same way across Emacs | 1317 | @code{list-packages} or the newer @code{package-upgrade} |
| 1312 | versions, meaning your configuration may be not portable. | 1318 | (@pxref{Packages,,, emacs, GNU Emacs Manual}). However, do read the |
| 1319 | docstrings of the command you intend to use before you use it, as some | ||
| 1320 | of them may not work in exactly the same way across Emacs versions, | ||
| 1321 | meaning your configuration may be not portable. | ||
| 1313 | 1322 | ||
| 1314 | @node Reporting bugs | 1323 | @node Reporting bugs |
| 1315 | @section Reporting bugs | 1324 | @section Reporting bugs |
diff --git a/etc/NEWS.29 b/etc/NEWS.29 index ae4c5ffb842..5f5ae1c75a1 100644 --- a/etc/NEWS.29 +++ b/etc/NEWS.29 | |||
| @@ -1845,11 +1845,16 @@ this includes "binary" buffers like 'archive-mode' and 'image-mode'. | |||
| 1845 | +++ | 1845 | +++ |
| 1846 | *** New command 'package-upgrade'. | 1846 | *** New command 'package-upgrade'. |
| 1847 | This command allows you to upgrade packages without using 'M-x | 1847 | This command allows you to upgrade packages without using 'M-x |
| 1848 | list-packages'. | 1848 | list-packages'. A package that comes with the Emacs distribution can |
| 1849 | only be upgraded after you install, once, a newer version from ELPA | ||
| 1850 | via the package-menu displayed by 'list-packages'. | ||
| 1849 | 1851 | ||
| 1850 | +++ | 1852 | +++ |
| 1851 | *** New command 'package-upgrade-all'. | 1853 | *** New command 'package-upgrade-all'. |
| 1852 | This command allows upgrading all packages without any queries. | 1854 | This command allows upgrading all packages without any queries. |
| 1855 | A package that comes with the Emacs distribution will only be upgraded | ||
| 1856 | by this command after you install, once, a newer version of that | ||
| 1857 | package from ELPA via the package-menu displayed by 'list-packages'. | ||
| 1853 | 1858 | ||
| 1854 | +++ | 1859 | +++ |
| 1855 | *** New commands 'package-recompile' and 'package-recompile-all'. | 1860 | *** New commands 'package-recompile' and 'package-recompile-all'. |
diff --git a/etc/tutorials/TUTORIAL.cn b/etc/tutorials/TUTORIAL.cn index 73df2cff4e7..e4c90102f53 100644 --- a/etc/tutorials/TUTORIAL.cn +++ b/etc/tutorials/TUTORIAL.cn | |||
| @@ -15,10 +15,10 @@ META 键(有时候用 EDIT 或 ALT 来标示)。为了避免每次都要写 | |||
| 15 | ESC 键。 | 15 | ESC 键。 |
| 16 | 16 | ||
| 17 | 重要提示:要退出 Emacs,请用 C-x C-c(两个连续的组合键)。 | 17 | 重要提示:要退出 Emacs,请用 C-x C-c(两个连续的组合键)。 |
| 18 | 要退出一个正在行中的命令,请用 C-g。 | 18 | 要断个正在入的命令,请用 C-g。 |
| 19 | 下文中左边顶行的“>>”字样用来提示你尝试键盘命令。比如: | 19 | 下文中左边顶行的“>>”字样用来提示你尝试键盘命令。比如: |
| 20 | <<Blank lines inserted around following line by help-with-tutorial>> | 20 | <<Blank lines inserted around following line by help-with-tutorial>> |
| 21 | [本页当中特意留出一些空白是出于教学目的,请继续往后阅读] | 21 | 【本页当中特意留出一些空白是出于教学目的,请继续往后阅读】 |
| 22 | >> 现在输入 C-v (查看下一屏文字)移动到下一屏。 | 22 | >> 现在输入 C-v (查看下一屏文字)移动到下一屏。 |
| 23 | (别紧张,在输入字符 v 的同时注意要按住 CONTROL 键) | 23 | (别紧张,在输入字符 v 的同时注意要按住 CONTROL 键) |
| 24 | 从现在开始,每读完当前一屏你都需要这样做一次。 | 24 | 从现在开始,每读完当前一屏你都需要这样做一次。 |
| @@ -26,12 +26,17 @@ META 键(有时候用 EDIT 或 ALT 来标示)。为了避免每次都要写 | |||
| 26 | 值得注意的是,当你从上一屏滚到下一屏时,中间会有两行的重复;这样做是为 | 26 | 值得注意的是,当你从上一屏滚到下一屏时,中间会有两行的重复;这样做是为 |
| 27 | 了维持滚屏的连续性,方便你顺畅、连续地阅读。 | 27 | 了维持滚屏的连续性,方便你顺畅、连续地阅读。 |
| 28 | 28 | ||
| 29 | 这是 Emacs 教程文本的一个经过少量修改的副本。不久后我们会让你尝试不同 | ||
| 30 | 的命令来修改此文本。若你在我们提到这些命令前修改了文本,不要担心;这就 | ||
| 31 | 叫做“编辑”,而这就是 Emacs 存在的根本原因。 | ||
| 32 | |||
| 29 | 用编辑器,开门第一件事就是学会在文字中移动。你已经知道了 C-v 可以向下移 | 33 | 用编辑器,开门第一件事就是学会在文字中移动。你已经知道了 C-v 可以向下移 |
| 30 | 动一屏,要往上移,请用 M-v (也就是按住 META 键,然后输入v,如果你没有 | 34 | 动一屏,要往上移,请用 M-v (也就是按住 META 键,然后输入v,如果你没有 |
| 31 | META、EDIT 或 ALT 键那么就先按 <ESC> 再按 v)。 | 35 | META、EDIT 或 ALT 键那么就先按 <ESC> 再按 v)。 |
| 32 | 36 | ||
| 33 | >> 试试 M-v,然后再试试 C-v,来回遛几次。 | 37 | >> 试试 M-v,然后再试试 C-v,来回遛几次。 |
| 34 | 38 | ||
| 39 | 若你知道其他移动文本的方式,也可以在这里试试。 | ||
| 35 | 40 | ||
| 36 | * 小结(SUMMARY) | 41 | * 小结(SUMMARY) |
| 37 | ----------------- | 42 | ----------------- |
| @@ -101,7 +106,7 @@ P 代表 previous(上一行),N 代表 next(下一行),B 代表 backw | |||
| 101 | 106 | ||
| 102 | 如果你嫌一个字符一个字符地挪光标太慢,你还可以一个词一个词地跳。M-f | 107 | 如果你嫌一个字符一个字符地挪光标太慢,你还可以一个词一个词地跳。M-f |
| 103 | (META-f) 可以将光标往前移动一个词,而 M-b 则是往后移。【这里的“词”指 | 108 | (META-f) 可以将光标往前移动一个词,而 M-b 则是往后移。【这里的“词”指 |
| 104 | 英文单词,对中文来说,则是指移动到下一个标点符号。】 | 109 | 英文单词,对中文来说,则是指移动到下一个空或点符号。】 |
| 105 | 110 | ||
| 106 | >> 试试 M-f 和 M-b。 | 111 | >> 试试 M-f 和 M-b。 |
| 107 | 112 | ||
| @@ -132,8 +137,8 @@ P 代表 previous(上一行),N 代表 next(下一行),B 代表 backw | |||
| 132 | C-f 向右移动一个字符 | 137 | C-f 向右移动一个字符 |
| 133 | C-b 向左移动一个字符 | 138 | C-b 向左移动一个字符 |
| 134 | 139 | ||
| 135 | M-f 向右移动一个词【对中文是移动到下一个标点符号】 | 140 | M-f 向右移动一个词【对中文是移动到下一个空或点符号】 |
| 136 | M-b 向左移动一个词【对中文是移动到上一个标点符号】 | 141 | M-b 向左移动一个词【对中文是移动到上一个空或点符号】 |
| 137 | 142 | ||
| 138 | C-n 移动到下一行 | 143 | C-n 移动到下一行 |
| 139 | C-p 移动到上一行 | 144 | C-p 移动到上一行 |
| @@ -160,24 +165,25 @@ M-comma(META 逗号)。 | |||
| 160 | 然后再按几次 M-v 回到这里。 | 165 | 然后再按几次 M-v 回到这里。 |
| 161 | 166 | ||
| 162 | 如果你的键盘上有方向键的话,也可以用它们来移动光标。不过我们有三个理由 | 167 | 如果你的键盘上有方向键的话,也可以用它们来移动光标。不过我们有三个理由 |
| 163 | 推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何键盘上都能用。(2) | 168 | 推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何终端(terminal)上 |
| 164 | 当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你 | 169 | 都能用。(2)当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要 |
| 165 | 的手不需要离开打字区。(3)一旦你习惯了使用这些组合键,你也可以很容易地 | 170 | 快得多,因为你的手不需要离开打字区。(3)一旦你习惯了使用这些组合键, |
| 166 | 适应其它更高级的光标移动命令。 | 171 | 你也可以很容易地适应其它更高级的光标移动命令。 |
| 167 | 172 | ||
| 168 | 大部分的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的作 | 173 | 大部分的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的 |
| 169 | 用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法 | 174 | 作用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方 |
| 170 | 是:先输入 C-u,然后输入数字作为参数,最后再输入命令。如果你有META (或 | 175 | 法是:先输入 C-u,然后输入数字作为参数,最后再输入命令。如果你有 |
| 171 | EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不放,然后输入数字。不 | 176 | META(或EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不放,然后输 |
| 172 | 过我们还是建议你用 C-u,因为它在任何终端机上都能用。这种数字参数也称为 | 177 | 入数字。不过我们还是建议你用 C-u,因为它在任何终端上都能用。这种数字参 |
| 173 | “前缀参数”,意思是说这个参数是先于使用它的命令而输入的。 | 178 | 数也称为“前缀参数”(prefix argument),意思是说这个参数是先于使用它的 |
| 179 | 命令而输入的。 | ||
| 174 | 180 | ||
| 175 | 举例来说, C-u 8 C-f 会向前移动 8 个字符。 | 181 | 举例来说, C-u 8 C-f 会向前移动 8 个字符。 |
| 176 | 182 | ||
| 177 | >> 为 C-n 或者 C-p 指定一个数字参数,这样你可以只用一个命令就把光标移动 | 183 | >> 为 C-n 或者 C-p 指定一个数字参数,这样你可以只用一个命令就把光标移动 |
| 178 | 到本行的附近。 | 184 | 到本行的附近。 |
| 179 | 185 | ||
| 180 | 虽然大部分命令把数字参数解释为其重复次数,但是也有些命令例外,它们将数 | 186 | 虽然大部分命令把数字参数解读为其重复次数,但是也有些命令例外,它们将数 |
| 181 | 字参数另做它用。比如有些命令(我们目前还没学到)仅仅将前缀参数作为一个 | 187 | 字参数另做它用。比如有些命令(我们目前还没学到)仅仅将前缀参数作为一个 |
| 182 | 标志――只要给出有一个前缀参数,不管其值为何,它都会改变命令的功能。 | 188 | 标志――只要给出有一个前缀参数,不管其值为何,它都会改变命令的功能。 |
| 183 | 189 | ||
| @@ -189,7 +195,7 @@ EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不放,然 | |||
| 189 | 这个命令应该已经将文字向上滚动了 8 行。如果你想将它再次地向下滚动,你可 | 195 | 这个命令应该已经将文字向上滚动了 8 行。如果你想将它再次地向下滚动,你可 |
| 190 | 以给定一个参数然后执行 M-v。 | 196 | 以给定一个参数然后执行 M-v。 |
| 191 | 197 | ||
| 192 | 如果你正在使用图形界面,比如 X 或者微软的 Windows,那么在 Emacs窗 | 198 | 如果你正在使用图形界面,比如 X 或者微软的 Windows,那么在 Emacs 窗 |
| 193 | 口的一边应该有一个长方形的区域叫“滚动条”。你可以用鼠标操纵滚动条来滚动 | 199 | 口的一边应该有一个长方形的区域叫“滚动条”。你可以用鼠标操纵滚动条来滚动 |
| 194 | 文字。 | 200 | 文字。 |
| 195 | 201 | ||
| @@ -235,8 +241,8 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面 | |||
| 235 | 241 | ||
| 236 | C-x 1 只保留一个窗格(也就是关掉其它所有窗格)。 | 242 | C-x 1 只保留一个窗格(也就是关掉其它所有窗格)。 |
| 237 | 243 | ||
| 238 | 也就是先按 CONTROL-x 然后再按 1。C-x 1 会保留光标所在的窗格,并将其扩大 | 244 | 也就是先按 CONTROL-x 然后再按数字 1。C-x 1 会保留光标所在的窗格,并将 |
| 239 | 到整个屏幕,同时关掉所有其它的窗格。 | 245 | 扩大整个屏幕,同时关掉所有其它的窗格。 |
| 240 | 246 | ||
| 241 | >> 把光标移到本行然后输入 C-u 0 C-l。 | 247 | >> 把光标移到本行然后输入 C-u 0 C-l。 |
| 242 | 248 | ||
| @@ -266,12 +272,13 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面 | |||
| 266 | 不用担心文件被修改,你做什么都没关系,这里就是专给你练习用的。 | 272 | 不用担心文件被修改,你做什么都没关系,这里就是专给你练习用的。 |
| 267 | 273 | ||
| 268 | 如果一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续 | 274 | 如果一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续 |
| 269 | 显示。如果你使用的是图形界面,文本区域两边的狭窄区域(左右“边缘”)会出 | 275 | 显示,称为接续行(continuation line)。如果你使用的是图形界面,文本区 |
| 270 | 现小小的转弯箭头,表明这是某一行的接续显示。如果你使用的是文本终端,接 | 276 | 域两边的狭窄区域(左右“边缘”)会出现小小的转弯箭头,表明这是某一行的接 |
| 271 | 续显示由屏幕最右边一列的一个反斜线(“\”)来表示。 | 277 | 续显示。如果你使用的是文本终端,接续显示由屏幕最右边一列的一个“\”来表 |
| 278 | 示。 | ||
| 272 | 279 | ||
| 273 | >> 输入文字,一直到屏幕的右边界,然后继续。 | 280 | >> 输入文字,一直到屏幕的右边界,然后继续。 |
| 274 | 你会看到一个接续行出现。 | 281 | 你会看到一个接续行出现。 |
| 275 | 282 | ||
| 276 | >> 用 <DEL> 删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。 | 283 | >> 用 <DEL> 删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。 |
| 277 | 284 | ||
| @@ -286,7 +293,9 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面 | |||
| 286 | 293 | ||
| 287 | <Return> 是一个特殊的键,因为按下这个键后,得到的可能不仅仅是一个换行 | 294 | <Return> 是一个特殊的键,因为按下这个键后,得到的可能不仅仅是一个换行 |
| 288 | 符。根据周围文本的不同,Emacs 可能会在换行符之后插入一些空白字符,这样, | 295 | 符。根据周围文本的不同,Emacs 可能会在换行符之后插入一些空白字符,这样, |
| 289 | 当你在新的一行开始打字时,文本会自动与前一行对齐。 | 296 | 当你在新的一行开始打字时,文本会自动与前一行对齐。我们称这种行为(在按 |
| 297 | 这个按键时不只是插入其对应字符)为“electric”,可以理解为“通电的,自动 | ||
| 298 | 的”。 | ||
| 290 | 299 | ||
| 291 | >> 这是一个自动缩进的例子。 | 300 | >> 这是一个自动缩进的例子。 |
| 292 | 在这一行的末尾输入 <Return>。 | 301 | 在这一行的末尾输入 <Return>。 |
| @@ -338,7 +347,8 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面 | |||
| 338 | 了。】重新插入被移除的文字称为“召回(yank)”。一般而言,那些可能消除很 | 347 | 了。】重新插入被移除的文字称为“召回(yank)”。一般而言,那些可能消除很 |
| 339 | 多文字的命令会把消除掉的文字记录下来(它们被设定成了“可召回”),而那些 | 348 | 多文字的命令会把消除掉的文字记录下来(它们被设定成了“可召回”),而那些 |
| 340 | 只消除一个字符或者只消除空白的命令就不会记录被消除的内容(自然你也就无 | 349 | 只消除一个字符或者只消除空白的命令就不会记录被消除的内容(自然你也就无 |
| 341 | 法召回了)。 | 350 | 法召回了)。<DEL> 和 C-d 在无前缀参数的情况下进行“删除”,而有前缀参数 |
| 351 | 时则改用“移除”。 | ||
| 342 | 352 | ||
| 343 | >> 移动光标到一非空白行的行头,然后输入 C-k 移除那一行上的文字。 | 353 | >> 移动光标到一非空白行的行头,然后输入 C-k 移除那一行上的文字。 |
| 344 | 354 | ||
| @@ -350,10 +360,11 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面 | |||
| 350 | C-k 会把两行以及它们的换行符移除;而如果只是输入 C-k 两次显然不是这个结 | 360 | C-k 会把两行以及它们的换行符移除;而如果只是输入 C-k 两次显然不是这个结 |
| 351 | 果。 | 361 | 果。 |
| 352 | 362 | ||
| 353 | 重新插入被移除的文字恢复的动作称为“召回(yanking)”。(就好像把别人从你身边 | 363 | 【重新插入被移除的文字恢复的动作称为“召回(yanking)”,就好像把别人 |
| 354 | 移走的东西又猛力地拉回来。)你可以在你删除文字的地方召回,也可以在别的 | 364 | 从你身边移走的东西又猛力地拉回来。】你可以在你删除文字的地方召回,也 |
| 355 | 地方召回,还可以多次召回同样的文字以得到它的多个拷贝。很多其它的编辑器 | 365 | 可以在别的地方召回,还可以多次召回同样的文字以得到它的多个拷贝。很多其 |
| 356 | 把移除和召回叫做“剪切”和“粘贴” (详情可见 Emacs 使用手册里的术语表)。 | 366 | 它的编辑器把移除和召回叫做“剪切”和“粘贴” (详情可见 Emacs 使用手册里的 |
| 367 | 术语表)。 | ||
| 357 | 368 | ||
| 358 | 召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。 | 369 | 召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。 |
| 359 | 370 | ||
| @@ -372,8 +383,8 @@ C-y 就可以把它们都召回。 | |||
| 372 | C-y 可以召回最近一次移除的内容,那如何召回前几次移除的内容呢?它们当然 | 383 | C-y 可以召回最近一次移除的内容,那如何召回前几次移除的内容呢?它们当然 |
| 373 | 没有丢,你可以用 M-y 来召回它们。在用 C-y 召回最近移除的文字之后,紧接 | 384 | 没有丢,你可以用 M-y 来召回它们。在用 C-y 召回最近移除的文字之后,紧接 |
| 374 | 着再按 M-y 就可以召回再前一次被移除的内容,再按一次 M-y 又可以召回再上 | 385 | 着再按 M-y 就可以召回再前一次被移除的内容,再按一次 M-y 又可以召回再上 |
| 375 | 一次的……连续使用 M-y 直到找到你想要召回的东西,然后什么也不用做,继续 | 386 | 一次的内容……连续使用 M-y 直到找到你想要召回的东西,然后什么也不用做, |
| 376 | 编辑就行了。 | 387 | 续辑就行了。 |
| 377 | 388 | ||
| 378 | 如果连续按 M-y 很多次,你可能会回到起始点,也就是最近移除的文字。 | 389 | 如果连续按 M-y 很多次,你可能会回到起始点,也就是最近移除的文字。 |
| 379 | 【看得出这实际上是一个环。】 | 390 | 【看得出这实际上是一个环。】 |
| @@ -401,14 +412,16 @@ C-/,你会把以前的命令也依次撤销。 | |||
| 401 | 412 | ||
| 402 | >> 用 C-k 将这一行移除,然后输入 C-/ ,它会再次出现。 | 413 | >> 用 C-k 将这一行移除,然后输入 C-/ ,它会再次出现。 |
| 403 | 414 | ||
| 404 | C-_ 也是撤销命令;它的作用跟 C-/ 一样,但是它比较容易多次输入。在 | 415 | C-_ 也是撤销命令;它的作用跟 C-/ 一样,但是它比较容易多次输入。在某些 |
| 405 | 某些终端上,输入 C-/ 实际上向 Emacs 发送的是 C-_ 。 | 416 | 终端上,你可以不 shift 键(即 C--)。在些终端上,输入 C-/ 实际上向 |
| 406 | 另外, C-x u 和 C-/ 完全一样,但是按起来有些麻烦。 | 417 | Emacs 送的是 C-_ 。外, C-x u 和 C-/ 完全一样,但是按起来有些麻烦。 |
| 407 | 418 | ||
| 408 | 数字参数对于 C-/ 、 C-_ 和 C-x u 的意义是执行撤销的重复次数。 | 419 | 数字参数对于 C-/ 、 C-_ 和 C-x u 的意义是执行撤销的重复次数。 |
| 409 | 420 | ||
| 421 | 你可以撤销文字的删除,就像你能撤销文字的移除一样。删除与移除的区别只在 | ||
| 422 | 于你是否能召回被影响的文字;对于撤销来说没有区别。 | ||
| 410 | 423 | ||
| 411 | * 文件(FILE) | 424 | * 文件(FILES) |
| 412 | -------------- | 425 | -------------- |
| 413 | 426 | ||
| 414 | 想保存工作成果就要记得存盘,否则一旦退出 Emacs 你编辑的文字就会丢失。要 | 427 | 想保存工作成果就要记得存盘,否则一旦退出 Emacs 你编辑的文字就会丢失。要 |
| @@ -424,7 +437,7 @@ C-_ 也是撤销命令;它的作用跟 C-/ 一样,但是它比较容易多 | |||
| 424 | 在屏幕的下方,你应该能够看到头部有短线“-”的一行,行首通常是一些诸如“ | 437 | 在屏幕的下方,你应该能够看到头部有短线“-”的一行,行首通常是一些诸如“ |
| 425 | -:--- TUTORIAL.cn”的文字,这些文字代表了你当前正在访问的文件。比如你现 | 438 | -:--- TUTORIAL.cn”的文字,这些文字代表了你当前正在访问的文件。比如你现 |
| 426 | 在正在访问的文件是对 Emacs 快速指南的一份临时拷贝,叫做“TUTORIAL.cn”。 | 439 | 在正在访问的文件是对 Emacs 快速指南的一份临时拷贝,叫做“TUTORIAL.cn”。 |
| 427 | 每当Emacs 寻找到一个文件,文件名就会出现在这个位置。 | 440 | 每当 Emacs 寻找到一个文件,文件名就会出现在这个位置。 |
| 428 | 441 | ||
| 429 | 寻找文件的命令有一个特点,那就是你必须给出文件名。我们称这个命令“读入 | 442 | 寻找文件的命令有一个特点,那就是你必须给出文件名。我们称这个命令“读入 |
| 430 | 了一个参数”(在这里,这个参数显然就是文件名)。在你输入这条命令之后: | 443 | 了一个参数”(在这里,这个参数显然就是文件名)。在你输入这条命令之后: |
| @@ -435,14 +448,14 @@ Emacs 会提示你输入文件名。你输入的文件名会出现在屏幕最 | |||
| 435 | 行被称为小缓冲(minibuffer),在小缓冲里你可以使用通常的 Emacs 编辑命令 | 448 | 行被称为小缓冲(minibuffer),在小缓冲里你可以使用通常的 Emacs 编辑命令 |
| 436 | 来编辑文件名。 | 449 | 来编辑文件名。 |
| 437 | 450 | ||
| 438 | 在小缓冲里输入文件名(其实输入其它东西也一样)时可以用 C-g 取消。 | 451 | 在小缓冲里输入文件名(其实输入其它东西也一样)时可以用 C-g 取消这个命令。 |
| 439 | 452 | ||
| 440 | >> 输入 C-x C-f,然后输入 C-g | 453 | >> 输入 C-x C-f,然后输入 C-g |
| 441 | 这会关掉小缓冲,同时也会取消使用小缓冲的 C-x C-f 命令。 | 454 | 这会关掉小缓冲,同时也会取消使用小缓冲的 C-x C-f 命令。 |
| 442 | 当然了,你也没有找任何文件。 | 455 | 当然了,你也没有找到任何文件。 |
| 443 | 456 | ||
| 444 | 用 <Return> 结束文件名的输入。之后,小缓冲会消失,C-x C-f 将会去寻找你 | 457 | 当你写完要寻找文件名时, <Return> 结束文件名的输入。之后,小缓冲会 |
| 445 | 定的文。冲在 C-x C-f 也失。 | 458 | C-x C-f 指的。 |
| 446 | 459 | ||
| 447 | 文件被显示在了屏幕上,你可以开始编辑了。存盘用这条命令: | 460 | 文件被显示在了屏幕上,你可以开始编辑了。存盘用这条命令: |
| 448 | 461 | ||
| @@ -453,20 +466,21 @@ Emacs 会提示你输入文件名。你输入的文件名会出现在屏幕最 | |||
| 453 | 【对许多人来说,这是一个烦人的特性,关掉文件备份可以用如下命令: | 466 | 【对许多人来说,这是一个烦人的特性,关掉文件备份可以用如下命令: |
| 454 | M-x customize-variable <Return> make-backup-files <Return>】 | 467 | M-x customize-variable <Return> make-backup-files <Return>】 |
| 455 | 468 | ||
| 456 | 存盘结束后,Emacs 会显示写入文件的文件名。你最好养成经常存盘的习惯,这 | 469 | 存盘结束后,Emacs 会显示写入文件的文件名。【你最好养成经常存盘的习惯, |
| 457 | 可以减少系统崩溃和死机给你带来的损失(也可参见下面的“自动保存”一节)。 | 470 | 这可以减少系统崩溃和死机给你带来的损失(也可参见下面的“自动保存”一 |
| 471 | 节)。】 | ||
| 458 | 472 | ||
| 459 | >> 输入 C-x C-s TUTORIAL.cn <Return> 。 | 473 | >> 输入 C-x C-s TUTORIAL.cn <Return> 。 |
| 460 | 这将会把该指南保存为一个名为 TUTORIAL.cn 的文件,并且在屏幕的下方显 | 474 | 这将会把该指南保存为一个名为 TUTORIAL.cn 的文件,并且在屏幕的下方显 |
| 461 | 示一条消息:“Wrote ...TUTORIAL.cn”。 | 475 | 示一条消息:“Wrote TUTORIAL.cn”。 |
| 462 | 476 | ||
| 463 | 你不但可以寻找一个已有的文件来查看或编辑,还可以寻找一个不存在的文件。 | 477 | 你不但可以寻找一个已有的文件来查看或编辑,还可以寻找一个不存在的文件。 |
| 464 | 实际上这正是 Emacs 创建新文件的方法:找到不存在的新文件。事 | 478 | 实际上这正是 Emacs 创建新文件的方法:找到不存在的新文件,空 |
| 465 | 在存盘的时候,Emacs 才会真正创建这个文件。而在这之后的一切就跟编辑一个 | 479 | 的,然你就可以开始插入文。事实上,只有存盘的时候,Emacs 才会真正 |
| 466 | 已有文件没有区别了。 | 480 | 建这个文件。而在这之后的一切就编辑一个有文件没有区别了。 |
| 467 | 481 | ||
| 468 | 482 | ||
| 469 | * 缓冲区(BUFFER) | 483 | * 缓冲区(BUFFERS) |
| 470 | ------------------ | 484 | ------------------ |
| 471 | 485 | ||
| 472 | 你可以用 C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要 | 486 | 你可以用 C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要 |
| @@ -495,7 +509,7 @@ C-x C-f 是一种办法。不过还有一个更简单的办法,那就是用 C- | |||
| 495 | 然后输入 C-x b TUTORIAL.cn <Return> 回到这里。 | 509 | 然后输入 C-x b TUTORIAL.cn <Return> 回到这里。 |
| 496 | 510 | ||
| 497 | 大多数情况下,缓冲区与跟其对应的文件是同名的(不包括目录名),不过这也 | 511 | 大多数情况下,缓冲区与跟其对应的文件是同名的(不包括目录名),不过这也 |
| 498 | 不是绝对的。用 C-x C-b 得到的缓冲区列表总是显示缓冲区名。 | 512 | 不是绝对的。因此用 C-x C-b 得到的缓冲区列表总是显示缓冲区名与文件名。 |
| 499 | 513 | ||
| 500 | 缓冲区未必有对应文件。显示缓冲区列表的缓冲区(叫做“*Buffer List*”)就 | 514 | 缓冲区未必有对应文件。显示缓冲区列表的缓冲区(叫做“*Buffer List*”)就 |
| 501 | 是这样。这个 TUTORIAL.cn 缓冲区起初没有对应的文件,但是现在有了,因为 | 515 | 是这样。这个 TUTORIAL.cn 缓冲区起初没有对应的文件,但是现在有了,因为 |
| @@ -516,8 +530,8 @@ C-x C-f 是一种办法。不过还有一个更简单的办法,那就是用 C- | |||
| 516 | 530 | ||
| 517 | C-x s 保存多个缓冲区 | 531 | C-x s 保存多个缓冲区 |
| 518 | 532 | ||
| 519 | C-x s 会找出所有已被修改但尚未存盘的缓冲区,然后向你逐个询问:是否需要 | 533 | C-x s 会找出所有访问文件的、且已被修改但尚未存盘的缓冲区,然后向你逐个 |
| 520 | 存盘? | 534 | 询问:是需要盘此文件? |
| 521 | 535 | ||
| 522 | >> 插入一行文字,然后输入 C-x s。 | 536 | >> 插入一行文字,然后输入 C-x s。 |
| 523 | 它应该会问你,是否要储存名为 TUTORIAL.cn 的缓冲区? | 537 | 它应该会问你,是否要储存名为 TUTORIAL.cn 的缓冲区? |
| @@ -554,7 +568,9 @@ C-x 的扩展命令有很多,下面列出的是你已经学过的: | |||
| 554 | 568 | ||
| 555 | C-x C-f 寻找文件。 | 569 | C-x C-f 寻找文件。 |
| 556 | C-x C-s 保存文件。 | 570 | C-x C-s 保存文件。 |
| 571 | C-x s 保存多个缓冲区。 | ||
| 557 | C-x C-b 列出缓冲区。 | 572 | C-x C-b 列出缓冲区。 |
| 573 | C-x b 切换缓冲区。 | ||
| 558 | C-x C-c 离开 Emacs。 | 574 | C-x C-c 离开 Emacs。 |
| 559 | C-x 1 关掉其它所有窗格,只保留一个。 | 575 | C-x 1 关掉其它所有窗格,只保留一个。 |
| 560 | C-x u 撤销。 | 576 | C-x u 撤销。 |
| @@ -608,10 +624,10 @@ replace-string(字符串替换)这个命令,它会把一个字符串替换 | |||
| 608 | 624 | ||
| 609 | 状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。 | 625 | 状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。 |
| 610 | 626 | ||
| 611 | 你应该知道文件名的意思吧?就是你找到的那个文件嘛。-NN%-- 显示的是光标在 | 627 | 你应该知道文件名的意思吧?就是你找到的那个文件嘛。NN% 显示的是光标在 |
| 612 | 全文中的位置。如果位于文件的开头,那么就显示 --Top-- 而不是 --00%--;如 | 628 | 全文中的位置。如果位于文件的开头,那么就显示 Top 而不是 0%;如 |
| 613 | 果位于文件的末尾,就显示 --Bot--。如果文件很小,一屏就足以显示全部内容, | 629 | 果位于文件的末尾,就显示 Bot。如果文件很小,一屏就足以显示全部内容, |
| 614 | 那么状态栏会显示 --All--。 | 630 | 那么状态栏会显示 All。 |
| 615 | 631 | ||
| 616 | “L” 和其后的数字给出了光标所在行的行号。 | 632 | “L” 和其后的数字给出了光标所在行的行号。 |
| 617 | 633 | ||
| @@ -723,7 +739,10 @@ C-s 是向前搜索,C-r 是向后搜索。不过手别这么快!别着急试 | |||
| 723 | * 多窗格(MULTIPLE WINDOWS) | 739 | * 多窗格(MULTIPLE WINDOWS) |
| 724 | ---------------------------- | 740 | ---------------------------- |
| 725 | 741 | ||
| 726 | Emacs 的迷人之处很多,能够在屏幕上同时显示多个窗格就是其中之一。 | 742 | Emacs 的迷人之处很多,能够在屏幕上同时显示多个窗格就是其中之一。(请注 |
| 743 | 意在 Emacs 里的“窗口(frame)”与“窗格(window)”的定义可能与其他应用程 | ||
| 744 | 序不同,详见Emacs 手册里的术语表。)【另见此教程末尾的翻译章节的术语译 | ||
| 745 | 词对照表。】 | ||
| 727 | 746 | ||
| 728 | >> 移动光标到这一行,然后输入 C-l C-l。 | 747 | >> 移动光标到这一行,然后输入 C-l C-l。 |
| 729 | 748 | ||
| @@ -782,13 +801,13 @@ Emacs 可以创建多个窗口。窗口由许多窗格以及菜单、滚动条 | |||
| 782 | 在图形界面下,多个窗口可以同时显示出来。在文本终端中,只能同时显示一个 | 801 | 在图形界面下,多个窗口可以同时显示出来。在文本终端中,只能同时显示一个 |
| 783 | 窗口。 | 802 | 窗口。 |
| 784 | 803 | ||
| 785 | >> 输入 M-x make-frame <Return>。 | 804 | >> 输入 C-x 5 2。 |
| 786 | 可以看到一个新的窗口出现在了你的屏幕上。 | 805 | 可以看到一个新的窗口出现在了你的屏幕上。 |
| 787 | 806 | ||
| 788 | 你可以在新的窗口里做最初的窗口里可以做的任何事情。第一个窗口没有什么特 | 807 | 你可以在新的窗口里做最初的窗口里可以做的任何事情。第一个窗口没有什么特 |
| 789 | 别的。 | 808 | 别的。 |
| 790 | 809 | ||
| 791 | >> 输入 M-x delete-frame <Return>. | 810 | >> 输入 C-x 5 0。 |
| 792 | 这个命令将会关闭选中的窗口。 | 811 | 这个命令将会关闭选中的窗口。 |
| 793 | 812 | ||
| 794 | 你也可以通过图形系统来关闭某个窗口(通常是在窗口上面的某个角落里的一个 | 813 | 你也可以通过图形系统来关闭某个窗口(通常是在窗口上面的某个角落里的一个 |
| @@ -853,9 +872,9 @@ Emacs 可以创建多个窗口。窗口由许多窗格以及菜单、滚动条 | |||
| 853 | 872 | ||
| 854 | 还有一些其它有用的 C-h 命令: | 873 | 还有一些其它有用的 C-h 命令: |
| 855 | 874 | ||
| 856 | C-h f 解释一个数。需要输入数名。 | 875 | C-h x 解释一个令。需要输入令名。 |
| 857 | 876 | ||
| 858 | >> 试试看,输入 C-h f previous-line <Return>。 | 877 | >> 试试看,输入 C-h x previous-line <Return>。 |
| 859 | Emacs 会给出它所知道的所有有关“实现 C-p 命令功能的函数”的信息。 | 878 | Emacs 会给出它所知道的所有有关“实现 C-p 命令功能的函数”的信息。 |
| 860 | 879 | ||
| 861 | C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来“定制 Emacs 的行 | 880 | C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来“定制 Emacs 的行 |
| @@ -905,15 +924,15 @@ Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以 | |||
| 905 | 924 | ||
| 906 | Emacs 使用手册里还有许许多多的精彩功能等着你来了解。 | 925 | Emacs 使用手册里还有许许多多的精彩功能等着你来了解。 |
| 907 | 926 | ||
| 908 | * 安装包裹(INSTALLING PACKAGES) | 927 | * 安装软件包(INSTALLING PACKAGES) |
| 909 | --------------------------- | 928 | --------------------------- |
| 910 | 929 | ||
| 911 | Emacs 社区著作了许多持有扩展性的包裹(packages),其中包括对各种语言的 | 930 | Emacs 社区著作了许多持有扩展性的软件包(packages),其中包括对各种语言 |
| 912 | 支持、色彩鲜艳的主题、用于集成外部程序的包裹,等等。 | 931 | 的支持、色彩鲜艳的主题、用于集成外部程序的软件包,等等。 |
| 913 | 932 | ||
| 914 | 使用 M-x list-packages 便可浏览的包裹。这个命令显示的界面中可以安 | 933 | 使用 M-x list-packages 便可浏览所有装的软件包。这个命令显示的界面 |
| 915 | 装和卸载包裹,以及查看包裹的简介。Emacs 使用手册中有对包管理更的 | 934 | 中可以安装和卸载软件包,以及查看软件包的简介。Emacs 使用手册中有对 |
| 916 | 介绍。 | 935 | 包管理更详细的介绍。 |
| 917 | 936 | ||
| 918 | * 总结(CONCLUSION) | 937 | * 总结(CONCLUSION) |
| 919 | -------------------- | 938 | -------------------- |
| @@ -929,6 +948,7 @@ Emacs 社区著作了许多持有扩展性的包裹(packages),其中包括 | |||
| 929 | 948 | ||
| 930 | 翻译:孙一江 <sunyijiang@gmail.com> | 949 | 翻译:孙一江 <sunyijiang@gmail.com> |
| 931 | 维护:薛富侨 <xfq.free@gmail.com> | 950 | 维护:薛富侨 <xfq.free@gmail.com> |
| 951 | 余睿杰 <ruijie@netyu.xyz> | ||
| 932 | 校对:水木社区(www.newsmth.net)Emacs 板众多网友及众多 Emacs 中文用户 | 952 | 校对:水木社区(www.newsmth.net)Emacs 板众多网友及众多 Emacs 中文用户 |
| 933 | 953 | ||
| 934 | Emacs 快速指南(Tutorial)早有两个刘昭宏的中文译本,繁简各一。其简体版本 | 954 | Emacs 快速指南(Tutorial)早有两个刘昭宏的中文译本,繁简各一。其简体版本 |
diff --git a/etc/tutorials/TUTORIAL.translators b/etc/tutorials/TUTORIAL.translators index 222703cdb9f..30e169d263f 100644 --- a/etc/tutorials/TUTORIAL.translators +++ b/etc/tutorials/TUTORIAL.translators | |||
| @@ -8,6 +8,7 @@ Maintainer: Ognyan Kulev <ogi@tower.3.bg> | |||
| 8 | * TUTORIAL.cn: | 8 | * TUTORIAL.cn: |
| 9 | Author: Sun Yijiang <sunyijiang@gmail.com> | 9 | Author: Sun Yijiang <sunyijiang@gmail.com> |
| 10 | Maintainer: Xue Fuqiao <xfq.free@gmail.com> | 10 | Maintainer: Xue Fuqiao <xfq.free@gmail.com> |
| 11 | Ruijie Yu <ruijie@netyu.xyz> | ||
| 11 | 12 | ||
| 12 | * TUTORIAL.cs: | 13 | * TUTORIAL.cs: |
| 13 | Author: Milan Zamazal <pdm@zamazal.org> | 14 | Author: Milan Zamazal <pdm@zamazal.org> |
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 65bb226acb1..0c5cd82ac62 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el | |||
| @@ -2266,8 +2266,9 @@ had been enabled." | |||
| 2266 | "Upgrade package NAME if a newer version exists. | 2266 | "Upgrade package NAME if a newer version exists. |
| 2267 | 2267 | ||
| 2268 | Currently, packages which are part of the Emacs distribution | 2268 | Currently, packages which are part of the Emacs distribution |
| 2269 | cannot be upgraded that way. Use `i' after `M-x list-packages' to | 2269 | cannot be upgraded that way. To enable upgrades of such a |
| 2270 | upgrade to an ELPA version first." | 2270 | package using this command, first upgrade the package to a |
| 2271 | newer version from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'." | ||
| 2271 | (interactive | 2272 | (interactive |
| 2272 | (list (completing-read | 2273 | (list (completing-read |
| 2273 | "Upgrade package: " (package--upgradeable-packages) nil t))) | 2274 | "Upgrade package: " (package--upgradeable-packages) nil t))) |
| @@ -2304,7 +2305,11 @@ If QUERY, ask the user before upgrading packages. When called | |||
| 2304 | interactively, QUERY is always true. | 2305 | interactively, QUERY is always true. |
| 2305 | 2306 | ||
| 2306 | Currently, packages which are part of the Emacs distribution are | 2307 | Currently, packages which are part of the Emacs distribution are |
| 2307 | not upgraded that way. Use `i' after `M-x list-packages' to | 2308 | not upgraded by this command. To enable upgrading such a package |
| 2309 | using this command, first upgrade the package to a newer version | ||
| 2310 | from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'. | ||
| 2311 | |||
| 2312 | Use `i' after `M-x list-packages' to | ||
| 2308 | upgrade to an ELPA version first." | 2313 | upgrade to an ELPA version first." |
| 2309 | (interactive (list (not noninteractive))) | 2314 | (interactive (list (not noninteractive))) |
| 2310 | (package-refresh-contents) | 2315 | (package-refresh-contents) |
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 353100ca1ce..4971ed0b7c2 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el | |||
| @@ -80,6 +80,8 @@ | |||
| 80 | (declare-function treesit-node-prev-sibling "treesit.c") | 80 | (declare-function treesit-node-prev-sibling "treesit.c") |
| 81 | (declare-function treesit-node-first-child-for-pos "treesit.c") | 81 | (declare-function treesit-node-first-child-for-pos "treesit.c") |
| 82 | (declare-function treesit-node-next-sibling "treesit.c") | 82 | (declare-function treesit-node-next-sibling "treesit.c") |
| 83 | (declare-function treesit-parser-set-included-ranges "treesit.c") | ||
| 84 | (declare-function treesit-query-compile "treesit.c") | ||
| 83 | 85 | ||
| 84 | ;;; Custom variables | 86 | ;;; Custom variables |
| 85 | 87 | ||
| @@ -971,24 +973,25 @@ if `c-ts-mode-emacs-sources-support' is non-nil." | |||
| 971 | (or (treesit-add-log-current-defun) | 973 | (or (treesit-add-log-current-defun) |
| 972 | (c-ts-mode--defun-name (c-ts-mode--emacs-defun-at-point)))) | 974 | (c-ts-mode--defun-name (c-ts-mode--emacs-defun-at-point)))) |
| 973 | 975 | ||
| 974 | ;;; FOR_EACH_TAIL fix | 976 | ;;; Support for FOR_EACH_* macros |
| 975 | ;; | 977 | ;; |
| 976 | ;; FOR_EACH_TAIL (and FOR_EACH_TAIL_SAFE) followed by a unbracketed | 978 | ;; FOR_EACH_TAIL, FOR_EACH_TAIL_SAFE, FOR_EACH_FRAME etc., followed by |
| 977 | ;; body will mess up the parser, which parses the thing as a function | 979 | ;; an unbracketed body will mess up the parser, which parses the thing |
| 978 | ;; declaration. We "fix" it by adding a shadow parser, emacs-c (which | 980 | ;; as a function declaration. We "fix" it by adding a shadow parser |
| 979 | ;; is just c but under a different name). We use emacs-c to find each | 981 | ;; for a language 'emacs-c' (which is just 'c' but under a different |
| 980 | ;; FOR_EACH_TAIL with a unbracketed body, and set the ranges of the C | 982 | ;; name). We use 'emacs-c' to find each FOR_EACH_* macro with a |
| 981 | ;; parser so that it skips those FOR_EACH_TAIL's. Note that we only | 983 | ;; unbracketed body, and set the ranges of the C parser so that it |
| 982 | ;; ignore FOR_EACH_TAIL's with a unbracketed body. Those with a | 984 | ;; skips those FOR_EACH_*'s. Note that we only ignore FOR_EACH_*'s |
| 983 | ;; bracketed body parses more or less fine. | 985 | ;; with a unbracketed body. Those with a bracketed body parse more |
| 986 | ;; or less fine. | ||
| 984 | 987 | ||
| 985 | (defvar c-ts-mode--for-each-tail-regexp | 988 | (defvar c-ts-mode--for-each-tail-regexp |
| 986 | (rx "FOR_EACH_" (or "TAIL" "TAIL_SAFE" "ALIST_VALUE" | 989 | (rx "FOR_EACH_" (or "TAIL" "TAIL_SAFE" "ALIST_VALUE" |
| 987 | "LIVE_BUFFER" "FRAME")) | 990 | "LIVE_BUFFER" "FRAME")) |
| 988 | "A regexp matching all the FOR_EACH_TAIL variants.") | 991 | "A regexp matching all the variants of the FOR_EACH_* macro.") |
| 989 | 992 | ||
| 990 | (defun c-ts-mode--for-each-tail-body-matcher (_n _p bol &rest _) | 993 | (defun c-ts-mode--for-each-tail-body-matcher (_n _p bol &rest _) |
| 991 | "A matcher that matches the first line after a FOR_EACH_TAIL. | 994 | "A matcher that matches the first line after a FOR_EACH_* macro. |
| 992 | For BOL see `treesit-simple-indent-rules'." | 995 | For BOL see `treesit-simple-indent-rules'." |
| 993 | (when c-ts-mode-emacs-sources-support | 996 | (when c-ts-mode-emacs-sources-support |
| 994 | (save-excursion | 997 | (save-excursion |
| @@ -1005,10 +1008,10 @@ For BOL see `treesit-simple-indent-rules'." | |||
| 1005 | @for-each-tail) | 1008 | @for-each-tail) |
| 1006 | (:match ,c-ts-mode--for-each-tail-regexp | 1009 | (:match ,c-ts-mode--for-each-tail-regexp |
| 1007 | @_name)))) | 1010 | @_name)))) |
| 1008 | "Query that finds the FOR_EACH_TAIL with a unbracketed body.") | 1011 | "Query that finds a FOR_EACH_* macro with an unbracketed body.") |
| 1009 | 1012 | ||
| 1010 | (defvar-local c-ts-mode--for-each-tail-ranges nil | 1013 | (defvar-local c-ts-mode--for-each-tail-ranges nil |
| 1011 | "Ranges covering all the FOR_EACH_TAIL's in the buffer.") | 1014 | "Ranges covering all the FOR_EACH_* macros in the buffer.") |
| 1012 | 1015 | ||
| 1013 | (defun c-ts-mode--reverse-ranges (ranges beg end) | 1016 | (defun c-ts-mode--reverse-ranges (ranges beg end) |
| 1014 | "Reverse RANGES and return the new ranges between BEG and END. | 1017 | "Reverse RANGES and return the new ranges between BEG and END. |
| @@ -1031,7 +1034,7 @@ parser parse the whole buffer." | |||
| 1031 | (nreverse new-ranges)))) | 1034 | (nreverse new-ranges)))) |
| 1032 | 1035 | ||
| 1033 | (defun c-ts-mode--emacs-set-ranges (beg end) | 1036 | (defun c-ts-mode--emacs-set-ranges (beg end) |
| 1034 | "Set ranges for the C parser to skip some FOR_EACH_TAIL's. | 1037 | "Set ranges for the C parser to skip some FOR_EACH_* macros. |
| 1035 | BEG and END are described in `treesit-range-rules'." | 1038 | BEG and END are described in `treesit-range-rules'." |
| 1036 | (let* ((c-parser (treesit-parser-create 'c)) | 1039 | (let* ((c-parser (treesit-parser-create 'c)) |
| 1037 | (old-ranges c-ts-mode--for-each-tail-ranges) | 1040 | (old-ranges c-ts-mode--for-each-tail-ranges) |
| @@ -1158,6 +1161,8 @@ BEG and END are described in `treesit-range-rules'." | |||
| 1158 | ( assignment constant escape-sequence label literal) | 1161 | ( assignment constant escape-sequence label literal) |
| 1159 | ( bracket delimiter error function operator property variable)))) | 1162 | ( bracket delimiter error function operator property variable)))) |
| 1160 | 1163 | ||
| 1164 | (defvar treesit-load-name-override-list) | ||
| 1165 | |||
| 1161 | ;;;###autoload | 1166 | ;;;###autoload |
| 1162 | (define-derived-mode c-ts-mode c-ts-base-mode "C" | 1167 | (define-derived-mode c-ts-mode c-ts-base-mode "C" |
| 1163 | "Major mode for editing C, powered by tree-sitter. | 1168 | "Major mode for editing C, powered by tree-sitter. |
| @@ -1179,7 +1184,7 @@ in your configuration." | |||
| 1179 | 1184 | ||
| 1180 | (when (treesit-ready-p 'c) | 1185 | (when (treesit-ready-p 'c) |
| 1181 | ;; Add a fake "emacs-c" language which is just C. Used for | 1186 | ;; Add a fake "emacs-c" language which is just C. Used for |
| 1182 | ;; skipping FOR_EACH_TAIL, see `c-ts-mode--emacs-set-ranges'. | 1187 | ;; skipping FOR_EACH_* macros, see `c-ts-mode--emacs-set-ranges'. |
| 1183 | (setf (alist-get 'emacs-c treesit-load-name-override-list) | 1188 | (setf (alist-get 'emacs-c treesit-load-name-override-list) |
| 1184 | '("libtree-sitter-c" "tree_sitter_c")) | 1189 | '("libtree-sitter-c" "tree_sitter_c")) |
| 1185 | ;; If Emacs source support is enabled, make sure emacs-c parser is | 1190 | ;; If Emacs source support is enabled, make sure emacs-c parser is |
| @@ -1202,7 +1207,7 @@ in your configuration." | |||
| 1202 | (setq-local treesit-defun-tactic 'top-level) | 1207 | (setq-local treesit-defun-tactic 'top-level) |
| 1203 | (treesit-major-mode-setup) | 1208 | (treesit-major-mode-setup) |
| 1204 | 1209 | ||
| 1205 | ;; Emacs source support: handle DEFUN and FOR_EACH_TAIL gracefully. | 1210 | ;; Emacs source support: handle DEFUN and FOR_EACH_* gracefully. |
| 1206 | (when c-ts-mode-emacs-sources-support | 1211 | (when c-ts-mode-emacs-sources-support |
| 1207 | (setq-local add-log-current-defun-function | 1212 | (setq-local add-log-current-defun-function |
| 1208 | #'c-ts-mode--emacs-current-defun-name) | 1213 | #'c-ts-mode--emacs-current-defun-name) |
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index ea4977254ce..160a3f42cf8 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el | |||
| @@ -468,7 +468,10 @@ compilation and evaluation time conflicts." | |||
| 468 | (save-excursion | 468 | (save-excursion |
| 469 | (goto-char (c-point 'iopl)) | 469 | (goto-char (c-point 'iopl)) |
| 470 | (and | 470 | (and |
| 471 | (eq (char-after) ?\[) | 471 | (eq (save-excursion |
| 472 | (skip-chars-forward " \t\n") | ||
| 473 | (char-after)) | ||
| 474 | ?\[) | ||
| 472 | (save-excursion | 475 | (save-excursion |
| 473 | (c-go-list-forward) | 476 | (c-go-list-forward) |
| 474 | (and (eq (char-before) ?\]) | 477 | (and (eq (char-before) ?\]) |