diff options
author | Eli Zaretskii <eliz@gnu.org> | 2023-04-25 09:57:23 -0400 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2023-04-25 09:57:23 -0400 |
commit | 095ec506d03b76155b399fd7b23554279b2cfee0 (patch) | |
tree | 19d842d92c57cf863e69858bb85e0c1c311c4308 | |
parent | f55ac7a74510d68f02d17a034571350f9876017f (diff) | |
parent | 524e161a536c1c803f453f286430ba1a4e36694e (diff) | |
download | emacs-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.texi | 11 | ||||
-rw-r--r-- | etc/HELLO | 4 | ||||
-rw-r--r-- | etc/NEWS.29 | 22 | ||||
-rw-r--r-- | etc/tutorials/TUTORIAL | 2 | ||||
-rw-r--r-- | etc/tutorials/TUTORIAL.fa | 1169 | ||||
-rw-r--r-- | etc/tutorials/TUTORIAL.translators | 4 | ||||
-rw-r--r-- | lisp/international/characters.el | 10 | ||||
-rw-r--r-- | lisp/international/fontset.el | 2 | ||||
-rw-r--r-- | lisp/language/cyrillic.el | 10 | ||||
-rw-r--r-- | lisp/language/misc-lang.el | 29 | ||||
-rw-r--r-- | lisp/org/ob-R.el | 5 | ||||
-rw-r--r-- | lisp/org/ob-js.el | 5 | ||||
-rw-r--r-- | lisp/org/oc.el | 4 | ||||
-rw-r--r-- | lisp/org/org-version.el | 2 | ||||
-rw-r--r-- | lisp/org/org.el | 23 | ||||
-rw-r--r-- | lisp/org/ox-latex.el | 4 | ||||
-rw-r--r-- | lisp/tab-bar.el | 11 | ||||
-rw-r--r-- | lisp/tutorial.el | 1 | ||||
-rw-r--r-- | src/fns.c | 35 | ||||
-rw-r--r-- | src/treesit.c | 24 |
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); |