aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2023-04-28 12:14:26 -0400
committerEli Zaretskii2023-04-28 12:14:26 -0400
commite155df7da785df732d34c9437abd24252c5be9ae (patch)
treef149e17506e6afd34fca75ca90650ae214fcce9d
parent6ebce84ff2b4e488fbffaa0f7cc2b06580557bf7 (diff)
parent212e30f6789cd080a9428958872ffcaab6bf248a (diff)
downloademacs-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.texi33
-rw-r--r--etc/NEWS.297
-rw-r--r--etc/tutorials/TUTORIAL.cn152
-rw-r--r--etc/tutorials/TUTORIAL.translators1
-rw-r--r--lisp/emacs-lisp/package.el11
-rw-r--r--lisp/progmodes/c-ts-mode.el37
-rw-r--r--lisp/progmodes/csharp-mode.el5
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
1275between the Eglot and language server. In many cases, this will 1275between the Eglot and language server. In many cases, this will
1276indicate the problems or at least provide a hint. 1276indicate 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
1281A common and easy-to-fix cause of performance problems is the length 1287A common and easy-to-fix cause of performance problems is the length
1282of the Eglot events buffer because it represent additional work that 1288of the Eglot events buffer because it represent additional work that
1283Eglot must do. After verifying Eglot is operating correctly but 1289Eglot 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
1298To install the latest Eglot on an Emacs version that does not bundle 1304To install the latest Eglot in an Emacs version that does not bundle
1299Eglot, use @kbd{M-x package-install}. 1305Eglot, use @kbd{M-x package-install}.
1300 1306
1301Often, a newer Eglot version exists that has fixed a longstanding bug, 1307Often, a newer Eglot version exists that has fixed a longstanding bug,
1302has more LSP features, or just better support for a particular 1308has more LSP features, or just better supports a particular language
1303language server. Recent Eglot versions can self-update via the 1309server. Recent Eglot versions can self-update via the command
1304command @kbd{M-x eglot-update}. This will replace any currently 1310@kbd{M-x eglot-update}. This will replace any currently installed
1305installed version with the newest one available from the ELPA archives 1311version with the newest one available from the ELPA archives
1306configured in @code{package-archives}. 1312configured in @code{package-archives}.
1307 1313
1308You may update though other methods, such as @code{package-install}, 1314You 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 1316use-package User Manual}), @code{package-install},
1311commands, as some may not work in exactly the same way across Emacs 1317@code{list-packages} or the newer @code{package-upgrade}
1312versions, meaning your configuration may be not portable. 1318(@pxref{Packages,,, emacs, GNU Emacs Manual}). However, do read the
1319docstrings of the command you intend to use before you use it, as some
1320of them may not work in exactly the same way across Emacs versions,
1321meaning 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'.
1847This command allows you to upgrade packages without using 'M-x 1847This command allows you to upgrade packages without using 'M-x
1848list-packages'. 1848list-packages'. A package that comes with the Emacs distribution can
1849only be upgraded after you install, once, a newer version from ELPA
1850via the package-menu displayed by 'list-packages'.
1849 1851
1850+++ 1852+++
1851*** New command 'package-upgrade-all'. 1853*** New command 'package-upgrade-all'.
1852This command allows upgrading all packages without any queries. 1854This command allows upgrading all packages without any queries.
1855A package that comes with the Emacs distribution will only be upgraded
1856by this command after you install, once, a newer version of that
1857package 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,如果你没有
31META、EDIT 或 ALT 键那么就先按 <ESC> 再按 v)。 35META、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,然后输入数字作为参数,最后再输入命令。如果你有
171EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不放,然后输入数字。不 176META(或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 可以有多个“窗格”,每个窗格显示不同的文字。后面
350C-k 会把两行以及它们的换行符移除;而如果只是输入 C-k 两次显然不是这个结 360C-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 就可以把它们都召回。
372C-y 可以召回最近一次移除的内容,那如何召回前几次移除的内容呢?它们当然 383C-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
404C-_ 也是撤销命令;它的作用跟 C-/ 一样,但是它比较容易多次输入。在 415C-_ 也是撤销命令;它的作用跟 C-/ 一样,但是它比较容易多次输入。在某些
405某些终端上,输入 C-/ 实际上向 Emacs 发送的是 C-_ 。 416终端上,你可以不 shift 键(即 C--)。在些终端上,输入 C-/ 实际上向
406另外, C-x u 和 C-/ 完全一样,但是按起来有些麻烦。 417Emacs 送的是 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 458C-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
519C-x s 会找出所有已被修改但尚未存盘的缓冲区,然后向你逐个询问:是否需要 533C-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
726Emacs 的迷人之处很多,能够在屏幕上同时显示多个窗格就是其中之一。 742Emacs 的迷人之处很多,能够在屏幕上同时显示多个窗格就是其中之一。(请注
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
861C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来“定制 Emacs 的行 880C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来“定制 Emacs 的行
@@ -905,15 +924,15 @@ Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以
905 924
906Emacs 使用手册里还有许许多多的精彩功能等着你来了解。 925Emacs 使用手册里还有许许多多的精彩功能等着你来了解。
907 926
908* 安装包(INSTALLING PACKAGES) 927* 安装软件包(INSTALLING PACKAGES)
909--------------------------- 928---------------------------
910 929
911Emacs 社区著作了许多持有扩展性的包(packages),其中包括对各种语言 930Emacs 社区著作了许多持有扩展性的软件包(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
934Emacs 快速指南(Tutorial)早有两个刘昭宏的中文译本,繁简各一。其简体版本 954Emacs 快速指南(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:
9Author: Sun Yijiang <sunyijiang@gmail.com> 9Author: Sun Yijiang <sunyijiang@gmail.com>
10Maintainer: Xue Fuqiao <xfq.free@gmail.com> 10Maintainer: Xue Fuqiao <xfq.free@gmail.com>
11 Ruijie Yu <ruijie@netyu.xyz>
11 12
12* TUTORIAL.cs: 13* TUTORIAL.cs:
13Author: Milan Zamazal <pdm@zamazal.org> 14Author: 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
2268Currently, packages which are part of the Emacs distribution 2268Currently, packages which are part of the Emacs distribution
2269cannot be upgraded that way. Use `i' after `M-x list-packages' to 2269cannot be upgraded that way. To enable upgrades of such a
2270upgrade to an ELPA version first." 2270package using this command, first upgrade the package to a
2271newer 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
2304interactively, QUERY is always true. 2305interactively, QUERY is always true.
2305 2306
2306Currently, packages which are part of the Emacs distribution are 2307Currently, packages which are part of the Emacs distribution are
2307not upgraded that way. Use `i' after `M-x list-packages' to 2308not upgraded by this command. To enable upgrading such a package
2309using this command, first upgrade the package to a newer version
2310from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'.
2311
2312 Use `i' after `M-x list-packages' to
2308upgrade to an ELPA version first." 2313upgrade 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.
992For BOL see `treesit-simple-indent-rules'." 995For 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.
1035BEG and END are described in `treesit-range-rules'." 1038BEG 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) ?\])