summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2023-04-25 09:57:23 -0400
committerEli Zaretskii <eliz@gnu.org>2023-04-25 09:57:23 -0400
commit095ec506d03b76155b399fd7b23554279b2cfee0 (patch)
tree19d842d92c57cf863e69858bb85e0c1c311c4308
parentf55ac7a74510d68f02d17a034571350f9876017f (diff)
parent524e161a536c1c803f453f286430ba1a4e36694e (diff)
downloademacs-095ec506d03b76155b399fd7b23554279b2cfee0.tar.gz
Merge from origin/emacs-29
524e161a536 Followup to addition of TUTORIAL.fa 76f50df1539 Add Farsi/Persian translation of the tutorial 8eacfaea6d8 Add Mongolian language environments fe8efbb8f75 Document the 'end-session' event on MS-Windows d80f959bede Update to Org 9.6.4-9-g8eb209 98c6cfcbe4a Don't support versioned grammar libraries on MS-Windows 8f71c1546df Accept versioned tree-sitter language grammar files 99add09d5e1 tab-bar-new-tab: inhibit side-window checks 087e8181947 * etc/NEWS: Fix outline level. (Bug#63042) d7f38558c4c ; Improve font selection for Traditional Mongolian 965c5e0231c Fix rendering of Traditional Mongolian script 9a0f10b5f88 Fix line-number-at-pos when POSITION is out of narrowing 4e0f4292aaf ; * etc/tutorials/TUTORIAL: Fix punctuation. dec2ac0c657 Fix exiting Emacs after saving a tutorial # Conflicts: # etc/NEWS
-rw-r--r--doc/lispref/commands.texi11
-rw-r--r--etc/HELLO4
-rw-r--r--etc/NEWS.2922
-rw-r--r--etc/tutorials/TUTORIAL2
-rw-r--r--etc/tutorials/TUTORIAL.fa1169
-rw-r--r--etc/tutorials/TUTORIAL.translators4
-rw-r--r--lisp/international/characters.el10
-rw-r--r--lisp/international/fontset.el2
-rw-r--r--lisp/language/cyrillic.el10
-rw-r--r--lisp/language/misc-lang.el29
-rw-r--r--lisp/org/ob-R.el5
-rw-r--r--lisp/org/ob-js.el5
-rw-r--r--lisp/org/oc.el4
-rw-r--r--lisp/org/org-version.el2
-rw-r--r--lisp/org/org.el23
-rw-r--r--lisp/org/ox-latex.el4
-rw-r--r--lisp/tab-bar.el11
-rw-r--r--lisp/tutorial.el1
-rw-r--r--src/fns.c35
-rw-r--r--src/treesit.c24
20 files changed, 1332 insertions, 45 deletions
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index 30765a7e8f7..cd1745614eb 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -2395,6 +2395,17 @@ as @code{set-language-environment}), use the
;; Get the full localized name of the language
(w32-get-locale-info language-id t)
@end smallexample
+
+@cindex @code{end-session} event
+@item end-session
+This event is generated on MS-Windows when the operating system
+informs Emacs that the user terminated the interactive session, or
+that the system is shutting down. The standard definition of this
+event is to invoke the @code{kill-emacs} command (@pxref{Killing
+Emacs}) so as to shut down Emacs in an orderly fashion; if there are
+unsaved changes, this will produce auto-save files
+(@pxref{Auto-Saving}) that the user can use after restarting the
+session to restore the unsaved edits.
@end table
If one of these events arrives in the middle of a key sequence---that
diff --git a/etc/HELLO b/etc/HELLO
index 25a572e5f1f..a589e69bf03 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -89,7 +89,9 @@ Mathematics ∀ p ∈ world • hello p □
Meetei Mayek (ꯃꯤꯇꯩ ꯃꯌꯦꯛ) ꯈꯨꯔꯨꯝꯖꯔꯤ
Mende Kikakui (𞠀𞠁𞠂) 𞠛𞠉
Modi (𑘦𑘻𑘚𑘲) 𑘡𑘦𑘭𑘿𑘎𑘰𑘨
-Mongolian (монгол хэл) Сайн байна уу?
+Mongolian Cyrillic (монгол хэл) Сайн байна уу?
+Mongolian Traditional (ᠮᠣᠩᠭᠣᠯ ᠪᠢᠴᠢᠭ᠋) ᠰᠠᠶᠢᠨ ᠪᠠᠶᠢᠨ᠎ᠠ ᠤᠤ?
+
Northern Thai (ᨣᩣᩴᨾᩮᩬᩥᨦ / ᨽᩣᩈᩣᩃ᩶ᩣ᩠ᨶᨶᩣ) ᩈ᩠ᩅᩢᩔ᩠ᨯᩦᨣᩕᩢ᩠ᨸ
Norwegian (norsk) Hei / God dag
Odia (ଓଡ଼ିଆ) ନମସ୍କାର
diff --git a/etc/NEWS.29 b/etc/NEWS.29
index 62d2fdcd3a4..0eb5940dbca 100644
--- a/etc/NEWS.29
+++ b/etc/NEWS.29
@@ -857,17 +857,17 @@ This value stands for the value of the corresponding attribute of the
inheriting from other faces.
+++
-** New X resource: "borderThickness".
+** New X resource "borderThickness".
This controls the thickness of the external borders of the menu bars
and pop-up menus.
+++
-** New X resource: "inputStyle".
+** New X resource "inputStyle".
This controls the style of the pre-edit and status areas of X input
methods.
+++
-** New X resources: "highlightForeground" and "highlightBackground".
+** New X resources "highlightForeground" and "highlightBackground".
Only in the Lucid build, this controls colors used for highlighted
menu item widgets.
@@ -1546,6 +1546,10 @@ environments are:
Coptic script and language environment
+ Mongolian-traditional script and language environment
+
+ Mongolian-cyrillic language environment
+
---
*** The "Oriya" language environment was renamed to "Odia".
This is to follow the change in the official name of the script. The
@@ -1559,7 +1563,10 @@ Type 'C-u C-h t' to select it in case your language setup does not do
so automatically.
---
-*** New Ukrainian translation of the Emacs Tutorial.
+*** New Ukrainian translation of the Emacs tutorial.
+
+---
+*** New Farsi/Persian translation of the Emacs tutorial.
---
*** New default phonetic input method for the Tamil language environment.
@@ -1587,7 +1594,8 @@ script.
---
*** New input method 'cyrillic-mongolian'.
This input method is for typing in the Mongolian language using the
-Cyrillic script.
+Cyrillic script. It is the default input method for the new
+Mongolian-cyrillic language environment, see above.
* Changes in Specialized Modes and Packages in Emacs 29.1
@@ -2664,7 +2672,7 @@ The old name was confusing, and is now an obsolete function alias.
** Images
+++
-** New commands 'image-crop' and 'image-cut'.
+*** New commands 'image-crop' and 'image-cut'.
These commands allow interactively cropping/cutting the image at
point. The commands are bound to keys 'i c' and 'i x' (respectively)
in the local keymap over images. They rely on external programs, by
@@ -2672,7 +2680,7 @@ default "convert" from ImageMagick, to do the actual cropping/eliding
of the image file.
+++
-*** New commands: 'image-flip-horizontally' and 'image-flip-vertically'.
+*** New commands 'image-flip-horizontally' and 'image-flip-vertically'.
These commands horizontally and vertically flip the image under point,
and are bound to 'i h' and 'i v', respectively.
diff --git a/etc/tutorials/TUTORIAL b/etc/tutorials/TUTORIAL
index e72b972441e..4e6d7b9b287 100644
--- a/etc/tutorials/TUTORIAL
+++ b/etc/tutorials/TUTORIAL
@@ -4,7 +4,7 @@ Emacs commands generally involve the CONTROL key (often labeled CTRL)
or the META key (usually labeled ALT). Rather than writing that
in full each time, we'll use the following abbreviations:
- C-<chr> means hold the CONTROL key while typing the character <chr>
+ C-<chr> means hold the CONTROL key while typing the character <chr>.
Thus, C-f would be: hold the CONTROL key and type f.
M-<chr> means hold the META or ALT key down while typing <chr>.
If there is no META or ALT key, instead press and release the
diff --git a/etc/tutorials/TUTORIAL.fa b/etc/tutorials/TUTORIAL.fa
new file mode 100644
index 00000000000..5c9c0e1941a
--- /dev/null
+++ b/etc/tutorials/TUTORIAL.fa
@@ -0,0 +1,1169 @@
+آموزش Emacs «ایمکس». برای شرایط کپی به پایان مراجعه کنید.
+
+فرمانهای Emacs عموماً شامل کلید CONTROL (گاهی اوقات با برچسب CTRL)
+یا کلید META (معمولا با برچسب ALT) هستند. به جای هر بار بطور کامل نوشتن،
+از خلاصه زیر استفاده خواهیم کرد:
+
+‏ ‪C-<chr>‬ به معنای نگه داشتن کلید CONTROL در حین تایپ کاراکترِ <chr> است.
+ بنابراین، C-f خواهد بود: کلید CONTROL را نگه دارید و f را تایپ کنید.
+‏ ‪M-<chr>‬ یعنی کلید META یا ALT را هنگام تایپ حرفِ <chr> پایین نگه دارید.
+ اگر کلید META، یا ALT وجود ندارد، به جای آن کلید ESC را فشار
+ داده و رها کنید، سپس <حرف> را تایپ کنید.
+ برای کلید ESC می نویسیم <ESC>.
+
+نکته مهم: برای پایان دادن به جلسه Emacs، دو حرف C-x C-c را تایپ کنید.
+برای خروج از یک فرمانِ ناکامل، C-g را تایپ کنید.
+برای توقف آموزش، C-x k و سپس در پاسخ به نشانگر <Return> را تایپ کنید.
+کاراکترهای ">>" در حاشیه سمت راست فرمانهایی را برای شمامشخص می کند. برای مثال:
+
+
+
+[وسط صفحه برای اهداف آموزشی خالی مانده است. ادامه متن در زیر]
+
+
+
+>> اکنون C-v را تایپ کنید (نمایش صفحه بعدی) تا یک صفحه کامل به پایین بروید.
+ (این کار را با نگه داشتن کلید CONTROL و فشار کلید v انجام دهید).
+ از این پس، لطفاً هر زمان که به انتهای صفحه رسیدید، این کار را انجام دهید.
+
+توجه داشته باشید که وقتی یک صفحه کامل را اسکرول می کنید، دو خط همپوشانی دارند؛
+این مقداری تداوم را فراهم می کند تا بتوانید به خواندن متن ادامه دهید.
+
+این یک کپی از متن آموزشی Emacs است که کمی برای شما شخصی سازی شده است.
+بعداً به شما آموزش خواهیم داد که فرمانهای مختلفی را برای تغییر این متن استفاده
+کنید. اگر قبل از اینکه به شماگفته باشیم، این متن را تغییر داده اید،
+نگران نباشید. این کار «ویرایش» نامیده می شود و Emacs برای همین است.
+
+اولین چیزی که باید بدانید این است که چگونه از یک مکان به اطراف حرکت کنید.
+شما از قبل می دانید که با C-v چگونه یک صفحه به جلو حرکت میکند.
+برای حرکت یک صفحه به سمت عقب، M-v را تایپ کنید (کلید META را نگه دارید
+و v را تایپ کنید، یا اگر کلید META، یا ALT را ندارید، ‪ <ESC>v‬را تایپ کنید).
+
+>> چند بار M-v و سپس C-v را تایپ و امتحان کنید.
+
+شما می توانید این متن را با روش های دیگری که میدانید اسکرول کنید.
+
+* خلاصه
+---------
+
+فرمانهای زیر برای مشاهده کل صفحه نمایش مفید هستند:
+
+‏ C-v یک صفحه نمایش به جلو حرکت کنید.
+‏ M-v یک صفحه نمایش به عقب حرکت کنید.
+‏ C-l پاک کردن صفحه و نمایش مجدد تمام متن،
+ جابجایی مکان نما و متن به مرکز صفحه نمایش
+ (این CONTROL-L است، نه CONTROL-1.)
+
+>> مکان‌نما را پیدا کنید و توجه داشته باشید که چه متنی در نزدیکی آن است.
+ سپس C-l را تایپ کنید. دوباره مکان نما را پیدا کنید وتوجه کنید که هنوز
+ نزدیک همان متن است. اما مکان نما، اکنون در مرکز صفحه است.
+ اگر دوباره C-l را فشار دهید، این قطعه متن به بالای صفحه منتقل می شود.
+ مجددا C-l را فشار دهید، صفحه نمایش دوباره به پایین حرکت می کند.
+
+اگر ترمینال شما کلیدهای PageUp و PageDn را دارد، میتوانید برای جابه‌جایی یک
+صفحه کامل از آنها استفاده کنید.
+اما در صورت استفاده از C-v و M-v شما می توانید کارآمدتر ویرایش کنید.
+
+* کنترل مکان نما
+----------------------
+
+حرکت از یک صفحه نمایش به صفحه نمایش دیگر مفید است، اما چگونه
+به مکان خاصی در متنِ روی صفحه حرکت کنید؟
+
+چندین راه وجود دارد که می توانید این کار را انجام دهید. می توانید از
+کلیدهای جهت دار استفاده کنید، اما کارآمدتر است که دستان خود را در وضعیت
+استاندارد نگه دارید. از فرمانهایِ C-p، C-b، C-f و C-n استفاده کنید. این فرمان ها
+معادل چهار کلید جهت دار هستند، مانند:
+
+ سطر قبل، C-p
+ :
+ :
+ به عقب، C-b .... موقعیت مکان نما فعلی .... به جلو، C-f
+ :
+ :
+ خط بعدی، C-n
+
+>> با استفاده از C-n یا C-p مکان نما را به خط وسط نمودار بالا حرکت دهید.
+ سپس C-l را تایپ کنید تا کل نمودار را در مرکز صفحه نمایش ببینید.
+
+
+به راحتی می توانید این حروف را با کلماتی که مخفف آنها هستند به خاطر بسپارید:
+Previous) p) برای قبلی، Next) n) برای بعدی, Backward) b) برای عقب و
+Forward) f) برای جلو. شما همیشه از این فرمانهایِ اصلی تعیین موقعیت مکان نما
+استفاده خواهید کرد.
+
+>> برای پایین آوردن مکان نما به این خط، چند C-n انجام دهید.
+
+>> حرکت به جلو، روی خط با C-f و سپس به بالا با C-p.
+ ببینید C-p وقتی مکان نما در وسط خط قرار دارد چه می کند.
+
+هر خط از متن با یک کاراکترِ Newline به پایان می رسد، که
+آن را از خط زیر جدا میکند. (به طور معمول،یک فایل در پایان دارای
+یک Newline خواهد بود، اما Emacs به آن نیاز ندارد.)
+
+>> هنگامی که نشانگر در ابتدای خط است، از C-b استفاده کنید. باید به انتهای
+ خط قبلی حرکت کند. به این دلیل است که این حرکت از سراسر Newline میگذرد.
+
+فرمان C-f می تواند مانند C-b روی خط جدید حرکت کند.
+
+>> چند C-b دیگر انجام دهید، بنابراین می توانید نشانگر را در مکان مورد
+ نظر قرار دهید. سپس C-f را انجام دهید تا به انتهای خط برگردید.
+ سپس یک C-f دیگر انجام دهید تا به خط زیر بروید.
+
+
+وقتی از بالا یا پایین صفحه عبور می کنید، متن فراتر می رود
+لبه روی صفحه نمایش جابجا می شود. به این "پیمایش یا اسکرول" می گویند. این
+Emacs را قادر می سازد تا مکان نما را به مکان مشخص شده در متن منتقل کند
+بدون اینکه آن را از صفحه نمایش جدا کنید.
+
+>> سعی کنید مکان نما را از پایین صفحه با C-n حرکت دهید و
+ ببیند چه اتفاقی می افتد.
+
+اگر حرکت بر اساس کاراکترها خیلی کند است، می توانید با کلمات حرکت کنید. M-f
+(META-f) یک کلمه را جلو می برد و M-b یک کلمه را به عقب می برد.
+
+>> چند M-f و M-b تایپ کنید.
+
+وقتی در وسط یک کلمه هستید، M-f به انتهای کلمه می رود.
+هنگامی که در فضای خالی بین کلمات قرار دارید، M-f به انتهای کلمه بعدی منتقل
+می شود. M-b نیز در جهت مخالف کار می کند.
+
+>> فرمان M-f و M-b را چند بار با C-f و C-b در هم آمیخته تایپ کنید،
+ تا عمل M-f و M-b را از انواع مکان های درون و بین کلمات مختلف مشاهده کنید.
+
+
+به موازات بین C-f و C-b از یک طرف و M-f و M-b از طرف دیگر توجه کنید.
+
+عملیات مربوط به واحدهای تعریف شده توسط زبان (کلمات، جملات، پاراگراف ها)
+اغلب با کاراکترهای متا انجام می شود،
+در حالی که کاراکترهای Control بر روی واحدهای اصلی، مستقل از آنچه در حال
+ویرایش هستید (حروف، خطوط و غیره) عمل می کنند.
+
+این توازی بین خطوط و جملات اعمال می شود: C-a و C-e حرکت به
+ابتدا یا انتهای یک خط، و M-a و M-e به ابتدا یا پایان یک جمله حرکت می کنند.
+
+
+>>دو C-a، و سپس دو C-e را امتحان کنید.
+ چند M-a و سپس چند M-e را امتحان کنید.
+
+
+ببینید چگونه C-a های تکراری هیچ کاری انجام نمی دهند، اما M-a های تکراری به
+حرکت خود ادامه می دهند. اگرچه اینها کاملاً مشابه نیستند، اما هر یک طبیعی
+به نظر می رسد.
+
+
+به مکانِ مکان نما در متن "نقطه" نیز می گویند.
+به عبارت دیگر، مکان نما روی صفحه نشان می دهد که نقطه در کجای متن قرار دارد.
+
+
+در اینجا خلاصه ای از عملیات ساده حرکت مکان نما، از جمله
+فرمانهایِ حرکت کلمه و جمله نشان داده می شود:
+
+‏ C-f یک کاراکتر را به جلو حرکت دهید
+‏ C-b یک کاراکتر را به عقب حرکت دهید
+
+‏ M-f یک کلمه را به جلو حرکت دهید
+‏ M-b یک کلمه را به عقب حرکت دهید
+
+‏ C-n به خط بعدی بروید
+‏ C-p به خط قبلی بروید
+
+‏ C-a حرکت به ابتدای خط
+‏ C-e حرکت به انتهای خط
+
+‏ M-a به ابتدای جمله برگردید
+‏ M-e حرکت به جلو تا پایان جمله
+
+>> همه این فرمانها را اکنون چند بار برای تمرین امتحان کنید.
+ این فرمانها بیشترین استفاده را دارند.
+
+دو فرمان مهم دیگر حرکت مکان نما عبارتند از‪ M-< :‬ (META کمتر از)،
+که به ابتدای کل متن حرکت می کند و ‪M->‬ (META بزرگتر از)،
+که به انتهای کل متن می رود.
+
+در اکثر ترمینالها، ">" بالای کاما است، بنابراین باید با استفاده از کلید
+shift آن را تایپ کنید.
+در این ترمینالها باید از کلید shift برای تایپ >-M نیز استفاده کنید.
+بدون کلید shift، شما کاما، M را تایپ می کنید.
+
+>> اکنون >-M را امتحان کنید تا به ابتدای آموزش بروید.
+ سپس از C-v مکرراً برای بازگشت به اینجا استفاده کنید.
+
+>> اکنون <-M را امتحان کنید تا به انتهای آموزش بروید.
+ سپس از M-v مکرراً برای بازگشت به اینجا استفاده کنید.
+
+همچنین می توانید مکان نما را با کلیدهای جهت دار حرکت دهید، اگر ترمینال شما
+آن را داشته باشد. ما استفاده از C-b، C-f، C-n و C-p را به سه دلیل توصیه میکنیم.
+
+اول، آنها بر روی انواع ترمینالها کار می کنند.
+دوم, هنگامی که مهارت شما در استفاده از Emacs بیشتر شود، متوجه خواهید شد که
+تایپ با کنترل کاراکترها، سریعتر از تایپ کلیدهای جهت دار است.
+(زیرا احتیاج نیست که شما دستان خود را از موقعیت تایپ لمسی دور کنید).
+سوم، وقتی شما عادت به استفاده از فرمانهایِ کاراکتر Control را دارید، می توانید
+به راحتی یاد بگیرید که از دیگر فرمانهایِ پیشرفته حرکت مکان نما نیز استفاده کنید.
+
+اکثر فرمانهایِ Emacs یک آرگومان عددی را می پذیرند. برای اکثر فرمانها، این
+به عنوان یک شمارش تکرار عمل می کند.
+نحویِ تحویل تعداد تکرار، با تایپ C-u و سپس اعداد قبل از تایپ فرمان است. اگر
+شما یک کلید META (یا ALT) دارید، راه جایگزینی دیگری برای وارد کردن
+آرگومان عددی وجود دارد: ارقام را در حالی که کلید META را نگه داشته‌اید
+تایپ کنید. ما توصیه می کنیم استفاده از C-u را یاد بگیرید زیرا در هر ترمینال
+کار می کند. آرگومان عددی "آرگومان پیشوند" نیز نامیده می شود.
+زیرا آرگومان را قبل از فرمانی که روی آن اعمال می شود تایپ می کنید.
+
+به عنوان مثال، C-u 8 C-f هشت کاراکتر به جلو حرکت می کند.
+
+>> سعی کنید فقط با یک فرمان، C-n یا C-p با آرگومان عددی برای حرکت مکان نما
+ از خط نزدیک به این خط استفاده کنید.
+
+اکثر فرمانها از آرگومان عددی به عنوان تعداد تکرار استفاده می کنند،
+اما برخی فرمانها از آن به روش دیگری استفاده می کنند.
+چندین فرمان که از آن به عنوان یک علامت تعغیر استفاده میشود.
+(اما هیچ کدام از فرمانهایِی که تا به حال آموخته اید نیستند.)
+وجود یک آرگومان پیشوند، صرف نظر از مقدار آن، فرمان متفاوتی را انجام می دهد.
+
+‏C-v و M-v استثناهای دیگری هستند. با تحویل آرگومان،
+آنها متن را با این تعداد خط به بالا یا پایین اسکرول می کنند نه با یک
+صفحه نمایش. برای مثال، C-u 8 C-v هشت خط پیمایش می کند.
+
+>> اکنون C-u 8 C-v را تایپ کنید.
+
+این فرمان باید متن را 8 خط به بالا اسکرول کند. اگر مایل باشید
+دوباره به پایین برگردید، می توانید یک آرگومان به M-v بدهید.
+
+اگر از یک سیستم نمایشِ گرافیکی مانند X یا MS-Windows استفاده می کنید،
+باید یک ناحیه مستطیل شکل بلند به نام نوار پیمایش در یک طرف پنجره Emacs
+وجود داشته باشد. با کلیک کردن بر روی نوار، متن را اسکرول کنید.
+
+اگر ماوس شما دگمه چرخ دارد، می توانید از آن برای اسکرول نیز استفاده کنید.
+
+
+* اگر EMACS پاسخ نمی دهد.
+---------------------------
+
+اگر Emacs به فرمانهایِ شما پاسخ نمی دهد، می توانید با خیال راحت با
+تایپ کردن C-g آن را متوقف کنید. می توانید از C-g برای متوقف کردن فرمانی که
+انجامش طولانی شده است استفاده کنید.
+
+همچنین می‌توانید از C-g برای حذف یک آرگومان عددی یا ابتدای فرمانی که
+نمی خواهید آن را تمام کنید استفاده کنید.
+
+>> با عمل C-u 100 یک آرگومان عددی 100 بسازید، سپس C-g وبعد از آن
+ C-f را تایپ کنید. بااین فرمانها فقط یک حرف به جلو حرکت می کنید، زیرا شما
+ آرگومان را با C-g لغو کرده اید.
+
+اگر یک <ESC> را اشتباه تایپ کرده اید، می توانید با یک C-g از شر آن خلاص شوید.
+
+
+* فرمانهایِ غیر فعال
+-------------------
+
+برخی از فرمانهایِ Emacs "غیرفعال" هستند تا کاربران مبتدی نتوانند
+از آنها به طور تصادفی استفاده کنند.
+
+اگر یکی از فرمانهایِ غیرفعال را تایپ کنید، Emacs پیامی را نمایش می دهد
+که فرمان چیست و از شما می پرسد که آیامایل به اجرای آن هستید؟
+
+اگر واقعاً می خواهید فرمان را اجرا کنید، <SPC> (نوار فاصله) را در پاسخ به
+سوال تایپ کنید. به طور معمول، اگر نمی خواهید آن را اجرا کنید، به سوال با
+"n" پاسخ دهید.
+
+>> عمل C-x C-l (که یک فرمان غیرفعال است) را انجام دهید،
+ سپس n را در پاسخ به سوال تایپ کنید.
+
+
+* پنجره ها
+----------
+
+با Emacs می تواند چندین "پنجره" داشته باشد که هر کدام متن خاص خود را نشان
+می دهد. ما بعداً در مورد نحوه استفاده از چندین پنجره توضیح خواهیم داد. در
+حال حاضر می خواهیم برای نحوه حذف پنجره های اضافی و بازگشت به حالت اولیه
+ویرایش یک پنجره توضیح دهیم. این عمل آسان است:
+
+‏ C-x 1 یک پنجره (یعنی تمام پنجره های دیگر را حذف کنید).
+
+فرمان C-x 1 پنجره ای تمام صفحه، که حاوی مکان نما است را باز می کند.
+این فرمان تمام پنجره های دیگر را حذف میکند.
+
+
+>> مکان نما را به این خط ببرید و C-u 0 C-l را تایپ کنید.
+>> C-h k C-f را تایپ کنید.
+ ببینید چگونه این پنجره کوچک می شود، در حالی که یک پنجره جدید برای نمایش
+ اطلا عات در فرمان C-f ظاهر می شود.
+
+
+>> با تایپ C-x 1 پنجره فهرست اسناد ناپدید می شود.
+
+یک سری کامل از فرمانها با CONTROL-x شروع می شوند. بسیاری از
+آنها با ویندوز، فایل ها، بافرها و موارد وابسته ارتباط دارند.
+این فرمانها دو، سه یا چهار کاراکتر هستند.
+
+
+* درج و حذف
+------------
+
+اگر می خواهید متن را وارد کنید، فقط متن را تایپ کنید. حروف معمولی،
+مانند A، 7، *، و غیره، هنگام تایپ آنها نوشته می شوند. برای انجام نوشتن
+ خط جدید، <Return> را تایپ کنید (این کلید روی صفحه کلید است
+که گاهی اوقات با عنوان "Enter" شناخته می شود).
+
+برای حذف کاراکترِ قبل از مکان نمای فعلی ، <DEL> را تایپ کنید. این کلید روی
+صفحه کلید است که معمولاً با برچسب "Backspace"است −− همان که معمولاً در خارج
+از Emacs نیز برای حذف آخرین حرفِ نوشته شده استفاده می کنید.
+
+
+همچنین ممکن است کلید دیگری روی صفحه کلید شما با عنوان <Delete> وجود داشته
+باشد، اما این چیزی نیست که ما در Emacs به آن <DEL> می گوییم.
+
+>> اکنون این کار را انجام دهید - چند کاراکتر را تایپ کنید، سپس آنها را حذف
+ کنید. چند بار <DEL> را تایپ کنید. نگران این فایل نباشید در حال تغییر؛
+ شما آموزش اصلی را تغییر نمی دهید. این کپی شخصی شما از آن است.
+
+وقتی نوشتن یک خط در متن بیش از حد طولانی می شود، خط بر روی سطر دوم صفحه
+"ادامه" می یابد. اگر از یک صفحه نمایش گرافیکی استفاده می کنید برای نشان
+دادن جایی که یک خط ادامه یافته است فلش های منحنی کوچکی در فضاهای باریک در
+دو طرف ناحیه متن (حاشیه‌های چپ و راست ) ظاهر می شوند. اگر از ترمینال متنی
+استفاده می کنید، خطِ ادامه یافته با علامت معکوس ('\') در سمت راست ستون
+صفحه نمایش نشان داده می شود.
+
+
+>> به نوشتن متن پس از رسیدن به انتهای خط ادامه دهید.
+خواهید دید که یک خطِ ادامه ظاهر می شود.
+
+>> از <DEL > برای حذف متن استفاده کنید تا زمانی که نوشته مجدداً روی یک خط
+ صفحه قرار گیرد. خط ادامه از بین می رود.
+
+شما می توانید حروف خط جدید را مانند هر حرف دیگری حذف کنید. حذف کاراکتر
+Newline بین دو خط آنها را با هم ادغام می کند. اگر خط ترکیبی به دست آمده
+بیش از حد طولانی باشد که در آن جا نمی شود، عرض صفحه نمایش، با یک خط ادامه،
+نمایش داده می شود.
+
+>> مکان نما را به ابتدای یک خط ببرید و <DEL> را تایپ کنید. این فرمان
+ آن خط را با خط قبلی ادغام می کند.
+
+>> حالا <Return> را تایپ کنید تا خط جدیدی را که حذف کرده اید دوباره وارد کنید.
+
+کلید <Return> ویژه است، زیرا با فشار دادن آن ممکن است بیش از این کار انجام شود.
+فقط یک کاراکتر Newline وارد کنید. بسته به متن اطراف،
+ممکن است بعد از کاراکتر Newline فضای خالی را وارد کند، به طوری که وقتی
+شما شروع به تایپ کردن در خط جدید می کنید، متن با خط قبلی آن ردیف می شود.
+ما به این رفتار (که در آن فشار دادن یک
+کلید چیزی بیش از وارد کردن کاراکتر مربوطه انجام می دهد) می گوییم "electric".
+
+>> در اینجا مثالی از الکتریکی بودن <Return> آورده شده است.
+ <Return> را در انتهای این خط تایپ کنید.
+
+باید ببینید که بعد از درج Newline فاصله ها هم درج می شوند،
+به طوری که مکان نمابه جای مناسب حرکت می کند.
+
+به یاد داشته باشید که به اکثر فرمانهایِ Emacs می توان تعداد تکرار، داده شود.
+این شامل کاراکترهای متنی نیز است. تکرار درج کاراکتر متنی برای چندین بار.
+
+
+>> اکنون آن را امتحان کنید - ‪ C-u 8 *‬ را برای درج ******** تایپ کنید.
+
+شما اکنون ابتدایی ترین راه را برای تایپ با Emacs و تصحیح خطاها یاد گرفته اید.
+شما می توانید کلمات یا خطوط را نیز حذف کنید.
+در اینجا خلاصه ای از عملیات حذف آمده است:
+
+ ‏ <DEL> کاراکتر را درست قبل از مکان نما حذف می کنید.
+ ‏ C−d کاراکتر بعدی، بعد از مکان نما را حذف می کنید.
+
+ ‏ <M-<DEL کلمه را بلافاصله قبل از مکان نما حذف می کنید.
+ ‏ M-d کلمه بعدی را بعد از مکان نما حذف می کنید.
+
+ ‏ C-k از موقعیت مکان نما تا انتهای خط را حذف می کنید.
+ ‏ M-k از موقعیت مکان نما تا انتهای جمله را حذف میکنِید.
+
+توجه داشته باشید که <DEL> و C-d در مقابل <M-<DEL و M-d موازاتی را گسترش می دهند
+که با C-f و M-f شروع شده است (خوب، <DEL> واقعاً یک کاراکتر کنترلی نیست، اما
+بیایید نگران این نباشیم). C-k و M-k مانند C-e و M-e هستند، به نوعی، در آن
+خطوط با جملات جفت می شوند.
+
+شما همچنین می توانید یک بخش از متن را با یک روش یکسان حذف کنید . به انتهای
+یک قسمت حرکت کنید، و سپس <C-<SPC را تایپ کنید. (<SPC> کلید نوار Space
+است.) سپس مکان نما را به انتهای دیگر متنی که قصد دارید حذف کنید، ببرید.
+با انجام این کار، Emacs متن بین مکان نما وموقعیتی که با <C-<SPC تایپ کرده اید
+را مشخص می کند. در نهایت C-w را تایپ کنید. با این عمل متنِ بین دو موقعیت
+را حذف میکنید.
+
+
+>> مکان نما را در ابتدای پاراگراف قبلی به «ش» حرکت دهید.
+
+>> با تایپ <C-<SPC، در پایین صفحه نمایش Emacs باید یک پیام "Mark set" را
+ نمایش دهد.
+
+>> در خط دوم ازمتن، مکان نما را به «ی» در "یک"، حرکت دهید.
+
+‏>> C-w را تایپ کنید. با این کار متنی که از «ش» شروع می شود و درست قبل از
+«ی» به پایان می رسد را از بین می برید.
+
+تفاوت بین "کشتن" و "حذف" در همان متن این است که "کشته" را می توان دوباره
+درج کرد (در هر موقعیتی)، در حالی که چیزهای "حذف شده" را نمی توانید به این
+روش دوباره درج کنید (اما می توانید حذف را لغو کنید - در زیر ببینید.) درج
+مجدد متن کشته شده "yanking" نامیده می شود. ( به عنوان عقب نشینی یا عقب
+کشیدن متنی که برداشته شده است به آن فکرکن.)
+
+به طور کلی، فرمانهایِی که می توانند متن زیادی را حذف کنند، متن را «میکشند».
+(آنها به گونه ای تنظیم شده اند که بتوانید متن را باز گردانند)، در حالی که
+فرمانهایِی که فقط یک کاراکتر را حذف می کند، یا فقط خطوط و فاصله های خالی را
+حذف می کند، حذف را انجام می دهند (بنابراین نمی توانید آن متن را برگرداند).
+<DEL> و C-d در ساده ترین حالت، بدون هیچ آرگومان حذف را انجام می دهند.وقتی
+آرگومان به آنها داده می شود درعوض مکشند.
+
+>> مکان نما را به ابتدای خطی که خالی نیست حرکت دهید.
+سپس C-k را تایپ کنید تا متن روی آن خط حذف شود.
+
+>> بار دوم C-k را تایپ کنید. خواهید دید که Newline را می کشد که بعد از آن
+ خط است.
+
+توجه داشته باشید که یک C-k محتویات خط را می کشد و یک C-k ثانوی خود خط را
+می کشد و همه خطوط دیگر را به سمت بالا حرکت می دهد. C-kبه طور خاص با یک
+آرگومان عددی برخورد می کند: این تعداد خطوط و محتویات آنهارا میکشد. این
+صرفا یک تکرار نیست. C-u 2 C-k دو خط و Newline آنها را می کشد. دو بار تایپ
+کردن C-k این کار را نمی کند.
+
+می‌توانید متن کشته‌شده را در همان مکانی که در آن قرار داشت، باز گردانید.
+یا در جای دیگری از متنی که در حال ویرایش آن هستید، یا حتی در
+یک فایل متفاوت می‌توانید یک متن را چندین بار باز گردانید. که
+چندین کپی از آن می سازد. با مراجعه به کتابچه راهنمایِ Emacs در موارد "کشتن" و
+انحرافِ "برش" و "چسباندن" میتوانید اطلاعات بیشتری کسب کنید.
+
+
+فرمانِ‪"yank" ,C-y ‬ است. آخرین متن کشته شده را در موقعیت مکان نما فعلی دوباره
+درج می کند.
+
+
+>> آن را امتحان کنید. C-y را تایپ کنید تا متن را به عقب برگردانید.
+
+اگر چندین C-k را پشت سر هم انجام دهید، تمام متن کشته شده ذخیره می شود،
+ به طوری که یک C-y همه خطوط را به یکباره انحراف می دهد.
+
+>> اکنون این کار را انجام دهید، C-k را چندین بار تایپ کنید.
+
+حال برای بازیابی آن متن کشته شده:
+
+‏>> C-y را تایپ کنید. سپس مکان نما را چند خط پایین ببرید و دوباره C-y را
+تایپ کنید اکنون نحوه کپی کردن متن را مشاهده می کنید.
+
+اگر متنی داشته باشید که می خواهید به عقب برگردید، چه کار می کنید چیز دیگری
+می کشید؟ C-y کشتن اخیر را از بین می برد. ولی متن قبلی گم نمی شود می توانید
+با استفاده از M-y به آن برگردید فرمان بعد از اینکه C-y را برای دریافت
+آخرین kill انجام دادید، تایپ کنید M-y آن متن یاک شده را با kill قبلی
+جایگزین می کند. تایپ کردن M-y بارها و بارها کشتارهای قبلی و قبلی را به
+ارمغان می آورد. وقتی به متن مورد نظر رسیدید، لازم نیست کاری انجام دهید تا
+نگهش دارید. فقط به ویرایش خود ادامه دهید و متن انحرافی را رها کنید.
+
+اگر تعداد M-y به دفعات کافی داشته باشید، به نقطه شروع باز می گردید
+(بیشترین کشتن اخیر).
+
+>> یک خط را بکشید، در اطراف حرکت کنید، یک خط دیگر را بکشید.
+ سپس C-y را انجام دهید تا دومین خط کشته شده را برگردانید.
+ سپس M-y را انجام دهید تا اولین خط کشته شده جایگزین آن شود.
+ M-y های بیشتری انجام دهید و ببینید چه چیزی به دست می آورید. به انجام
+ آنها ادامه دهید تا زمانی که خط کشتن دوم برمی گردد، و سپس چند بار دیگر.
+ اگر دوست دارید، می‌توانید امتحان کنیدو به M-y آرگومانهای مثبت و منفی
+ بدهید.
+
+
+
+* لغو
+------
+
+اگر تغییری در متن ایجاد کنید و سپس تصمیم به برگرداندن آن تغییر بگیرید،
+شما می توانید تغییر را با فرمان ‪(undo) C-/‬ لغو کنید.
+
+به طور معمول، ‪ C-/‬ تغییرات ایجاد شده توسط یک فرمان را خنثی می کند.
+اگر ‪ C-/‬ را چندین بار پشت سر هم، تکرار کنید هر تکرار یک فرمان دیگر
+را خنثی می کند.
+
+اما دو استثنا وجود دارد: فرمانهایِی که متن را تغییر نمی دهند
+به حساب نمی آیند (این شامل فرمانهایِ حرکت مکان نما و فرمانهایِ اسکرول می شود.)
+و کاراکترهای خود درج معمولاً در گروهای، تا ۲۰ تایی رسیدگی می شوند.
+(این برای کاهش تعداد‪ C-/ ‬ هایی است که باید برای لغو درج متن) تایپ کنید.
+
+
+>> این خط را با C-k بکشید، سپس /-C را تایپ کنید تا دوباره ظاهر شود. ـ-C یک
+ فرمان لغو جایگزین است. دقیقاً مانند‪ C-/ ‬ کار می کند. در برخی از پایانه
+ های متنی، تایپ‪ C-/ ‬ در واقع _-C را به Emacs ارسال می کند. از طرف
+ دیگر، C-x u نیز دقیقاً مانند‪ C-/ ‬ کار می کند، اما کمی کمتر است و راحتر
+ تایپ میشود.
+
+
+یک آرگومان عددی /-C-_ ، C, یا C-x u به عنوان یک تعداد تکرار عمل می کند.
+
+همانطور که می توانید حذف متن را لغو کنید، می توانید کشتن متن رانیز لغو کنید.
+تمایز بین کشتن چیزی و حذف آن در مورد C-y تأثیر می گذارد، برای لغو فرقی نمی کند.
+
+
+* فایل ها
+---------
+
+برای اینکه متنی را که ویرایش می کنید دائمی کنید، باید آن را در یک فایل
+قرار دهید. در غیر این صورت، با خروج از Emacs از بین می رود. برای اینکه متن
+خود را در یک فایل قرار دهید، قبل از وارد کردن فایل باید آن را "پیدا کنید".
+(به این "بازدید از فایل" نیز گفته می شود.)
+
+پیدا کردن یک فایل به این معنی است که شما محتویات فایل را در داخل Emacs
+می بینید از بسیاری جهات، گویی در حال ویرایش خود فایل هستید. با این حال،
+تغییراتی که با استفاده از Emacs ایجاد می کنید دائمی نمی شوند تا زمانی که
+فایل را "ذخیره" کنید. این به این دلیل است که شما بتوانید از ذخیره کردن
+فایل نیمه کامل اجتناب کنید. حتی هنگامی که فایل را ذخیره کردید Emacs فایل
+اصلی را با نام دیگری برایتان نگه میدارد، چون ممکن است بعداً تصمیم بگیرید که
+تغییرات شما اشتباه بوده است.
+
+اگر به پایین صفحه نگاه کنید، خطی را خواهید دید که
+با حروف "−" شروع می شود و چیزی مانند: "TUTORIAL ---:-" در آن را نشان می دهد.
+این قسمت از صفحه نمایش معمولاً نام فایلی که در حال حاضر از آن بازدید می
+کنید را نشان میدهد. شما اکنون در حال بازدید از کپی شخصی آموزش Emacs خود که
+"TUTORIAL" نام دارد هستید. وقتی شما یک فایل را با Emacs پیدا کردید، نام آن
+فایل بطور دقیق در همان نقطه ظاهر می شود.
+
+یک مورد خاص در مورد فرمان برای یافتن یک فایل این است که شما باید بگویید چه
+نام فایلی را می خواهید. ما می گوییم فرمان "خواندن یک ارگومان"
+(در این مورد، آرگومان نام فایل است.)بعد از تایپ فرمان.
+
+
+با C-x C-f یک فایل را پیدا کنید. Emacs از شما می خواهد که نام فایل را تایپ
+کنید. نام فایلی که تایپ می کنید در خط پایین صفحه نمایش ظاهر می شود. خط
+پایین زمانی که برای این نوع ورودی استفاده می شود، «مینی بافر» نامیده می
+شود. شما می توانید ازفرمانهایِ ویرایش معمولی Emacs برای ویرایش نام فایل
+استفاده کنید.
+
+در حالی که نام فایل (یا هر ورودی مینی بافر دیگر) را وارد می کنید،
+می توانید با C-g فرمان را لغو کنید.
+
+>> فرمانِ C-x C-f را تایپ کنید، سپس C-g را تایپ کنید. این فرمانِ مینی بافر
+ را لغو می کند، و همچنین فرمان C-x C-f را که مینی بافر از آن استفاده می
+ کرد را لغو می کند، بنابراین شما هیچ فایلی را پیدا نمی کنید.
+
+وقتی نام فایل را وارد کردید، <Return> را تایپ کنید تا
+آن را خاتمه دهید. مینی بافر ناپدید می شود و فرمان C-x C-f
+برای یافتن فایلی که انتخاب کرده اید اعمال میشود.
+
+محتویات فایل اکنون روی صفحه ظاهر می شود و می توانید آن را ویرایش کنید.
+هنگامی که می خواهید تغییرات خود را دائمی کنید، فرمان
+
+‏ C-x C-s فایل را ذخیره کنید
+
+این فرمان متن را در فایل درون Emacs کپی می کند. اولین باری که این
+کار را انجام دهید، Emacs نام فایل اصلی را به نام جدید تغییر می دهد بنابر این
+گم نمی شود. نام جدید با افزودن "~" به انتهای نام فایل اصلی ساخته می شود.
+هنگامی که ذخیره به پایان رسید، Emacs نام فایل نوشته شده را نمایش می دهد.
+
+
+‏>> <C-x C-s TUTORIAL <Return را تایپ کنید.
+ این فرمان باید این آموزش را در فایلی به نام TUTORIAL ذخیره کند و
+ و " Wrote...TUTORIAL " را در پایین صفحه نشان دهد.
+
+می توانید یک فایل موجود را پیدا کنید، آن را مشاهده یا ویرایش کنید. شما
+همچنین می توانید فایلی را پیدا کنید که قبلاً وجود ندارد. این راه ایجاد یک
+فایل با Emacs است: فایل را پیدا کنید که خالی شروع می شود و سپس شروع به درج
+متن در آن کنید، وقتی شما درخواست ذخیره فایل را می کنید، Emacs در واقع فایل
+را با متنی که شما درج کرده اید ایجاد می کند. از آن به بعد، می توانید خود
+را در حال ویرایش فایل موجود بدانید.
+
+
+
+* بافرها
+---------
+
+اگر فایل دومی را با C-x C-f پیدا کردید، فایل اول داخل Emacs باقی می ماند.
+برای برگشت مجدد به آن شما می‌توانید با C-x C-f ، دو باره آن را پیدا کنید.
+با این روش می توانید تعداد زیادی فایل را در داخل Emacs باز کنید.
+
+ایمکس متن هر فایل را در یک مکان به نام "بافر" ذخیره می کند.
+پیدا کردن یک فایل، یک بافر جدید در Emacs ایجاد می کند. برای دیدن لیستی از
+بافرهایی که در حال حاضر وجود دارند، تایپ کنید
+
+‏ C-x C-b لیست بافرها
+
+>> اکنون C-x C-b را امتحان کنید.
+
+ببینید که چگونه هر بافر یک نام دارد و همچنین ممکن است نام فایلی که محتویات
+آن را نگه می دارد داشته باشد. هر متنی که در پنجره Emacs می بینید همیشه
+بخشی از یک بافر است.
+
+>> با تایپ C-x 1 میتوانید از شر لیست بافر خلاص شوید.
+
+هنگامی که چندین بافر دارید، در هر زمان تنها یکی از آنها "جاری" است. آن
+بافر همان بافری است که شما ویرایش می کنید. اگر می خواهید بافر دیگری را
+ویرایش کنید، باید به آن "سوئیچ" کنید. اگر می خواهید به یک بافر سوئیچ کنید
+که مربوط به یک فایل است، می توانید با مراجعه مجدد به آن فایل با C-x C-f
+این کار را انجام دهید. اما یک راه ساده تر وجود دارد: از فرمان C-x b
+استفاده کنید. در آن فرمان باید نام بافر را تایپ کنید.
+
+>> با تایپ ‪C-x C-f foo <Return> ‬ فایلی به نام "foo" ایجاد کنید.
+ سپس ‪ C-x b TUTORIAL <Return>‬ را تایپ کنید تا به این آموزش بازگردید.
+
+اغلب اوقات، نام بافر با نام فایل یکی است(بدون قسمت پوشه فایل). به هر حال،
+این همیشه درست نیست. لیست بافری که با C-x C-b ایجاد می کنید، نام هر دو
+بافر و نام فایل هر بافر را به شما نشان می دهد.
+
+برخی از بافرها با فایل ها مطابقت ندارند. بافری با نام "*Buffer List*" که
+حاوی لیست بافری است که شما آن را با C-x C-b ساخته اید هیچ فایلی ندارد. این
+‪TUTORIAL buffer‬ که در ابتدا انجام شد فایلی ندارد، اما اکنون دارد، زیرا
+قبلا شما C-x C-s را تایپ کردید و آن را در یک فایل ذخیره کرده اید.
+
+بافر ی با نام "*Messages*" نیز با هیچ فایلی مطابقت ندارد. این بافر حاوی
+پیام هایی است که در در طول جلسه Emacs شما، در خط پایین ظاهر شده اند.
+
+>> حالا < C-x b *Messages* <Return را تایپ کنید تا به بافر پیام ها نگاه کنید.
+ سپس < C-x b TUTORIAL <Return را تایپ کنید تا به این آموزش بازگردید.
+
+اگر در متن یک فایل تغییراتی ایجاد کردید و سپس فایل دیگری را پیدا کنید، این
+فایل اول را ذخیره نمی کند. آن تغییرات در Emacs در بافر آن فایل باقی می ماند.
+ایجاد یا ویرایش فایل دوم بافر، هیچ تاثیری روی بافر فایل اول ندارد.
+این بسیار مفید است، اما این بدان معناست که شما به یک راه راحت برای ذخیره
+بافر فایل اول نیاز دارید. نیاز به برگشت به بافِر اول برای ذخیره آن توسط
+C-x C-s کمی دردسرامیز است. بنابراین فرمانِ زیر را داریم.
+
+‏ C-x s برخی از بافرها را ذخیره کنید
+
+فرمان C-x s در مورد هر بافری که حاوی تغییراتی که ذخیرِه
+نشده است از شما می پرسد.
+
+>> یک خط متن وارد کنید، سپس C-x s را تایپ کنید.
+ باید از شما بپرسد که آیا بافر با نام TUTORIAL را ذخیره می کنید یا خیر.
+ با تایپ "y" به سوال پاسخ مثبت دهید.
+
+
+* گسترش مجموعه فرمانها
+---------------------------
+
+فرمانهایِ Emacs بسیار بسیار بیشتر است از آنچه که امکان قراردادن همه آنها
+با کاراکترها ی کنترل و متا باشد.
+ Emacs با فرمان( X (eXtend این کار را میسر میکند.
+دو حالت برای این وجود دارد:
+
+‏ C-x کاراکتر برای eXtend. بعد از یک کاراکتر.
+‏ M-x فرمانی با نام eXtend. بعد از یک نام طولانی.
+
+اینها فرمانهایی هستند که عموما مفید هستند، اما کمتر ازفرمانهایی که قبلاً در
+مورد آنها آموخته اید استفاده می شوند. شما قبلاً چند مورد از انها را
+دیده‌اید: برای مثال فرمان فایل C-x C-f را برای یافتن و C-x C-s را برای
+ذخیره کردن در نظر بگیرید. مثال دیگر، فرمان C-x C-c فرمان پایان دادن به جلسه
+Emacs است. (نگران از دست دادن تغییراتی که ایجاد کرده اید نباشید C-x C-c
+پیشنهاد می کند هر فایل تغییر یافته را ذخیره کنید قبل از اتمام جلسه Emacs.)
+
+
+اگر از صفحه نمایش گرافیکی استفاده می کنید، نیازی به فرمان خاصی برای انتقال
+از Emacs به برنامه دیگر ندارید. شما می توانید این کار رابا ماوس یا با
+فرمانهای مدیر پنجره انجام دهید. با این حال،اگر شمااز ترمینال متنی که می
+تواند تنها یک برنامه را در یک زمان نشان دهد، استفاده می کنیدباید Emacs را
+"تعلیق" کنید تا به هر برنامه دیگری بروید.
+
+فرمان C-z خروج *موقت*--- از Emacs است تا بتوانید به همان جلسه Emacs
+برگردید. هنگامی که Emacs روی یک ترمینال متنی اجرا می شود، C-z، Emacs را به
+حالت تعلیق در می آورد. یعنی به shell برمی گردد اما کار Emacs را از بین نمی
+برد. در رایج ترین shell ها، شما می تواند Emacs را با فرمان "fg" یا با‪
+"%emacs"‬ از سر بگیرد.
+
+زمان استفاده از C-x C-c زمانی است که می خواهید از سیستم خارج شوید. همچنین
+برای خروج از Emacs و ویرایش سریع استفاده می شود، همانند یک ابزار مدیریت
+ایمیل.
+
+فرمانهای C-x زیادی وجود دارد. در اینجا لیستی از مواردی که یاد گرفته اید است:
+
+‏ C-x C-f فایل را پیدا کنید
+‏ C-x C-s ذخیره فایل
+‏ C-x s برخی از بافرها را ذخیره کنید
+‏ C-x C-b لیست بافرها
+‏ C-x b سوئیچ بافر
+‏ C-x C-c از Emacs خارج شوید
+‏ C-x 1 تمام پنجره ها را به جز یک حذف کنید
+‏ C-x u لغو فرمان
+
+فرمانهایی با نام eXtended فرمانهایی هستند که به طور مکرر کمتر مورد استفاده
+قرار می گیرند یا فرمانهایی که فقط در حالت های خاصی استفاده می شوند.
+به عنوان یک مثال فرمان replace-string است که یک رشته حروف را جایگزین رشته
+حروف دیگری در بافر می کند. وقتی M-x را تایپ می‌کنید، Emacs درپایین صفحه با
+نشان دادنِ M-x از شما می‌خواهد نام فرمان را تایپ کنید؛ در اینجا یعنی
+"replace-string". فقط " <repl s<TAB" را تایپ کنید و Emacs نام فرمان را
+تکمیل می کند. (<TAB> کلید Tab است که معمولاً جایگاهش بالای کلید CapsLock یا
+Shift نزدیک لبه سمت چپ کیبورد است.) نام کامل شده فرمان را با <Return>
+ارسال کنید.
+
+فرمان replace-string به دو آرگومان نیاز دارد -- رشته جایگزین شونده
+و رشته ای که جایگزین آن شود.شما باید هر آرگومان رابا <Return> پایان دهید.
+
+
+>> مکان نما را به خط خالی دو خط زیر این یکی ببرید.
+ سپس < M-x repl s<Return>changed<Return>altered<Return را تایپ کنید.
+
+
+ توجه کنید که این خط چگونه تغییر کرده است: شما کلمه "changed" را با"altered"
+ جایگزین کرده اید. هر جایی که بعد از موقعیت اولیه مکان نما رخ داد.
+
+
+* ذخیره خودکار
+---------------
+
+وقتی تغییراتی در فایلی ایجاد کرده اید، اما هنوز آنها را ذخیره نکرده اید،
+اگر کامپیوتر شما خراب شود، ممکن است از بین بروند. برای محافظت شما از آن،
+Emacs به صورت دوره ای برای هر فایلی که شما در حال ویرایش آن هستید یک فایل
+"ذخیره خودکار" می نویسد. نام فایل ذخیره خودکار دارای یک # در ابتدا و در
+پایان است؛ به عنوان مثال، اگر فایل شما "hello.c" نام دارد، ذخیره خودکار نام
+فایل "#hello.c#" است.وقتی فایل را به روش عادی ذخیره می کنید، Emacs فایل
+ذخیره خودکار خود را حذف می کند.
+
+اگر رایانه خراب شد، می‌توانید ویرایش ذخیره‌شده خودکار خود را توسط
+یافتن فایل به طور معمول (فایلی که در حال ویرایش آن بودید، نه ذخیره فایل خودکار)
+و سپس تایپ M-x recover-this-file <Return> بازیابی کنید . هنگامی که
+تأیید آن را می خواهد،< yes<Return را تایپ کنید تابه ذخیره خودکار داده ها
+ادامه دهید و آن را بازیابی کنید.
+
+
+
+* منطقه اکو
+-----------
+
+اگر Emacs ببیند که به آرامی فرمانهای چند کاراکتری را تایپ می کنید، آن را
+انجام می دهد آنها را در پایین صفحه در ناحیه ای به نام "منطقه اکو" به شما
+نشان می دهد. ناحیه اکو حاوی خط پایین صفحه نمایش است.
+
+
+* خط حالت ( MODE LINE)
+-----------------------
+
+خط بلافاصله بالای ناحیه اکو "mode line" نامیده می شود.
+خط حالت چیزی شبیه به این می گوید:
+
+‏ TUTORIAL 63% L749 (Fundamental) −**:−
+
+این خط، اطلاعات مفیدی در مورد وضعیت Emacs
+و متنی که در حال ویرایش آن هستید می دهد.
+
+شما از قبل می دانید که نام فایل به چه معناست -- این فایلی است که شما دارید.
+ NN% موقعیت فعلی شما را در متن بافر نشان می دهد. این
+به این معنی است که NN درصد از بافر بالای صفحه نمایش است.
+اگر بالای بافر روی صفحه باشد، به آن "Top" بجای "0٪" می گوید.
+اگر پایین بافر روی صفحه باشد، "Bot" می گوید.
+اگر به بافری نگاه می کنید که آنقدر کوچک است که همه آن روی صفحه جا می شود,
+خط مد می گوید, "All".
+
+حرف L و ارقام، موقعیت را به طریق دیگری نشان می دهند: آنها شماره خط فعلیِ
+نقطه را نشان می دهند.
+
+ستاره های نزدیک به جلو به این معنی است که شما تغییراتی در متن ایجاد کرده
+اید. درست پس از بازدید یا ذخیره یک فایل، آن قسمت از خط حالت، با خطوط تیره
+و بدون ستاره نمایش داده می شود.
+
+آن بخشی از خط حالت که در داخل پرانتز است گویایِ
+حالت‌های ویرایشی فعلی هستند. حالتی که الان استفاده می کنید Fundamental است.
+این نمونه ای از "مد ماژر (major mode)" است.
+
+ایمکس حالت های اصلی مختلف فراوان دارد. برخی از آنها برای
+ویرایش زبان های برنامه ریزی مختلف مثل Lisp هستند و برخی برای
+ویرایش متن هستند، و غیره.
+
+در هر زمان یک و تنها یک مد ماژر فعال است، و نام آن را همیشه می توان در خط
+حالت، دقیقاً در جایی که اکنون "Fundamental" است، یافت.
+
+هر مد ماژر باعث می شود که برخی از فرمانها متفاوت عمل کنند. مثلا، فرمانهایی
+برای ایجاد comment در یک برنامه وجود دارد و از آنجایی که هر کدام از
+زبانهای برنامه نویسی ایده متفاوتی در مورد آنچه که یک comment باید باشد
+دارند هر مد ماژر باید comment رابه طور متفاوتی درج کند. هر یک از مدهای
+ماژر نام یک فرمان توسعه یافته است، که چگونه می توانید به آن حالت تغییر
+دهید. برای مثال، M-x fundamental-mode فرمانی است که به حالت اساسی بروید.
+
+اگر قرار است متنی به زبان انسانی مانند: این فایل را ویرایش کنید، شما
+احتمالا باید از حالت متن استفاده کنید.
+
+>> تایپ کنید < M-x text-mode <Return
+
+نگران نباشید، هیچ یک از فرمانهایِ Emacs که یاد گرفته اید تغییر نمی کند اما
+می توانید مشاهده کنید که M-f و M-b اکنون آپاستروف ها به عنوان بخشی از
+کلمات رفتارمی کنند.قبلاً در حالت بنیادی، M-f و M-b مانند آپاستروف ها به عنوان
+جداکننده کلمات رفتار می کردند.
+
+
+اکثر فرمانها در هر مد ماژر "همان کار" را انجام می دهند، امادرمواردی مانند
+مثال بالا کمی متفاوت عمل می کنند.
+
+
+برای مشاهده اطلاعات امدادی در مد ماژر فعلی خود، C-h m را تایپ کنید.
+
+>> مکان نما را به خط زیر این خط ببرید.
+>> C-l C-l را تایپ کنید تا این خط به بالای صفحه نمایش داده شود.
+>> C-h m را تایپ کنید تا ببینید مدِ Text با مدِ Fundamental چه تفاوتی دارد.
+>> C-x 1 را تایپ کنید تا اطلاعات امدادی را از روی صفحه حذف کنید.
+
+مد ماژور را ماژر می نامند زیرا مد ماینور نیز وجود دارد. مدهای ماینور
+جایگزینی برای مدهای ما‍‍‍ژور نیستند، فقط آنها را تغیر و تبدیل می کنند. هر مد
+ماینور می تواند خودش مستقلانه روشن یا خاموش گردد، مستقل ازتمام مدهای
+ماینور دیگر،و مستقل از مد ماژر فعلی شما. بنابراین می توانید از هیچ مد
+ماینور، یک مد ماینور و یاترکیبی از چند مد ماینور استفاده کنید.
+
+
+یک مد ماینور که بسیار مفید است، به خصوص برای ویرایش متن به زبان انسانی
+(human-language)، مد ماینورِ خود−پر کن (Auto Fill mode) است. وقتی این مد
+روشن است, و شما با نوشتن متن، خطی بوجود می آورد که خیلی طولانی است،Emacs
+خط بین کلمات را به طور خودکار می شکند.
+
+
+شما می توانید با انجام <M-x auto-fill-mode <Return, مد ماینور خودکار را
+روشن کنید. وقتی مد روشن است، می توانید با انجام < M-x auto-fill-mode
+<Return دوباره آن را خاموش کنید. اگر مد خاموش باشد، با این فرمان روشن می
+شود واگر مد روشن است، این فرمان آن را خاموش می کند. ما به این فرمان "تغییر
+مد" می گوییم.
+
+
+>>اکنون <M-x auto-fill-mode <Return را تایپ کنید.
+ سپس یک خط "asdf" را وارد کنید،آن را تکرار کنید تا زمانی که ببینید که به
+ دو خط تقسیم شده است. شماباید فاصله (spaces) بین آنها بوجود آورید، زیرا
+ Auto Fill خطوط را فقط درفواصل می شکند.
+
+حاشیه معمولاً از 70 کاراکتر تشکیل می شود، اما شما می توانید آن را با فرمان
+C-x f تغییر دهید. شما باید تنظیمات حاشیه ای را که می خواهید بدهید،همراه با
+استدلال عددی باشد.
+
+‏> C-x f را با آرگومان 20 تایپ کنید. (C-u 2 0 C-x f).
+ سپس مقداری متن را تایپ کنید و سپس ببینید Emacs، خطوط 20 کاراکتری را با
+ آن پر می کنید. سپس با استفاده از C-x f، دوباره حاشیه را به 70
+ برگردانید.
+
+
+اگر در وسط پاراگراف تغییراتی ایجاد کردید، حالت پر کردن خودکار دوباره آن را
+برای شماپر نمی کند. برای پر کردن مجدد پاراگراف، M-q (META-q) رابا مکان نما
+در داخل آن پاراگراف تایپ کنید.
+
+
+>> مکان نما را به پاراگراف قبلی ببرید و M-q را تایپ کنید.
+
+
+* جستجوکردن
+-----------
+
+با Emacs می توانید رشته ها را جستجو کند («رشته:string » گروهی از
+کاراکترهای به هم پیوسته است). جستجو به جلو در متن یا به عقب در متن.
+جستجوی برای یک string یک فرمان حرکت مکان نما است. آن مکان نما را به مکان
+بعدی که آن رشته ظاهر می شود حرکت می دهد.
+
+فرمان جستجوی Emacs "افزایشی" است. این بدان معنی است که
+جستجو زمانی اتفاق می افتد که رشته مورد نظر را برای جستجو تایپ می کنید.
+
+فرمان شروع جستجو C-s برای جستجوی جلو و C-r برای جستجوی معکوس است.
+اما صبر کنید! اکنون آنها را امتحان نکنید.
+
+وقتی C-s را تایپ می کنید متوجه خواهید شد که رشته "I-search" به صورت یک
+اعلان در ناحیه اکو ظاهر می شود. این به شما می گوید که Emacs مشغول کاری است
+که یک جستجوی افزایشی نامیده می شود و در آن حالت منتظر شماست تامورد جستجو
+را تایپ کنید. <Return> یک جستجو را خاتمه می دهد.
+
+>> اکنون C-s را برای شروع جستجو تایپ کنید
+ کلمه"مکان نما" را به آرامی، با تک تک حروف تایپ کنید، پس از تایپ
+ هر کاراکتر مکث کنید, تا متوجه آنچه برای مکان نما اتفاق می افتد شوید.
+ اکنون یک بار "مکان نما" را جستجو کرده اید.
+>> دوباره تایپ کنید C-s، برای جستجوی رخداد بعدی "مکان نما".
+>> اکنون <DEL> را چهار بار تایپ کنید و ببینید مکان نما چگونه حرکت می کند.
+>> برای پایان یافتن جستجو، <Return> را تایپ کنید.
+
+دیدید چه اتفاقی افتاد؟ Emacs، در یک جستجوی افزایشی، سعی می کند
+به رخداد رشته ای که تاکنون تایپ کرده اید بروید.
+برای رفتن به رخداد بعدی "مکان نما"، فقط C-s را دوباره تایپ کنید. اگر چنین
+رخدادی وجود ندارد، Emacs بوق می‌زند و به شما می‌گوید جستجو در حال حاضر
+"شکست" خرده است. C-g نیز جستجو را خاتمه می دهد.
+
+اگر در وسط یک جستجوی افزایشی هستید و <DEL> را تایپ کنید،
+جستجو، "عقب نشینی" به مکان قبلی میکند. اگر برای پیشرفت جستجوی رشته ای بعدی،
+بعد از اینکه C-s را تایپ کردید <DEL> را تایپ کنید،
+<DEL> مکان نما را به یک اتفاق قبلی برمی گرداند. اگر
+هیچ مورد قبلی در رشته جستجو وجود نداشته باشد، <DEL> آخرین کاراکتر را
+در رشته جستجوپاک می کند.
+ برای مثال، فرض کنید "م" را تایپ کرده اید
+برای اولین بار "م" را جستجو کنید. حالا اگر "ک" را تایپ کنید،
+مکان نما به اولین رخداد "مک" حرکت می کند. حالا <DEL> را تایپ کنید.
+این "ک" را از رشته جستجو پاک می کند و مکان نما به به اولین وقوع "م" در
+رشته جستجو به عقب برمی گردد.
+
+اگر در وسط یک جستجو هستید و کاراکتر کنترل یا متا را تایپ کنید،
+شخصیت (به استثنای معدود کاراکتر هایی که در یک جستجو خاص هستند،
+مانند C-s و C-r)، جستجو خاتمه می یابد.
+
+با C-s جستجو را بعد از موقعیت مکان نمای فعلی شروع می کنید و هر رخدادی از رشته
+بعد از مکان نما جستجو می شود. اگر می خواهید چیزی در متن قبل از مکان نما جستجو
+شود، به جای آن، C-r را تایپ کنید. همه چیزهایی که ما در مورد C-s
+گفته ایم برای C-r نیز صدق می کند، با این تفاوت که جهت جستجو معکوس می شود.
+
+
+* پنجره های چندگانه
+--------------------
+
+یکی از ویژگی های خوب Emacs این است که می توانید در یک زمان بیشتر ازیک
+پنجره روی صفحه نمایش نشان دهید. (توجه داشته باشید که Emacs ازاصطلاح
+"frames"-- که در بخش بعدی توضیح داده شده است -- برای برخی کاربرد دیگر
+"windows" گفته می شود. کتابچه راهنمای Emacs حاوی واژه نامه ای ازشرایط
+استفاده Emacs.)
+
+>> مکان نما را به این خط ببرید و C-l C-l را تایپ کنید.
+
+>> حالا C-x 2 را تایپ کنید که صفحه را به دو پنجره تقسیم می کند. هر دو
+ پنجره این آموزش را نمایش می دهند. مکان نمای ویرایش در پنجره بالا باقی
+ می ماند.
+
+>> تایپ C-M-v برای رفتن به پایین پنجره .
+ (اگر کلید META واقعی ندارید، <ESC> C-v را تایپ کنید.)
+
+>> تایپ کنید C-x o ("o" برای "other"دیگر ) برای حرکت مکان نما به پنجره پایین.
+>> از C-v و M-v در پنجره پایین برای پیمایش استفاده کنید.
+ به خواندن این فرمانهای عمل، در پنجره بالا ادامه دهید.
+
+>> دوباره C-x o را تایپ کنید تا مکان نما را به پنجره بالا برگردانید.
+ مکان نما در پنجره بالا دقیقاً همان جایی است که قبلا بود.
+
+می توانید از C-x o برای جابجایی بین پنجره ها استفاده کنید. "پنجره انتخاب
+شده" جایی که بیشترین ویرایش در آن صورت می گیرد، همان پنجره ای است که مکان
+نما برجسته است، و زمانی که تایپ نمی کنید چشمک می زند. پنجره های دیگر
+موقعیت مکان نمای خود را دارند. اگر Emacs را به صورت گرافیکی اجرا می کنید،
+آن مکان نماها به صورت کادرهای توخالی بدون چشمک‌زن ترسیم می‌شوند.
+
+
+فرمان C-M-v هنگامی که متن را در یک پنجره ویرایش می کنید و از پنجره دیگر
+فقط برای مرجع استفاده میکند، بدون ترک پنجره انتخاب شده، بسیار مفید است.
+می توانید متن را باC-M-v در پنجره دیگر پیمایش کنید.
+
+مثال C-M-v نمونه ای از یک کاراکتر CONTROL-META است. اگر یک کلید META
+‪(Alt یا)‬ دارید با نگه داشتن هر دو کلید CONTRO و META و تایپ v,
+میتوانید C-M-v را تایپ کنید. مهم نیست که CONTROL اول باشد یا META.
+زیرا هر دوی این کلیدها با تغییر کاراکترهای شما عمل می کنند.
+
+
+اگر کلید META ندارید و به جای آن از <ESC> استفاده می کنید، مهم است که
+ترتیب را انجام دهید: باید <ESC> و سپس CONTROL-v را تایپ کنید، زیرا
+CONTROL-<ESC> v کار نخواهد کرد. این به این دلیل است که <ESC> در نوع خود
+یک کاراکتر است، نه یک کلید اصلاح کننده.
+
+>> با تایپ C-x 1 (در پنجره بالا) از شر پنجره پایین خلاص شوید.
+
+(اگر C-x 1 را در پنجره پایین تایپ کرده بودید، پنجره بالا خلاص می شد. این
+فرمان را به صورت «فقط یک پنجره را -- هم آنکه هم اکنون در آن هستم نگه دار»
+در نظر بگیرید.
+
+
+شما مجبور نیستید یک بافر را در هر دو پنجره نمایش دهید. اگر شما از C-x C-f
+برای پیدا کردن فایل در یک پنجره استفاده کنید، در پنجره دیگر تغییر ایجاد
+نمی شود. شما می توانید یک فایل را در هر پنجره به طور مستقل پیدا کنید.
+
+در اینجا روش دیگری برای استفاده از دو پنجره برای نمایش دو چیز مختلف وجود دارد:
+
+>> فرمان C-x 4 C-f و سپس نام یکی از فایل های خود را تایپ کنید.
+ با <Return> خاتمه دهید. ببینید فایل مشخص شده در پایین ظاهر می شود و
+ پنجره مکان نما نیز به آنجا می رود.
+
+>> برای بازگشت به پنجره بالا C-x o و برای حذف پنجره پایین C-x 1 را تایپ کنید.
+
+
+*فریم های چندگانه (MULTIPLE FRAMES)
+----------------------------------
+
+با Emacs همچنین می توانید چندین "فریم" ایجاد کنید. یک فریم، مجموعه ای
+ازپنجره ها است که فهرست آن: اسکرول بارها، اکو بار، و غیره است. در
+نمایشگرهای گرافیکی، چیزی که Emacs آن را "فریم" می نامد همان چیزی است که
+اکثر برنامه های کاربردی دیگر "پنجره" می نامند. فریم های گرافیکی متعدد را
+می توان همزمان بر روی صفحه نمایش نشان داد. در یک ترمینال متنی فقط یک فریم
+را می توان در یک زمان نشان داد.
+
+‏ >> C-x 5 2 را تایپ کنید.
+ مشاهده می کنید که یک فریم جدید روی صفحه نمایش شما ظاهر می شود.
+
+شما می توانید هر کاری را که در فریم اصلی انجام داده اید در فریم جدید
+انجام دهید. هیچ چیز خاصی در فریم اول وجود ندارد.
+
+‏>> C-x 5 0 را تایپ کنید.
+ این فریم انتخاب شده را حذف می کند.
+
+شما همچنین می توانید یک فریم را با استفاده از روش معمولی ارائه شده توسط
+سیستم گرافیکی (اغلب با کلیک روی دکمه ای با نشان "X" در گوشه بالای فریم)بردارید.
+اگر آخرین فریمِ کار Emacs را به این ترتیب حذف کنید،از Emacs خارج می شود.
+
+
+* سطوح ویرایش بازگشتی
+----------------------
+
+گاهی اوقات وارد چیزی می شوید که«سطوح ویرایش بازگشتی» نامیده می شود.
+این با کروشه های مربع در خط حالت اطراف پرانتزهای نام مد ماژر
+نشان داده می شود. برای مثال، ممکن است [(اساسی)] را به جای (اساسی) ببینید.
+
+برای خارج شدن از سطح ویرایش بازگشتی، <ESC> <ESC> <ESC> را تایپ کنید.
+این یک فرمان همه منظوره "برو بیرون" است. همچنین می توانید از آن برای
+حذف پنجره های اضافی و خارج شدن از مینی بافر استفاده کنید.
+
+>> تایپ M-x، تا وارد یک مینی بافر شوید. سپس برای بیرون رفتن
+‏ <ESC> <ESC> <ESC> را تایپ کنید.
+
+شما نمی توانید از C-g برای خارج شدن از یک سطح ویرایش بازگشتی استفاده کنید.
+زیرا C-g برای لغو فرمانها و آرگومان ها در داخل سطح ویرایش بازگشتی
+استفاده می شود.
+
+
+
+* دریافت کمک بیشتر
+-------------------
+
+در این آموزش سعی شده است اطلاعات کافی برای شروع به استفاده از Emacs در
+اختیار شما قرار گیرد. اطلاعات موجود در مورد Emacs آنقدر زیاد است که توضیح
+همه چیز در اینجا غیرممکن است. با این حال، ممکن است بخواهید اطلاعات بیشتری
+در مورد Emacs کسب کنید زیرا Emacs دارای بسیاری از ویژگی های مفید دیگر است.
+Emacs فرمانهایی رابرای خواندن اسناد در مورد Emacs ارائه می دهد. فرمانهای
+"help" همه با کاراکتر CONTROL-h که " کارکتر Help" نامیده می شود شروع
+می شوند.
+
+
+برای استفاده از ویژگی های Help، کاراکتر C-h و سپس کارکتری که می گوید شما
+چه نوع کمکی می خواهید را تایپ کنید. اگر شما واقعاً گم شده اید، ? C-h را
+تایپ کنید و Emacs به شما خواهد گفت که چه نوع کمکی می تواند ارائه دهد. اگر
+C-h را تایپ کرده اید و به این نتیجه رسیده اید که هیچ کمکی نمی خواهید، فقط
+برای لغو آن، C-g را تایپ کنید.
+
+(اگر C-h پیامی در مورد راهنما در پایین صفحه نمایش نمی دهد،
+روی صفحه به جای آن کلید F1 یا< M-x help <Return را تایپ کنید.)
+
+اساسی ترین ویژگی HELP یا کمک، C-h c است. تایپ کنید C-h، کاراکتر c و یک
+کاراکتر یا دنباله فرمان؛ سپس Emacs یک خلاصه بسیار کوتاه از شرح فرمان نمایش
+می دهد.
+
+‏ >> C-h c C-p را تایپ کنید.
+
+پیام باید چیزی شبیه این باشد:
+
+‏ C-p runs the command previous-line
+
+این "نام فرمان -- function" را به شما می گوید. نام فرمان از بابت کاری که
+فرمان انجام می دهد انتخاب می شود. نام فرمان می تواند به عنوان اطلاعات
+امدادی بسیار مختصر باشد - برای یادآوری فرمانهایی که شما قبلا یاد گرفته اید.
+
+
+فرمانهایی چند کاراکتری مانند C-x C-s و ESC>v> (به جای M-v،اگر کلید META یا
+ALT ندارید) همچنین پس از C-h c نیز مجاز هستند.
+
+
+برای دریافت اطلاعات بیشتر در مورد یک فرمان، به جای C-h c از C-h k استفاده
+کنید.
+
+
+‏>> C-h k C-p را تایپ کنید.
+
+این مستندات تابع و همچنین نام آن را در یک پنجره ایمکس نمایش می دهد.
+وقتی خواندن خروجی تمام شد، برای خلاص شدن از شر آن پنجره C-x 1 را تایپ کنید.
+شما مجبور نیستید این کار را به سرعت انجام دهید.
+می توانید در حین مراجعه به متن راهنما مقداری ویرایش انجام دهید
+و سپس C-x 1 را تایپ کنید.
+
+در اینجا چند گزینه مفید دیگر C-h وجود دارد:
+
+‏ C-h x یک فرمان را توصیف کنید. شما نام آن فرمان را تایپ می کنید.
+
+
+>> فرمانِ <C-h x previous-line <Return را تایپ کنید.
+ این تمام اطلاعات ایمکس را در مورد آن نمایش می دهد.
+ تابعی که فرمان C-p را پیاده سازی می کند.
+
+یک فرمان مشابه C-h v اطلاعات امدادیِ متغیرها "variables" را نمایش می دهد, و
+گاهی اجازه میدهد تا بتوانید مقادیر متغیرها را برای خاص کردن رفتار ایمکس
+تنظیم کنید. زمانی که ایمکس از آن درخواست کرد، باید نام متغیر را تایپ کنید.
+
+‏ C-h a فرمان Apropos.
+ یک کلمه کلیدی را تایپ کنید و ایمکس تمام فرمانهایی که نام
+ آنها حاوی آن کلمه کلیدی است لیست میکند. همه این فرمانها
+ را می توان با META-x احضار کرد. برای برخی از فرمانها،
+ Command Apropos نیز یک فهرست دنباله ای است از یک یا چند
+ کاراکتر که بافرمان یکسان اجرا می شود.
+
+
+>> فرمان <c-h a file <Return راتایپ کنید.
+
+در پنجره ای دیگر لیستی از تمام فرمانهایی M-x با "file" به نام آنها نمایش
+داده می شود. شما فرمانهای کاراکتر را در کنار آن نام فرمانهای مربوطه (مانند
+C-x C-f در کنار find-file) خواهید دید.
+
+
+>> برای پیمایش پنجره راهنما، C-M-v را تایپ کنید. این را چند بار انجام دهید.
+
+‏>> C-x 1 را تایپ کنید تا پنجره راهنما را حذف کنید.
+
+‏ C-h i خواندن کتابچه راهنمای همراه (با نام مستعار اطلاعات Info).
+ این فرمان شما را به یک بافر ویژه به نام "*info*" یا
+ اطلاعات قرار می دهد که در آن شما می توانید کتابچه
+ راهنمای بسته های نصب شده روی سیستم خود را بخوانید. برای
+ خواندن کتابچه راهنما < m emacs<Return را تایپ کنید. اگر
+ قبلاً از Info استفاده نکرده‌اید، Emacs و h را تایپ کنید,
+ آن شما را به یک راهنمای تور از امکانات حالت info می برد.
+ پس از اتمام این آموزش، باید به کتابچه راهنمای
+ Emacs Info به عنوان مستندات اصلی خود مراجعه کنید.
+
+
+* ویژگی های بیشتر
+------------------
+
+شما می‌توانید با مطالعه کتابچه راهنمای ایمکس اطلاعات بیشتری کسب کنید. مانند
+یک کتاب چاپ شده، یا داخل Emacs (از منوی Help یا C-h r استفاده کنید). دو
+ویژگی که ممکن است به خصوص دوست داشته باشید، توانایی تکمیل "Completion" که
+باعث کمتر تایپ کردن میشود و dired، که مدیریت رسیدگی به فایل را ساده می کند.
+
+تکمیل راهی برای جلوگیری از تایپ غیر ضروری است. به عنوان مثال، اگر شما
+می‌خواهید به بافر *Messages* بیاید، می‌توانید< C-x b *M<Tab را تایپ کنید، و
+Emacs بقیه نام بافر را تا جایی که می تواند از آنچه قبلاً تایپ کرده اید پر
+می کند. تکمیل کردن هم چنین برای نام فرمانها ونام فایل ها به کار می آید. در
+کتابچه راهنمای ایمکس، در بخشی به نام "تکمیل Completion " توضیح داده شده
+است.
+
+
+با Dired شما قادر هستید تا فایل ها (و به صورت اختیاری زیر شاخه های آن) را
+در یک فهرست کنید. در اطراف آن لیست حرکت کنید، بازدید کنید، نام خود را
+تغییر دهید، حذف کنید و به صورت دیگر روی فایل ها کار کنید. در کتابچه
+راهنمای ایمکس در بخشی به نام "Dired" توضیح داده شده است.
+
+
+این کتابچه راهنمای بسیاری از ویژگی های دیگر ایمکس را نیز توضیح می دهد.
+
+
+* جمع بندی
+------------
+
+برای خروج از Emacs از C-x C-c استفاده کنید.
+
+این آموزش برای همه کاربران جدید باید قابل درک باشد، بنابراین اگر
+چیز مبهمی پیدا کردید، ننشینید و تو سر خودتان نزنید - شکایت کنید!
+
+
+* کپی برداری
+--------------
+
+این آموزش حاصل زنجیره ای طولانی از آموزش های Emacs است که با کتابی به نوشته
+Stuart Cracraft سر چشمه گرفت.
+
+این نسخه از آموزش بخشی از GNU Emacs است. دارای حق چاپ است
+و با مجوز برای توزیع کپی در شرایط خاص همراه است:
+
+ Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
+
+ This file is part of GNU Emacs.
+
+ GNU Emacs is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ GNU Emacs is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+لطفاً فایل COPYING را بخوانید و سپس کپی هایی از GNU Emacs را به دوستانتان بدهید.
+کمک کنید تا از شر قاعدیِ اشتباهِ کپی رایت غربی راحت شویم.
+
+
+
+--- end of TUTORIAL.fa ---
+
+;;; Local Variables:
+;;; coding: utf-8
+;;; bidi-display-reordering: t
+;;; sentence-end-double-space: nil
+;;; bidi-paragraph-direction: nil
+;;; fill-column: 74
+;;; End:
diff --git a/etc/tutorials/TUTORIAL.translators b/etc/tutorials/TUTORIAL.translators
index 64d71b61e84..222703cdb9f 100644
--- a/etc/tutorials/TUTORIAL.translators
+++ b/etc/tutorials/TUTORIAL.translators
@@ -30,6 +30,10 @@ Maintainer: Rafael Sepúlveda <drs@gnulinux.org.mx>
Author: Protesilaos Stavrou <info@protesilaos.com>
Maintainer: Protesilaos Stavrou <info@protesilaos.com>
+* TUTORIAL.fa:
+Author: Mohsen BANAN <emacs@mohsen.1.banan.byname.net>
+Maintainer: Mohsen BANAN <emacs@mohsen.1.banan.byname.net>
+
* TUTORIAL.fr:
Author: Éric Jacoboni <jaco@teaser.fr>
Maintainer: Éric Jacoboni <jaco@teaser.fr>
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index 518436bd961..9aea5e27063 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -695,6 +695,16 @@ with L, LRE, or LRO Unicode bidi character type.")
(set-case-syntax c "_" tbl)
(setq c (1+ c)))
+ ;; Traditional Mongolian
+ (setq c #x1800)
+ (while (<= c #x180A)
+ (set-case-syntax c "." tbl)
+ (setq c (1+ c)))
+ (setq c #x11660)
+ (while (<= c #x1166C)
+ (set-case-syntax c "." tbl)
+ (setq c (1+ c)))
+
;; Coptic
;; There's no Coptic category. However, Coptic letters that are
;; part of the Greek block above get the Greek category, and those
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index eb1c7f53d36..b72c68d9d59 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -648,6 +648,8 @@
(nil . "MuleArabic-1")
(nil . "MuleArabic-2")
(nil . "ISO8859-6"))
+ (mongolian ,(font-spec :registry "iso10646-1"
+ :otf '(mong nil (init medi fina isol))))
(hebrew ,(font-spec :registry "iso10646-1" :script 'hebrew)
(nil . "ISO8859-8"))
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index ffed1c808f7..7af87e65703 100644
--- a/lisp/language/cyrillic.el
+++ b/lisp/language/cyrillic.el
@@ -256,6 +256,16 @@ Support for Russian using koi8-r and the russian-computer input method.")
\(The name Belarusian replaced Byelorussian in the early 1990s.)"))
'("Cyrillic"))
+;; The Mongolian-traditional language environment is in misc-lang.el.
+(set-language-info-alist
+ "Mongolian-cyrillic" '((coding-system utf-8)
+ (coding-priority utf-8)
+ (input-method . "cyrillic-mongolian")
+ (sample-text . "Mongolian (монгол хэл) Сайн байна уу?")
+ (documentation
+ . "Support for Mongolian language with Cyrillic alphabet."))
+ '("Cyrillic"))
+
(provide 'cyrillic)
;;; cyrillic.el ends here
diff --git a/lisp/language/misc-lang.el b/lisp/language/misc-lang.el
index fe283e8769c..792155f1de5 100644
--- a/lisp/language/misc-lang.el
+++ b/lisp/language/misc-lang.el
@@ -74,10 +74,11 @@ and Italian.")))
(coding-priority utf-8 iso-8859-6 windows-1256)
(input-method . "farsi-transliterate-banan")
(sample-text . "Persian فارسی")
- (documentation . "Bidirectional editing is supported.")))
+ (documentation . "Bidirectional editing is supported.")
+ (tutorial . "TUTORIAL.fa")))
(defcustom arabic-shaper-ZWNJ-handling nil
- "How to handle ZWMJ in Arabic text rendering.
+ "How to handle ZWNJ (Zero-width Non-Joiner) in Arabic text rendering.
This variable controls the way to handle a glyph for ZWNJ
returned by the underling shaping engine.
@@ -339,6 +340,30 @@ Coptic language using the Coptic script is supported in this
language environment."))
'("Misc"))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Traditional Mongolian
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; The Mongolian-cyrillic language environment is in cyrillic.el.
+(set-language-info-alist
+ "Mongolian-traditional" '((coding-system utf-8)
+ (coding-priority utf-8)
+ ; (input-method . "FIXME")
+ (sample-text . "Mongolian Traditional (ᠮᠣᠩᠭᠣᠯ ᠪᠢᠴᠢᠭ᠋) ᠰᠠᠶᠢᠨ ᠪᠠᠶᠢᠨ᠎ᠠ ᠤᠤ?")
+ (documentation
+ . "Support for Mongolian language with traditional script."))
+ '("Misc"))
+
+;; Composition rules for Mongolian Traditional script.
+(set-char-table-range
+ composition-function-table
+ '(#x1820 . #x18AF)
+ (list (vector "[\u200C\u200D][\u1820-\u18AF][\u200C\u200D]?"
+ 1 'font-shape-gstring)
+ (vector "[\u1820-\u18AF][\u200C\u200D]" 0 'font-shape-gstring)
+ (vector "[\u1820-\u18AF\u202F\u180B-\u180F\u1807]+"
+ 0 'font-shape-gstring)))
+
(provide 'misc-lang)
;;; misc-lang.el ends here
diff --git a/lisp/org/ob-R.el b/lisp/org/ob-R.el
index 4ee091118e4..f2cc069aa5e 100644
--- a/lisp/org/ob-R.el
+++ b/lisp/org/ob-R.el
@@ -36,7 +36,7 @@
(require 'ob)
(declare-function orgtbl-to-tsv "org-table" (table params))
-(declare-function R "ext:essd-r" (&optional start-args))
+(declare-function run-ess-r "ext:ess-r-mode" (&optional start-args))
(declare-function inferior-ess-send-input "ext:ess-inf" ())
(declare-function ess-make-buffer-current "ext:ess-inf" ())
(declare-function ess-eval-buffer "ext:ess-inf" (vis))
@@ -276,7 +276,8 @@ This function is called by `org-babel-execute-src-block'."
(when (get-buffer session)
;; Session buffer exists, but with dead process
(set-buffer session))
- (require 'ess) (R)
+ (require 'ess-r-mode)
+ (set-buffer (run-ess-r))
(let ((R-proc (get-process (or ess-local-process-name
ess-current-process-name))))
(while (process-get R-proc 'callbacks)
diff --git a/lisp/org/ob-js.el b/lisp/org/ob-js.el
index 910c1168667..de7ea91317f 100644
--- a/lisp/org/ob-js.el
+++ b/lisp/org/ob-js.el
@@ -69,7 +69,10 @@
:safe #'stringp)
(defvar org-babel-js-function-wrapper
- "require('process').stdout.write(require('util').inspect(function(){%s}()));"
+ ;; Note that newline after %s - it makes sure that closing
+ ;; parenthesis are not shadowed if the last line of the body is a
+ ;; line comment.
+ "require('process').stdout.write(require('util').inspect(function(){%s\n}()));"
"Javascript code to print value of body.")
(defun org-babel-execute:js (body params)
diff --git a/lisp/org/oc.el b/lisp/org/oc.el
index 260a4d3e1a7..8a7b662098a 100644
--- a/lisp/org/oc.el
+++ b/lisp/org/oc.el
@@ -1232,7 +1232,9 @@ from the processor set in `org-cite-activate-processor'."
(let ((cite (org-with-point-at (match-beginning 0)
(org-element-citation-parser))))
(when cite
- (funcall activate cite)
+ ;; Do not alter match data as font-lock expects us to set it
+ ;; appropriately.
+ (save-match-data (funcall activate cite))
;; Move after cite object and make sure to return
;; a non-nil value.
(goto-char (org-element-property :end cite)))))))
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 15e4a50877a..b82e915ecd1 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.6.4-2-g0f6ae7"))
+ (let ((org-git-version "release_9.6.4-9-g8eb209"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index f7c2b6d16d1..61862b3d63b 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -3483,13 +3483,17 @@ Make sure that you only list packages here which:
:group 'org-export-latex
:set 'org-set-packages-alist
:get 'org-get-packages-alist
- :type '(repeat
- (choice
- (list :tag "options/package pair"
- (string :tag "options")
- (string :tag "package")
- (boolean :tag "Snippet"))
- (string :tag "A line of LaTeX"))))
+ :type
+ '(repeat
+ (choice
+ (list :tag "options/package pair"
+ (string :tag "options")
+ (string :tag "package")
+ (boolean :tag "snippet")
+ (choice
+ (const :tag "All compilers include this package" nil)
+ (repeat :tag "Only include from these compilers" string)))
+ (string :tag "A line of LaTeX"))))
(defgroup org-appearance nil
"Settings for Org mode appearance."
@@ -8440,7 +8444,10 @@ a link."
(dolist (link (if (stringp links) (list links) links))
(search-forward link nil links-end)
(goto-char (match-beginning 0))
- (org-open-at-point arg)))))))
+ ;; When opening file link, current buffer may be
+ ;; altered.
+ (save-current-buffer
+ (org-open-at-point arg))))))))
;; On a footnote reference or at definition's label.
((or (eq type 'footnote-reference)
(and (eq type 'footnote-definition)
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index 26f8742bec8..768bf402b70 100644
--- a/lisp/org/ox-latex.el
+++ b/lisp/org/ox-latex.el
@@ -1820,9 +1820,11 @@ INFO is a plist used as a communication channel. See
"Protect special chars, then wrap TEXT in \"\\texttt{}\"."
(format "\\texttt{%s}"
(replace-regexp-in-string
- "--\\|[\\{}$%&_#~^]"
+ "--\\|<<\\|>>\\|[\\{}$%&_#~^]"
(lambda (m)
(cond ((equal m "--") "-{}-{}")
+ ((equal m "<<") "<{}<{}")
+ ((equal m ">>") ">{}>{}")
((equal m "\\") "\\textbackslash{}")
((equal m "~") "\\textasciitilde{}")
((equal m "^") "\\textasciicircum{}")
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 7c3069ca269..9d703b5d048 100644
--- a/lisp/tab-bar.el
+++ b/lisp/tab-bar.el
@@ -1571,15 +1571,14 @@ After the tab is created, the hooks in
;; Handle the case when it's called in the active minibuffer.
(when (minibuffer-selected-window)
(select-window (minibuffer-selected-window)))
- ;; Remove window parameters that can cause problems
- ;; with `delete-other-windows' and `split-window'.
- (unless (eq tab-bar-new-tab-choice 'clone)
- (set-window-parameter nil 'window-atom nil)
- (set-window-parameter nil 'window-side nil))
- (let ((ignore-window-parameters t))
+ (let ((ignore-window-parameters t)
+ (window--sides-inhibit-check t))
(if (eq tab-bar-new-tab-choice 'clone)
;; Create new unique windows with the same layout
(window-state-put (window-state-get))
+ ;; Remove window parameters that can cause problems
+ ;; with `delete-other-windows' and `split-window'.
+ (set-window-parameter nil 'window-atom nil)
(delete-other-windows)
(if (eq tab-bar-new-tab-choice 'window)
;; Create new unique window from remaining window
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index 0afe565c80b..eb494be8d4d 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -650,6 +650,7 @@ with some explanatory links."
(delete-region prop-start prop-end))))))
(defvar tutorial--starting-point)
+(put 'tutorial--starting-point 'permanent-local t)
(defun tutorial--save-on-kill ()
"Query the user about saving the tutorial when killing Emacs."
(when (buffer-live-p tutorial--buffer)
diff --git a/src/fns.c b/src/fns.c
index 02388fa60ed..bb6efdda655 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -6141,29 +6141,40 @@ second optional argument ABSOLUTE is non-nil, the value counts the lines
from the absolute start of the buffer, disregarding the narrowing. */)
(register Lisp_Object position, Lisp_Object absolute)
{
- ptrdiff_t pos, start = BEGV_BYTE;
+ ptrdiff_t pos_byte, start_byte = BEGV_BYTE;
if (MARKERP (position))
- pos = marker_position (position);
+ {
+ /* We don't trust the byte position if the marker's buffer is
+ not the current buffer. */
+ if (XMARKER (position)->buffer != current_buffer)
+ pos_byte = CHAR_TO_BYTE (marker_position (position));
+ else
+ pos_byte = marker_byte_position (position);
+ }
else if (NILP (position))
- pos = PT;
+ pos_byte = PT_BYTE;
else
{
CHECK_FIXNUM (position);
- pos = XFIXNUM (position);
+ ptrdiff_t pos = XFIXNUM (position);
+ /* Check that POSITION is valid. */
+ if (pos < BEG || pos > Z)
+ args_out_of_range_3 (position, make_int (BEG), make_int (Z));
+ pos_byte = CHAR_TO_BYTE (pos);
}
if (!NILP (absolute))
- start = BEG_BYTE;
+ start_byte = BEG_BYTE;
+ else if (NILP (absolute))
+ pos_byte = clip_to_bounds (BEGV_BYTE, pos_byte, ZV_BYTE);
- /* Check that POSITION is in the accessible range of the buffer, or,
- if we're reporting absolute positions, in the buffer. */
- if (NILP (absolute) && (pos < BEGV || pos > ZV))
- args_out_of_range_3 (make_int (pos), make_int (BEGV), make_int (ZV));
- else if (!NILP (absolute) && (pos < 1 || pos > Z))
- args_out_of_range_3 (make_int (pos), make_int (1), make_int (Z));
+ /* Check that POSITION is valid. */
+ if (pos_byte < BEG_BYTE || pos_byte > Z_BYTE)
+ args_out_of_range_3 (make_int (BYTE_TO_CHAR (pos_byte)),
+ make_int (BEG), make_int (Z));
- return make_int (count_lines (start, CHAR_TO_BYTE (pos)) + 1);
+ return make_int (count_lines (start_byte, pos_byte) + 1);
}
diff --git a/src/treesit.c b/src/treesit.c
index cbcc688571b..ef272fb8871 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -404,6 +404,9 @@ init_treesit_functions (void)
static Lisp_Object Vtreesit_str_libtree_sitter;
static Lisp_Object Vtreesit_str_tree_sitter;
+#ifndef WINDOWSNT
+static Lisp_Object Vtreesit_str_dot_0;
+#endif
static Lisp_Object Vtreesit_str_dot;
static Lisp_Object Vtreesit_str_question_mark;
static Lisp_Object Vtreesit_str_star;
@@ -543,8 +546,21 @@ treesit_load_language_push_for_each_suffix (Lisp_Object lib_base_name,
suffixes = Vdynamic_library_suffixes;
FOR_EACH_TAIL (suffixes)
- *path_candidates = Fcons (concat2 (lib_base_name, XCAR (suffixes)),
- *path_candidates);
+ {
+ Lisp_Object candidate1 = concat2 (lib_base_name, XCAR (suffixes));
+#ifndef WINDOWSNT
+ /* On Posix hosts, support libraries named with ABI version
+ numbers. In the foreseeable future we only need to support
+ version 0.0. For more details, see
+ https://lists.gnu.org/archive/html/emacs-devel/2023-04/msg00386.html. */
+ Lisp_Object candidate2 = concat2 (candidate1, Vtreesit_str_dot_0);
+ Lisp_Object candidate3 = concat2 (candidate2, Vtreesit_str_dot_0);
+
+ *path_candidates = Fcons (candidate3, *path_candidates);
+ *path_candidates = Fcons (candidate2, *path_candidates);
+#endif
+ *path_candidates = Fcons (candidate1, *path_candidates);
+ }
}
/* Load the dynamic library of LANGUAGE_SYMBOL and return the pointer
@@ -3948,6 +3964,10 @@ the symbol of that THING. For example, (or block sexp). */);
Vtreesit_str_libtree_sitter = build_pure_c_string ("libtree-sitter-");
staticpro (&Vtreesit_str_tree_sitter);
Vtreesit_str_tree_sitter = build_pure_c_string ("tree-sitter-");
+#ifndef WINDOWSNT
+ staticpro (&Vtreesit_str_dot_0);
+ Vtreesit_str_dot_0 = build_pure_c_string (".0");
+#endif
staticpro (&Vtreesit_str_dot);
Vtreesit_str_dot = build_pure_c_string (".");
staticpro (&Vtreesit_str_question_mark);