From 6d0bd9ba728ea8714baf9eef1dc9ec34000e2e96 Mon Sep 17 00:00:00 2001 From: Primoz PETERLIN Date: Tue, 17 Jan 2012 22:16:42 +0800 Subject: Update Slovenian tutorial. --- admin/FOR-RELEASE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'admin/FOR-RELEASE') diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index daf8e33d041..6b10d51b970 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -117,7 +117,7 @@ TUTORIAL.pt_BR TUTORIAL.ro TUTORIAL.ru TUTORIAL.sk -TUTORIAL.sl +TUTORIAL.sl Primoz PETERLIN TUTORIAL.sv TUTORIAL.th TUTORIAL.zh @@ -203,7 +203,7 @@ help.texi hooks.texi index.texi internals.texi -intro.texi +intro.texi cyd keymaps.texi lists.texi loading.texi -- cgit v1.3 From 7a22e700110b98363a940b14efa8ad5af57c29e2 Mon Sep 17 00:00:00 2001 From: Ognyan Kulev Date: Sat, 21 Jan 2012 22:58:38 +0800 Subject: Update TUTORIAL.bg. --- admin/FOR-RELEASE | 6 +- etc/ChangeLog | 4 + etc/NEWS | 17 +- etc/tutorials/TUTORIAL.bg | 692 +++++++++++++++++++------------------ etc/tutorials/TUTORIAL.translators | 4 +- 5 files changed, 365 insertions(+), 358 deletions(-) (limited to 'admin/FOR-RELEASE') diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 6b10d51b970..9335e5b1fbe 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -100,10 +100,10 @@ names of the people who have checked it. SECTION READERS ---------------------------------- TUTORIAL cyd -TUTORIAL.bg +TUTORIAL.bg ogi TUTORIAL.cn TUTORIAL.cs -TUTORIAL.de +TUTORIAL.de wl TUTORIAL.eo TUTORIAL.es TUTORIAL.fr @@ -215,7 +215,7 @@ minibuf.texi modes.texi nonascii.texi numbers.texi -objects.texi +objects.texi cyd os.texi package.texi positions.texi diff --git a/etc/ChangeLog b/etc/ChangeLog index c6ba86a029a..60ccded8ad6 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2012-01-21 Ognyan Kulev + + * tutorials/TUTORIAL.bg: Updated; synchronize with TUTORIAL. + 2012-01-19 Werner Lemberg * tutorial/TUTORIAL.de: Updated; synchronize with TUTORIAL. diff --git a/etc/NEWS b/etc/NEWS index b22f79225d5..40a1c194365 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1382,20 +1382,19 @@ Use `filter-buffer-substring-functions' instead. * Changes in Emacs 24.1 on non-free operating systems --- -** On MS Windows, Emacs now warns when the obsolete _emacs init file is used, +** On MS Windows, Emacs warns when using the obsolete init file _emacs, and also when HOME is set to C:\ by default. -** New configure.bat option --enable-checking builds Emacs with extra -runtime checks. +** New configure.bat options -** New configure.bat option --distfiles to specify files to be -included in binary distribution. +*** --enable-checking builds Emacs with extra runtime checks. -** New configure.bat option --without-gnutls to disable automatic -GnuTLS detection. +*** --distfiles specifies files to be included in binary distribution. -** New configure.bat option --lib for general library linkage, works -with the USER_LIBS build variable. +*** --without-gnutls disables automatic GnuTLS detection. + +*** --lib for general library linkage, works with the USER_LIBS build +variable. ** New make target `dist' to create binary distribution for MS Windows. diff --git a/etc/tutorials/TUTORIAL.bg b/etc/tutorials/TUTORIAL.bg index 22f96f169b9..91198961bff 100644 --- a/etc/tutorials/TUTORIAL.bg +++ b/etc/tutorials/TUTORIAL.bg @@ -1,4 +1,4 @@ -Въведението на Емакс. Условията за копиране са в края на текста. +Въведение в Емакс. Условията за копиране са в края на текста. Командите на Емакс най-често включват клавишите CONTROL (понякога отбелязван с CTRL или CTL) и META (понякога отбелязван с EDIT или @@ -14,14 +14,14 @@ ALT). клавиша ESC и след това въведете <знак>. Ние записваме , за да отбележим клавиша ESC. -Важна бележка: в края на Емакс сесията въведете двата знака C-x C-c. -Знаците ">>" отляво ви дават указание да изпълните команда. Например: +Важна бележка: в края на Емакс сесията въведете C-x C-c. (Два знака.) +За да прекъснете частично въведена команда, използвайте C-g. +Знаците „>>“ отляво ви дават указание да изпълните команда. Например: <> ->> Сега въведете C-v (Покажи следващия екран), за да се придвижите към -следващия екран. - (Направете го сега, задръжте CONTROL, докато натискате v). - Отсега нататък вие ще правите това винаги, когато прочетете - екрана. +>> Сега въведете C-v (Показване на следващия екран), за да се придвижите + към следващия екран. (Направете го сега, задръжте CONTROL, + докато натискате „v“). Отсега нататък вие ще правите това винаги, + когато прочетете екрана. Забележете, че има припокриване на два реда, когато се придвижвате от екран в екран; това осигурява някаква приемственост, така че да можете @@ -30,8 +30,8 @@ ALT). Първото нещо, което трябва да знаете, е как да се придвижвате от едно място на текста към друго. Вие вече знаете как да се придвижвате екран напред, с C-v. За да се придвижите екран назад, въведете M-v -(задръжте клавиша META и натиснете v, или въведете v, ако нямате -клавиш META, EDIT или ALT). +(задръжте клавиша META и натиснете „v“, или въведете и после „v“, +ако нямате клавиш META, EDIT или ALT). >> Опитайте се да въведете M-v и след това C-v няколко пъти. @@ -49,7 +49,11 @@ ALT). >> Намерете курсора и си запомнете какъв е текстът около него. След това въведете C-l. - Намерете пак курсора и вижте, че същият текст е пак около курсора. + Намерете пак курсора и вижте, че същият текст е пак около курсора, + но сега вече в средата на екрана. + Ако пак натиснете C-l, тази част от текста ще се придвижи в горния + край на екрана. Натиснете отново C-l и този текст ще отиде в долния + край на екрана. Може също да използвате клавишите PageUp и PageDown за придвижване по екрани, ако вашият терминал ги притежава, но вие можете да редактирате @@ -65,7 +69,7 @@ ALT). Има няколко начина да го направите. Може да използвате клавишите стрелки, но е по-ефективно да държите ръцете си в стандартно положение и да използвате командите C-p, C-b, C-f и C-n. Тези знаци са -еквивалентни на четирите клавиши стрелки, ето така: +еквивалентни на четирите клавиши стрелки по следния начин: Предишен ред (Previous), C-p : @@ -76,38 +80,37 @@ ALT). Следващ ред (Next), C-n >> Придвижете курсора до реда в средата на тази диаграма, използвайки - C-n и C-p. След това натиснете C-l, за да видите цялата диаграма, + C-n и C-p. След това натиснете C-l и ще видите цялата диаграма, центрирана на екрана. Ще намерите, че запомнянето на тези букви по думите на английски на -действията, които извършват, е лесно: P за Previous (предишен), N за -Next (следващ), B за Backward (назад) и F за Forward (напред). Вие ще -използвате тези основни команди за придвижване на курсора през цялото -време. +действията, които извършват, е лесно: „P“ за Previous (предишен), „N“ +за Next (следващ), „B“ за Backward (назад) и „F“ за Forward (напред). +Вие ще използвате тези основни команди за придвижване на курсора през +цялото време. ->> Въведете няколко C-n, за да доведете курсора до този ред. +>> Въведете няколко пъти C-n, за да доведете курсора до този ред. ->> Придвижете се в реда с няколко C-f и след това с няколко C-p. +>> Придвижете се вътре в реда с няколко C-f и след това с няколко C-p. Вижте какво прави C-p, когато курсорът е в средата на реда. Всеки ред от текст завършва със знак за нов ред, който служи за -отделянето на реда от следващия ред. Последният ред във вашия файл -трябва да има знак за нов ред в края (но Емакс не изисква такъв, -когато прочита файла). +отделянето на реда от следващия ред. (Последният ред във вашия файл +трябва да има знак за нов ред в края, но Емакс не изисква такъв.) >> Опитайте C-b в началото на ред. Това трябва да ви придвижи в края на предишния ред. Това е така, защото курсорът се придвижва към знака за нов ред на предишния ред. -C-f може да придвижва през знак за нов ред точно както C-b. +C-f може да придвижва през знак за нов ред, точно както C-b. ->> Направете няколко C-b придвижвания, така че да добиете усещане къде - се намира курсорът. След това няколко C-f, за да се върнете в края - на реда. След това още няколко C-f, за да се придвижите до +>> Направете няколко придвижвания с C-b, така че да добиете усещане + къде се намира курсорът. След това няколко C-f, докато се върнете + в края на реда. След това още няколко C-f, за да се придвижите до следващия ред. Когато се придвижвате след горния или долния край на екрана, текстът -отвъд края се измества към екрана. Това се нарича "скролиране". То +отвъд края се измества към екрана. Това се нарича „скролиране“. То позволява на Емакс да придвижва курсора към зададеното място в текста, без да го изкарва извън екрана. @@ -146,9 +149,8 @@ Control- клавишни комбинации не са точно аналогични, всяка една от тях изглежда естествена. -Положението на курсора в текста се нарича също "точка". -Перефразирано, курсорът показва на екрана къде е разположена точката в -текста. +Положението на курсора в текста се нарича „точка“. Перефразирано, +курсорът показва на екрана къде е разположена точката в текста. Ето обобщение на простите действия, движещи курсора, включително придвижващите по дума и изречение: @@ -175,7 +177,7 @@ Control- която придвижва до началото на целия текст, и M-> (Meta по-голямо), която премества до края на целия текст. -При повечето терминали знакът "<" е отбелязан над запетаята, така че +При повечето терминали знакът „<“ е отбелязан над запетаята, така че трябва да използвате клавиша Shift, за да го напишете. На тези терминали трябва да използвате Shift, за да въведете и M-<; без клавиша Shift бихте въвели M-запетая. @@ -206,17 +208,17 @@ Shift (или EDIT или ALT), има друг, алтернативен начин да въведете числов аргумент: въведете цифрите, докато задържате клавиша META. Ние препоръчваме да научите начина с C-u, защото той работи на който и да -е терминал. Числовият аргумент се нарича също "префиксен аргумент", +е терминал. Числовият аргумент се нарича също „префиксен аргумент“, защото го въвеждате преди командата, за която е предназначен. -Например, C-u 8 C-f придвижва осем знака напред. +Например C-u 8 C-f придвижва осем знака напред. >> Опитайте използването на C-n или C-p с числов аргумент, за да придвижите курсора до ред, близък до този, само с една команда. Повечето команди използват числовия аргумент като брояч на повторенията, но някои го използват за други цели. Няколко команди -(но никоя от тези, които сте научили досега) го използват като флаг -- +(но никоя от тези, които сте научили досега) го използват като флаг – присъствието на числов аргумент, независимо от стойноста му, кара командата да върши нещо различно. @@ -234,13 +236,8 @@ C-v bar), в лявата страна на прозореца на Емакс. Вие можете да скролирате текста, щракайки с мишката в плъзгача. ->> Опитайте да натиснете средния бутон на върха на осветената област - вътре в плъзгача. Това би трябвало да скролира текста към - положение, определено от това колко високо или ниско сте щракнали. - ->> Опитайте се да движите мишката нагоре и надолу, докато сте - задържали десния бутон натиснат. Ще видите, че текстът се скролира - нагоре и надолу, като движите мишката. +Ако вашата мишка има търкалце, можете и него да използвате за +скролиране. * КОГАТО ЕМАКС Е БЛОКИРАЛ @@ -263,7 +260,7 @@ bar), * ЗАБРАНЕНИ КОМАНДИ ------------------- -Някои команди на Емакс са "забранени", така че начинаещите потребители +Някои команди на Емакс са „забранени“, така че начинаещите потребители да не могат да ги употребят по погрешка. Ако въведете някоя от забранените команди, Емакс извежда съобщение, @@ -272,16 +269,16 @@ bar), Ако наистина искате да изпробвате командата, въведете клавиша интервал в отговор на въпроса. Обикновено ако не искате да изпълните -забранената команда, отговаряте на въпроса с "n". +забранената команда, отговаряте на въпроса с „n“. >> Въведете C-x C-l (която е забранена команда), и след това въведете - "n" в отговор на въпроса. + „n“ в отговор на въпроса. * ПРОЗОРЦИ ---------- -Емакс може да управлява няколко прозореца, всеки извеждайки свой +Емакс може да управлява няколко „прозореца“, всеки извеждайки свой собствен текст. Ние ще обясним по-късно как да използвате няколко прозореца. Точно сега ние искаме да обясним как да се отървете от допълнителни прозорци и да се върнете към основното редактиране с един @@ -301,57 +298,52 @@ bar), >> Въведете C-x 1 и вижте как прозорецът с документацията изчезва. Тази команда не е като другите команди, които сте научили, в това -отношение, че се състои от два знака. Започва със знака C-x. Има -цяла редица от команди, които започват с C-x; много от тях имат нещо -общо с прозорци, файлове, буфери и свързаните с тях неща. Тези -команди са от два, три или четири знака. +отношение, че се състои от два знака. Започва със знака CONTROL-x. +Има цяла редица от команди, които започват с CONTROL-x; много от тях +имат нещо общо с прозорци, файлове, буфери и свързаните с тях неща. +Тези команди са от два, три или четири знака. * ВМЪКВАНЕ И ИЗТРИВАНЕ ---------------------- Ако искате да вмъкнете текст, просто го въведете. Знаците, които -могат да се виждат, като А, 7, * и т.н., се възприемат от Емакс като -текст и се вмъкват веднага. Въведете (клавишът за връщане в -началото на реда), за да вмъкнете знак за нов ред. - -Може да изтриете последния знак, който сте въвели, с въвеждане на -. е клавиш от клавиатурата -- същият, който -обикновено използвате извън Емакс, за да изтриете последния въведен от -вас знак. Обикновено е голям клавиш, на няколко реда разстояние от -клавиша , и обикновено е отбелязан с "Delete", "Del" или -"Backspace". +могат да се виждат, като А, 7, * и т.н., се вмъкват веднага. За да +вмъкнете знак за нов ред, натиснете (това е клавишът, който +понякога е отбелязван като „Enter“). -Ако големият клавиш там е с етикет "Backspace", тогава той е този, -който ще използвате за . Може да има още един клавиш с -етикет "Delete" някъде другаде, но той не е . +За да изтриете знака непосредствено преди текущото положение на +курсора, въведете . Обикновено това е клавишът, отбелязван като +„Backspace“ – нормалният за това действие и извън Емакс. -По-общо казано, изтрива знака точно преди текущото място на -курсора. +Може да има още един клавиш с етикет някъде другаде, но той +не е , за който става въпрос тук. ->> Направете това сега -- напишете няколко знака, после ги изтрийте с - въвеждане на няколко пъти. Не се безпокойте, че този - файл ще бъде променен; вие няма да промените първоначалното - въведение. Това е ваше лично копие. +>> Направете това сега – напишете няколко знака, после ги изтрийте с + въвеждане на няколко пъти. Не се безпокойте, че този файл ще + бъде променен; вие няма да промените първоначалното въведение. + Това е ваше лично копие. Когато ред от текста стане твърде дълъг, за да се събере в ред от -екрана, редът от текста се "продължава" на следващия ред. Обратна -наклонена черта ("\") (или, ако използвате графичен интерфейс, малка -изкривена стрелка) в дясната граница отбелязва ред, който е бил -продължен. +екрана, редът от текста се „продължава“ на следващия ред. Ако +използвате графичен дисплей, в малкото пространство отстрани на текста +(левият и десният „ръб“) ще се появят малки извити стрелки за +отбелязване къде редът продължава. Ако използвате текстов терминал, +продължените редове се отбелязват с обратна наклонена черта („\“) в +най-дясната колона на прозореца. >> Въведете текст, докато стигнете дясната граница, и продължете с вмъкването. Ще видите продължението на реда да се показва. ->> Използвайте няколко , за да изтриете текста, докато редът - се вмести в един екранен ред. Продължението на реда изчезва. +>> Използвайте няколко , за да изтриете текста, докато редът се + вмести в един екранен ред. Продължението на реда изчезва. Може да изтриете знака за нов ред точно както всеки друг знак. Изтриването на знака за нов ред между два реда ги слива в един ред. Ако полученият комбиниран ред е твърде дълъг, за да се вмести в ширината на екрана, той ще бъде показан като продължен ред. ->> Придвижете курсора в началото на ред и въведете . Това ще +>> Придвижете курсора в началото на ред и въведете . Това ще слее този ред с предишния. >> Въведете , за да вмъкнете наново знака за нов ред, който @@ -361,48 +353,52 @@ bar), на повторенията; това включва вмъкването на текстови знаци. Повтарянето на текстов знак го вмъква няколко пъти. ->> Опитайте това сега -- въведете C-u 8 *, за да вмъкнете ********. +>> Опитайте това сега – въведете C-u 8 *, за да вмъкнете ********. Сега вие сте научили най-основните начини за въвеждане на нещо в Емакс и поправяне на грешки. Можете също така да изтривате думи или редове. Ето обобщение на изтриващите действия: - изтриване на знака точно преди курсора - C-d изтриване на знака точно след курсора + Изтриване на знака точно преди курсора + C-d Изтриване на знака точно след курсора - M- изтриване на думата непосредствено преди курсора - M-d изтриване на думата след курсора + M- Изтриване на думата непосредствено преди курсора + M-d Изтриване на думата след курсора - C-k изтриване от мястото на курсора до края на реда - M-k изтриване до края на текущото изречение + C-k Изтриване от мястото на курсора до края на реда + M-k Изтриване до края на текущото изречение -Забележете, че и C-d, сравнени с M- и M-d, -разширяват подобието, започнато от C-f и M-f (добре, не е -наистина контролиращ знак, но нека не се безпокоим за това). C-k и -M-k са подобни на C-e и M-e в смисъл, че едните са за редове, а -другите -- за изречения. +Забележете, че и C-d, сравнени с M- и M-d, разширяват +подобието, започнато от C-f и M-f (добре, не е наистина +контролиращ знак, но нека не се безпокоим за това). C-k и M-k са +подобни на C-e и M-e в смисъл, че едните са за редове, а другите – за +изречения. -Можете също да премахнете всяка част от буфера с един универсален -начин. Придвижете се до единия край на частта и въведете C-@ или -C-интервал (което и да е от двете). Придвижете се до другия край на -частта и въведете C-w. Това ще изреже целия текст между тези два -края. +Можете също да премахнете всяка част от текста по един универсален +начин. Придвижете се до единия край и въведете C- ( е +интервалът).. Придвижете се до другия край на текста, който искате да +изтриете. Докато го правите, Емакс осветява текстът между курсора и +мястото, където се въвели C-. Накрая въведете C-w. Това ще +изреже целия текст между тези два края. ->> Придвижете курсора до знака "М" в началото на предишния абзац. ->> Въведете C-интервал. Емакс трябва да изведе съобщение "Mark set" в +>> Придвижете курсора до знака „М“ в началото на предишния абзац. +>> Въведете C-. Емакс трябва да изведе съобщение „Mark set“ в долния край на екрана. ->> Придвижете курсора до буквата "р" в "край" на втория ред от абзаца. ->> Въведете C-w. Това ще изреже текста, започващ от "М" и завършващ - точно преди "р". - -Разликата между "изрязване" (kill, cut) и "изтриване" (delete) е, че -"изрязаният" текст може да бъде вмъкнат наново, докато "изтритите" -неща не могат да се вмъкнат наново. Поставянето наново на изрязан -текст се нарича "вмъкване" (yank, paste). Общо казано, командите, -които отстраняват много текст, го изрязват (така че той да може да -бъде вмъкнат), докато командите, които отстраняват само един знак или +>> Придвижете курсора до буквата „р“ в „край“ на втория ред от абзаца. +>> Въведете C-w. Това ще изреже текста, започващ от „М“ и завършващ + точно преди „р“. + +Разликата между „изрязване“ (kill, cut) и „изтриване“ (delete) е, че +„изрязаният“ текст може да бъде вмъкнат наново, докато „изтритите“ +неща не могат да се вмъкнат наново (обаче можете да отмените +изтриването – вж. по-долу). Поставянето наново на изрязан текст се +нарича „вмъкване“ (yank, paste). Общо казано, командите, които +отстраняват много текст, го изрязват (така че той да може да бъде +вмъкнат), докато командите, които отстраняват само един знак или изтриват само празни редове и знаци, извършват изтриване (така че не -можете да вмъкнете наново този текст). +можете да вмъкнете наново този текст). и C-d изтриват в +обикновения случай, когато няма префиксен аргумент. При наличие на +аргумент те отрязват. >> Придвижете курсора до началото на ред, който не е празен. Тогава въведете C-k, за да изрежете текста на този ред. @@ -414,14 +410,16 @@ C-k C-k обработва числовите аргументи по специален начин: премахват се толкова на брой редове И тяхното съдържание. Това не е просто повторение. C-u 2 C-k изрязва два реда и техните знаци за нов ред; -въвеждането на C-k два пъти не прави това. +въвеждането два пъти на C-k не прави това. -Връщането обратно на текст се нарича "вмъкване". (Мислете за него +Връщането обратно на текст се нарича „вмъкване“. (Мислете за него като за изваждане обратно, или дръпване обратно, на текст, който е бил изрязан.) Можете да вмъквате изрязания текст или на същото място, -откъдето е бил премахнат, или на друго място в буфера, даже и в +откъдето е бил премахнат, или на друго място в буфера, или даже в различен файл. Можете да вмъквате един и същ текст няколко пъти; това -прави няколко копия от него. +прави няколко копия от него. Някои други редактори наричат +изрязването (kill) и вмъкването (yank) съответно изрязване (cut) и +поставяне (paste) (вж. Речника на Ръководството на Емакс). Командата за вмъкване е C-y. Тя вмъква наново последния изрязан текст в текущото място на курсора. @@ -466,31 +464,30 @@ C-k -------- Ако направите промяна в текста и след това решите, че това е било -грешка, вие можете да отмените промяната с командата за отменяне, C-x -u. +грешка, вие можете да отмените промяната с командата за отменяне, C-/. -Обикновено C-x u отменя промените, направени от една команда; ако -повтаряте C-x u няколко пъти последователно, всяко повторение отменя -още една команда. +Обикновено C-/ отменя промените, направени от една команда; ако +повтаряте C-/ няколко пъти последователно, всяко повторение отменя още +една команда. Но има две изключения: командите, които не променят текста, не се броят (това включва придвижването на курсора и скролиращите команди), и самовмъкващите се знаци обикновено се обработват на групи, всяка до -20 знака. (Това намалява броя на C-x u, които трябва да въведете, за -да отмените въведен текст.) +20 знака. (Това намалява броя на C-/, които трябва да въведете, за да +отмените въведен текст.) ->> Изрежете този ред с C-k, след това въведете C-x u и той трябва да - се появи отново. +>> Изрежете този ред с C-k, след това въведете C-/ и той трябва да се + появи отново. -C-_ е алтернативна отменяща команда; тя работи точно като C-x u, но е -по-лесна за въвеждане няколко пъти последователно. Недостатъкът на -C_- е, че на някои клавиатури не е очевидно как трябва да се въведе. -Затова осигуряваме и C-x u. На някои терминали може да въведете C-_ с -въвеждане на /, докато задържате CONTROL. +C-_ е алтернативна отменяща команда; тя работи точно като C-/. На +някои терминали въвеждането на C-/ всъщност изпраща C-_ на Емакс. +Като алтернатива, C-x u работи точно като C-/, но е по-неудобна за +въвеждане. -Числов аргумент към C-_ или C-x u действа като брояч на повторенията. +Числов аргумент към C-/, C-_ или C-x u действа като брояч на +повторения. -Може да отменята изтриване на текст точно както отменяте изрязване на +Може да отменяте изтриване на текст точно както отменяте изрязване на текст. Различието между изрязването на нещо и изтриването му въздейства дали ще може да го извадите с C-y; за отменянето няма разлика между двата вида. @@ -501,35 +498,35 @@ C_- За да направите текста, който редактирате, постоянен, трябва да го сложите във файл. В противен случай той ще изчезне, когато Емакс -приключи. За да сложите вашия текст във файл, трябва да "намерите" -файла преди да въвеждате текст. (Това също се нарича "посещаване" на -файла.) +приключи. За да сложите вашия текст във файл, трябва да „намерите“ +(find) файла преди да въвеждате текст. (Това също се нарича +„посещаване“ (visit) на файл.) Намиране на файл означава, че виждате съдържанието му в Емакс. В много случаи това е като да редактирате самия файл. Обаче промените, които правите, използвайки Емакс, не остават постоянни, докато не -"запишете" файла. Това е така, за да се предотврати оставянето на -полупроменен файл в системата, когато не искате това. Дори когато +„запишете“ (save) файла. Това е така, за да се предотврати оставянето +на полупроменен файл в системата, когато не искате това. Дори когато записвате, Емакс оставя началния файл под променено име, в случай, че по-късно решите, че вашите промени са били грешка. -Ако погледнете в дъното на екрана, ще видите ред, който започва и -завършва с тирета и започва с "-b:-- TUTORIAL.bg" или нещо подобно. -Тази част от екрана показва името на файла, който сте посетили. Точно -сега вие сте посетили файл, наречен "TUTORIAL.bg", който е вашето -лично копие-чернова на Емакс въведението. Когато намерите файл в -Емакс, името на този файл ще се появи на същото място. +Ако погледнете в дъното на екрана, ще видите ред, който започва с +тирета – „ b:--- TUTORIAL.bg“ или нещо подобно. Тази част от екрана +показва името на файла, който сте посетили. Точно сега вие сте +посетили файл, наречен „TUTORIAL.bg“, който е вашето лично +копие-чернова на Емакс въведението. Когато намерите файл в Емакс, +името на този файл ще се появи на това място. Особеност на командата за намиране на файл е, че трябва да кажете -името на файла, който искате. Ние го наричаме "четене на аргумент от -терминала" (в този случай аргументът е името на файла). След като +името на файла, който искате. Казваме, че командата „чете на +аргумент“ (в този случай аргументът е името на файла). След като въведете командата C-x C-f Намиране на файл Емакс ви подканя да въведете името на файла. Името на файла, което напишете, се появява в дъното на екрана. Редът в дъното на екрана се -нарича минибуфер, когато се използва за този вид вход. Можете да +нарича минибуфер, когато се използва за този вид въвеждане. Можете да използвате обикновените команди за редактиране на Емакс, за да редактирате името на файла. @@ -541,35 +538,36 @@ C_- Така че не намирате файл. Когато приключите с въвеждането на името на файла, въведете , -за да покажете това. Тогава C-x C-f тръгва да работи и намира файла, -който сте избрали. Минибуферът изчезва, когато командата C-x C-f -свърши. +за да завършите. Минибуферът изчезва и командата C-x C-f тръгва да +работи и намира файла, който сте избрали. След малко съдържанието на файла се появява на екрана и вие можете да редактирате съдържанието му. Когато пожелаете да запазите вашите промени за постоянно, въведете командата - C-x C-s Запазване на файла + C-x C-s Запис (save) на файла Това копира текста от Емакс във файла. Първия път, когато това се направи, Емакс преименува началния файл с ново име, така че той да не -се изгуби. Новото име се построява с добавяне на "~" в края на името +се изгуби. Новото име се построява с добавяне на „~“ в края на името на началния файл. Когато запазването е свършило, Емакс извежда името на файла, който е бил записан. Трябва да записвате достатъчно често, така че да не -изгубите много работа, ако системата се срине по някаква причина. +изгубите много работа, ако системата се срине по някаква причина +(вж. раздела „Автоматичен запис“ по-долу). ->> Въведете C-x C-s, запазвайки вашето копие от въведението. - Това трябва да изведе "Wrote ...TUTORIAL.bg" в дъното на екрана. +>> Въведете C-x C-s TUTORIAL.bg . + Това ще запише въведението във файл с име TUTORIAL.bg и ще покаже + „Wrote ...TUTORIAL.bg“ в дъното на екрана. Може да намерите съществуващ файл, да го разгледате и да го редактирате. Можете също да намерите файл, който не съществува. Това е начинът за създаване на нови файлове в Емакс: намирате файла, който ще бъде в началото празен, и тогава започвате вмъкването на текста за -файла. Когато говорите за "записване" на файл, Емакс всъщност ще -създаде файла с текста, който сте въвели. Оттам нататък може да -считате, че редактирате вече съществуващ файл. +файла. Когато искате „запис“ на файл, Емакс всъщност ще създаде файла +с текста, който сте въвели. Оттам нататък може да считате, че +редактирате вече съществуващ файл. * БУФЕРИ @@ -579,53 +577,50 @@ C_- Можете да превключите обратно към него, като го намерите пак с C-x C-f. По този начин може да получите доста на брой файлове в Емакс. ->> Създайте файл с име "foo", въвеждайки C-x C-f foo . - Вмъкнете малко текст, редактирайте го и запазете "foo" с въвеждане - на C-x C-s. - Накрая въведете C-x C-f TUTORIAL.bg , за да се върнете - обратно във въведението. +Емакс съхранява текста на всеки файла в обект, наричан „буфер“. +Намирането на файл създава нов буфер вътре в Емакс. За да видите +списък с всички съществуващи буфери, въведете -Емакс запазва текста на всеки файл в обект, наричан "буфер". -Намирането на файл прави нов буфер в Емакс. За да видите списък на -буферите, които в момента съществуват във вашия Емакс, въведете + C-x C-b Списък на буферите - C-x C-b Показване на буферите +>> Опитайте C-x C-b още сега. ->> Опитайте C-x C-b сега. +Забележете, че всеки буфер има име, а също може да има и име на файл, +чието съдържание се пази в буфера. ВСЕКИ текст, който виждате в +прозорец на Емакс, винаги е част от някой буфер. -Вижте как всеки буфер има име, а понякога и име на файл за файла, -чието съдържание държи. ВСЕКИ текст, който виждате в Емакс прозорец, -е винаги част от някакъв буфер. +>> Въведете C-x 1, за да махнете списъка на буфери. ->> Въведете C-x 1, за да махнете списъка с буферите. - -Когато имате няколко буфера, само един от тях е "текущ" в даден момент +Когато имате няколко буфера, само един от тях е „текущ“ в даден момент от време. Това е буферът, който редактирате. Ако искате да -редактирате друг буфер, се нуждаете от "превключване" към него. Ако +редактирате друг буфер, се нуждаете от „превключване“ към него. Ако искате да се превключите към буфер, който съответства на файл, можете да го направите, като просто посетите файла отново с C-x C-f. Но има и по-лесен начин: използването на командата C-x b. В тази команда трябва да въведете името на буфера. ->> Въведете C-x b foo , за да се върнете към буфера "foo", - който държи текста на файла "foo". Тогава въведете C-x b TUTORIAL - , за да се върнете в това въведение. +>> Суздайте файл с име „foo“ чрез въвеждане на C-x C-f foo . + Тогава въведете C-x b TUTORIAL.bg , за да се върнете в това + въведение. В повечето случаи името на буфера е същото като името на файла (без частта в коя директория се намира). Обаче това не винаги е вярно. -Списъкът с буферите, който правите с C-x C-b, винаги ви показва името -на всеки буфер. +Списъкът с буферите, който правите с C-x C-b, винаги ви показва и +името на буфера, и името на файла. ВСЕКИ текст, който виждате в Емакс прозорец, е винаги част от някакъв -буфер. Някои буфери не съответстват на файлове. Например буферът, -именуван "*Buffer List*", не съответства на файл. Това е буферът, -който съдържа списъка с буферите, които сте направили с C-x C-b. -Буферът, именуван "*Messages*", също не съответства на файл; той +буфер. Някои буфери не съответстват на файлове. Буферът, именуван +„*Buffer List*“, които сте направили с C-x C-b, не съответства на +файл. Това е буферът, който съдържа списъка с буферите. Този буфер +TUTORIAL.bg отначало не е бил към файл, но вече е, защото в предишния +раздел въведохте C-x C-s и го записахте във файл. + +Буферът, именуван „*Messages*“, също не съответства на файл; той съдържа съобщенията, които се появяват в дъното на екрана по време на Емакс сесията. >> Въведете C-x b *Messages* , за да видите буфера със - съобщенията. След това въведете C-x b TUTORIAL , за да + съобщенията. След това въведете C-x b TUTORIAL.bg , за да се върнете към това въведение. Ако направите промени в текста на един файл и тогава намерите друг @@ -636,14 +631,15 @@ C-f. буфера на първия файл. Ще е неудобно да превключите обратно с C-x C-f, за да го запазите с C-x C-s. Така че имаме - C-x s Запазва някои буфери + C-x s Запис на някои (some) буфери C-x s пита за всеки буфер, който съдържа промени, които не сте -запазили. Въпросът за всеки такъв буфер е дали да бъде запазен. +запазили. Командата задава въпрос за всеки такъв буфер дали да бъде +запазен. ->> Вмъкнете ред в текста, след това въведете C-x s. - Трябва да бъдете попитан дали да запазите буфера, именуван "TUTORIAL". - Отговорете с "да" на въпроса, като въведете "y". +>> Вмъкнете ред с текст, след това въведете C-x s. + Трябва да бъдете попитан дали да запазите буфера, именуван „TUTORIAL.bg“. + Отговорете с „да“ на въпроса, като въведете „y“ (yes). * РАЗШИРЯВАНЕ НА НАБОРА КОМАНДИ @@ -659,53 +655,47 @@ C-x s Тези команди са общо взето полезни, но по-малко, отколкото командите, които досега сте научили. Вече видяхте две от тях: командите върху -файлове C-x C-f за намиране (Find) и C-x C-s за запазване (Save). -Друг пример е командата за край на Емакс сесията -- това е командата -C-x C-c. (Не се безпокойте, че може да изгубите всички промени, които -сте направили; C-x C-c предлага да запази всеки променен файл, преди -да премахне Емакс.) - -C-z е командата за излизане от Емакс *временно* -- така че да можете -да се върнете към същата Емакс сесия по-късно. - -На системи, които позволяват това, C-z "изоставя" (suspend) Емакс, -т.е. връща към обвивката, но не разрушава Емакс. В повечето обвивки -можете да продължите Емакс сесията с командата "fg" или с "%emacs". - -На системи, които не позволяват изоставяне, C-z създава нова -подобвивка, която върви под Емакс, за да ви даде шанс да стартирате -други програми и да се върнете към Емакс след това; това не е истинско -"излизане" от Емакс. В този случай командата на обвивката "exit" е -обикновеният начин да се върнете обратно към Емакс от подобвивката. - -Моментът да използвате C-x C-c е, когато искате да излезете от -системата. Това е и правилната команда за излизане, когато Емакс е -извикан от пощенска програма или други странични програми, тъй като те -може и да не знаят как да се справят с изоставянето на Емакс. При -обикновени обстоятелства, обаче, ако не сте тръгнали да излизате от -системата, по-добре е да изоставите Емакс с C-z, вместо да излизате от -Емакс. +файлове C-x C-f за намиране (Find) и C-x C-s за запис (Save). Друг +пример е командата за край на Емакс сесията -- това е командата C-x +C-c. (Не се безпокойте, че може да изгубите всички промени, които сте +направили; C-x C-c предлага да запази всеки променен файл, преди да +премахне Емакс.) + +Ако сте на графичен дисплей, не е нужна специална команда за +придвижване от Емакс към друго работещо приложение. Можете да +извършите това с мишката или с команди към управлението на прозорци. +Но ако сте на текстов терминал, който може да показва само едно +приложение в даден момент, се нуждаете от начин за „изоставяне“ +(suspend) на Емакс и придвижване към други програми. + +C-z е командата за излизане от Емакс *временно* – така че да можете да +се върнете към същата Емакс сесия по-късно. Когато Емакс върви на +текстов терминал, C-z „изоставя“ Емакс, т.е. връща се към обвивката, +но не унищожава задачата (job) на Емакс. В повечето популярни обвивки +можете да продължите Емакс с командата „fg“ или с „%emacs“. Има много команди C-x. Ето списък на тези, които сте научили: - C-x C-f Намиране на файл. - C-x C-s Запазване на файл. - C-x C-b Списък на буферите. - C-x C-c Излизане от Емакс. - C-x 1 Изтриване на всички прозорци освен един. - C-x u Отмяна. - -Именуваните разширени команди са команди, които се използват даже още -по-рядко, или команди, които се използват само в определени режими. -Пример е командата replace-string, която заменя глобално един низ с -друг. Когато въведете M-x, Емакс ви подсказва в дъното на екрана с -M-x и вие трябва да въведете името на командата, в този случай -"replace-string". Просто въведете "repl s" и Емакс ще завърши -името. ( е клавишът Tab, обикновено намиращ се над клавиша -CapsLock или клавиша Shift близо до левия край на клавиатурата.) -Завършете името на командата с . - -Командата replace-string изисква два аргумента -- низът, който ще бъде + C-x C-f Намиране на файл + C-x C-s Запис на файл + C-x s Запис на някои буфери + C-x C-b Списък на буферите + C-x b Превключване към буфер + C-x C-c Излизане от Емакс + C-x 1 Изтриване на всички прозорци освен един + C-x u Отмяна + +Именуваните разширени (X) команди са команди, които се използват даже +още по-рядко, или команди, които се използват само в определени +режими. Пример е командата replace-string, която заменя глобално един +низ с друг. Когато въведете M-x, Емакс ви подсказва в дъното на +екрана с M-x и вие трябва да въведете името на командата, в този +случай „replace-string“. Просто въведете „repl s“ и Емакс ще +завърши името. ( е клавишът Tab, обикновено намиращ се над +клавиша CapsLock или клавиша Shift близо до левия край на +клавиатурата.) Завършете името на командата с . + +Командата replace-string изисква два аргумента – низът, който ще бъде заменян, и низът, който ще го замени. Трябва да завършите въвеждането на всеки аргумент с . @@ -713,28 +703,26 @@ CapsLock Тогава въведете M-x repl sпроменяизменя Забележете как този ред се променя: вие заменихте думата - п-р-о-м-е-н-я с "изменя", където и да се намира след началното + п-р-о-м-е-н-я с „изменя“, където и да се намира след началното място на курсора. -ЗАБЕЛЕЖКА: Превключването към въвеждане на кирилски буква става с C-\. - * АВТОМАТИЧНО ЗАПАЗВАНЕ ----------------------- Когато сте направили промени във файл, но още не сте го запазили, те могат да бъдат загубени, ако компютърът внезапно се изключи. За да ви -предпази от такива ситуации, Емакс периодично запазва "автоматично -запазван" файл за всеки файл, който редактирате. Името на автоматично +предпази от такива ситуации, Емакс периодично запазва „автоматично +запазван“ файл за всеки файл, който редактирате. Името на автоматично запазвания файл има # в началото и в края; например, ако вашият файл е -с име "hello.c", името на неговия автоматично запазван файл ще бъде +с име „hello.c“, името на неговия автоматично запазван файл ще бъде "#hello.c#". Когато запазвате файл по обикновения начин, Емакс изтрива неговия автоматично записван файл. Ако компютърът зависне, може да възстановите вашата автоматично запазвана редакция, като намерите файла както обикновено (файлът, който сте редактирали, не автоматично запазвания) и след това въведете -M-x recover file. Когато командата изиска потвърждение, +M-x recover-file . Когато командата изиска потвърждение, въведете yes, за да продължите и да възстановите автоматично запазваните данни. @@ -743,28 +731,28 @@ M-x recover file. -------------- Ако Емакс види, че въвеждате многознакови команди бавно, ще ви ги -покаже в дъното на екрана, в област, наричана "ехо област". Ехо +покаже в дъното на екрана, в област, наричана „ехо област“. Ехо областта обхваща последния ред от екрана. * РЕД НА РЕЖИМА ---------------- -Редът точно над ехо областта се нарича "ред на режима" (mode line). +Редът точно над ехо областта се нарича „ред на режима“ (mode line). Той показва нещо като: --b:** TUTORIAL.bg (Fundamental)--L670--58%---------------- + b:**- TUTORIAL.bg 63% L744 (Fundamental) Този ред дава полезна информация за състоянието на Емакс и текста, който редактирате. -Вече знаете какво означава името на файла -- това е файлът, който сте -намерили. -NN%-- показва вашата текуща позиция в текста; това -означава, че NN процента от текста е над върха на екрана. Ако -началото на файла е на екрана, ще се показва --Top-- (връх) вместо ---00%--. Ако края на файла е на екрана, ще се показва --Bot-- (дъно). -Ако гледате текст, който е толкова малък, че се показва изцяло на -екрана, редът на режима ще изведе --All--. +Вече знаете какво означава името на файла – това е файлът, който сте +намерили. NN% показва вашата текуща позиция в текста; това означава, +че NN процента от текста е над върха на екрана. Ако началото на файла +е на екрана, ще се показва „Top“ (връх) вместо „ 0%“. Ако края на +файла е на екрана, ще се показва „Bot“ (bottom – дъно). Ако гледате +текст, който е толкова малък, че се показва изцяло на екрана, редът на +режима ще изведе „All“ (всичко). Знакът L и цифрите показват мястото по друг начин: това е номерът на текущия ред на точката. @@ -776,13 +764,13 @@ M-x recover file. Частта от реда на режима вътре в скобите е, за да ви покаже в какъв режим на редактиране се намирате. Подразбиращият се режим е Fundamental (Основен), който използвате в момента. Това е пример за -"главен режим" (major mode). +„главен режим“ (major mode). Емакс има много главни режими. Някои от тях са предвидени за редактиране на различни езици и/или видове текст, като например режим -Лисп, режим Текст и други. Във всеки един момент от време точно един -главен режим е активен и неговото име може винаги да бъде намерено в -реда на режима, точно както "Fundamental" сега. +Lisp (Лисп), режим Text (текст) и други. Във всеки един момент от +време точно един главен режим е активен и неговото име може винаги да +бъде намерено в реда на режима, точно както „Fundamental“ сега. Всеки главен режим прави някои команди да се държат по различен начин. Например, има команди за редактиране на коментари в програми, и тъй @@ -793,9 +781,9 @@ Fundamental ( команда за превключване към режим Fundamental. Когато редактирате текст на естествен език, като този файл, -най-вероятно трябва да използвате режим Текст (text). +най-вероятно трябва да използвате режим Text (текст). ->> Въведете M-x text mode. +>> Въведете M-x text-mode . Не се безпокойте, никоя от Емакс командите, които сте научили, няма да се промени по някакъв съществен начин. Но може да забележите, че M-f @@ -804,13 +792,13 @@ Fundamental ( разделители на думи. Главните режими обикновено правят малки промени като тази: повечето -команди вършат "същата работа" във всеки главен режим, но работят по +команди вършат „същата работа“ във всеки главен режим, но работят по малко по-различен начин. За да видите документацията на вашия текущ главен режим, въведете C-h m. ->> Употребете C-u C-v веднъж или повече пъти, за да докарате този ред +>> Употребете C-l C-l веднъж или повече пъти, за да докарате този ред близо до върха на екрана. >> Въведете C-h m, за да видите как текстовият режим се различава от основния режим. @@ -824,20 +812,20 @@ m. малки режими, да използвате един малък режим, или да използвате някаква комбинация от няколко малки режима. -Един главен режим, който е много полезен, особено за редактиране на +Един малък режим, който е много полезен, особено за редактиране на текст на естествен език, е режимът на автоматично запълване (Auto Fill mode). Когато този режим е включен, Емакс автоматично разделя реда при мястото между думите, когато вмъквате текст и направите ред, който е твърде дълъг. Може да включите режима на автоматично запълване, като изпълните M-x -auto fill mode. Когато режимът е включен, може да го -изключите с M-x auto fill mode. Ако режимът е изключен, тази +auto-fill-mode . Когато режимът е включен, може да го +изключите с M-x auto-fill-mode. Ако режимът е изключен, тази команда го включва, а ако е включен, го изключва. Казваме, че -командата "обръща режима". +командата „превключва (toggle) режима“. ->> Въведете M-x auto fill mode сега. След това вмъкнете ред - от "asdf " отново и отново, докато не видите, че текстът се разделя +>> Въведете M-x auto-fill-mode сега. След това вмъкнете ред + от „asdf “ отново и отново, докато не видите, че текстът се разделя на два реда. Трябва да слагате интервали между думите, защото автоматичното запълване разделя редовете само при интервалите. @@ -866,51 +854,42 @@ auto fill mode. на низ е придвижваща курсора команда; тя премества курсора на следващото място, където се среща низът. -Командата за търсене на Емакс се различава от командата за търсене на -повечето редактори по това, че тя е "постъпкова". Това означава, че +Командата за търсене на Емакс е „постъпкова“. Това означава, че търсенето се извършва още докато въвеждате текста, който търсите. Командата за започване на търсене е C-s за търсене напред, и C-r за търсене назад. НО ПОЧАКАЙТЕ! Не ги пробвайте сега. -Когато въведете C-s, ще забележите, че низът "I-search" се появява +Когато въведете C-s, ще забележите, че низът „I-search“ се появява като подсказка в ехо областта. Това ви казва, че Емакс е в това, което се нарича постъпково търсене, чакайки ви да въвеждате текста, който искате да търсите. приключва търсенето. >> Сега въведете C-s, за да започнете търсенето. БАВНО, буква по - буква, въведете думата "търсене", изчаквайки след въвеждането на + буква, въведете думата „курсор“, изчаквайки след въвеждането на всеки знак, за да може да забележите какво става с курсора. Сега - извършихте търсене на "търсене" веднъж. ->> Въведете отново C-s, за да търсите друго съвпадение с "търсене". ->> Сега въведете три пъти и вижте как се придвижва курсора. + извършихте търсене на „курсор“ веднъж. +>> Въведете отново C-s, за да търсите друго съвпадение с „курсор“. +>> Сега въведете четири пъти и вижте как се придвижва курсора. >> Въведете , за да прекратите търсенето. Забелязахте ли какво стана? Емакс, когато търси постъпково, се опитва да намери следващото съвпадение на низа, който се въвежда. За да -отидете на следващото съвпадение на "търсне", просто отново въведете +отидете на следващото съвпадение на „курсор“, просто отново въведете C-s. Ако няма такова съвпадение, Емакс бибипва и ви казва, че -търсенето е "провалено" (failing). C-g също прекратява търсенето. - -ЗАБЕЛЕЖКА: На някои системи въвеждането на C-s ще замрази екрана и вие -няма да може да видите повече реакция от Емакс. Това показва, че -"способност" на операционната система, наречена "управление на потока" -(flow control), е прихванала C-s и не го пропуска до Емакс. За да -размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно -включване на постъпковото търсене" (Spontaneous Entry to Incremental -Search) в ръководството на Емакс за съвет как да се справите с тази -"способност". - -Ако сте в средата на постъпково търсене и въведете , ще +търсенето е „провалено“ (failing). C-g също така прекратява +търсенето. + +Ако сте в средата на постъпково търсене и въведете , ще забележите, че последният знак в търсения низ се изтрива и търсенето се връща към последното място на търсене. Например, предположете, че -сте въвели "т", за да намерите първото съвпадение с "т". Сега, ако -въведете "ъ", курсорът ще се придвижи към първото съвпадение на "тъ". -Сега въведете . Това изтрива знака "ъ" от низа за търсене и -курсорът се премества назад, до първото съвпадение с "т". +сте въвели „к“, за да намерите първото съвпадение с „к“. Сега, ако +въведете „у“, курсорът ще се придвижи към първото съвпадение на „ку“. +Сега въведете . Това изтрива знака „у“ от низа за търсене и +курсорът се премества назад, до първото съвпадение с „к“. Ако сте в средата на търсене и въведете контролен или мета знак (с -няколко изключения -- знаците, които са специални по време на търсене, +няколко изключения – знаците, които са специални по време на търсене, като C-s и C-r), търсенето се прекратява. C-s започва търсене, което гледа за съвпадение с низа, даден за @@ -924,9 +903,11 @@ C-s Една от привлекателните способности на Емакс е тази, че може да гледате повече от един прозорец на екрана в даден момент от време. +(Обърнете внимание, че Емакс използва думата „рамки“, описана в +следващия раздел, за това, което други приложения наричат „прозорец“. +Ръководството на Емак съдържа речника на термините на Емакс.) ->> Придвижете курсора до този ред и въведете C-u 0 C-l (това е - CONTROL-L, не CONTROL-1). +>> Придвижете курсора до този ред и въведете C-l C-l. >> Сега въведете C-x 2, което ще раздели екрана на два отделни прозореца. Двата прозореца показват това въведение. Курсорът @@ -935,7 +916,7 @@ C-s >> Въведете C-M-v, за да скролирате долния прозорец. (Ако нямате истински клавиш META, въведете ESC C-v.) ->> Въведете C-x o ("o" от "other" -- "друг"), за да придвижите +>> Въведете C-x o („o“ от „other“ – „друг“), за да придвижите курсора в долния прозорец. >> Използвайте C-v и M-v в долния прозорец, за да го скролирате. Продължете четенето на тези насоки от въведението в горния @@ -946,32 +927,32 @@ C-s преди. Може да продължите да използвате C-x o, за да превключвате между -прозорците. Всеки прозорец има собствено място на курсора, но само -един прозорец показва курсор. Всички обикновени команди за -редактиране се прилагат в прозореца, в който е курсорът. Ние наричаме -този прозорец "текущ прозорец". +прозорците. „Текущият прозорец“, където се извършва редактирането, е +този с явен курсор, който мига, когато не въвеждате. Другите прозорци +имат собствени положения на курсора. Ако Емакс е на графичен дисплей, +тези курсори ще са изчертани като немигащи празни кутии. Командата C-M-v е много полезна, когато редактирате текст в един прозорец и използвате другия прозорец просто за справка. Може да държите курсора винаги в прозореца, където редактирате, и да напредвате последователно в другия прозорец чрез C-M-v. -C-M-v е пример за знак CONTROL-META. Ако имате истински клавиш META, -може да въвеждате C-M-v, задържайки едновременно CONTROL и META, -докато въвеждате v. Няма значение дали CONTROL или META "е натиснат -първи", защото и двата клавиша действат, модифицирайки знака, който -сте въвели. +C-M-v е пример за знак CONTROL-META. Ако имате истински клавиш META +(или Alt), може да въвеждате C-M-v, задържайки едновременно CONTROL и +META, докато въвеждате „v“. Няма значение дали CONTROL или META „е +натиснат първи“, защото и двата клавиша действат, модифицирайки знака, +който натискате. -Ако нямате истински клавиш META и използвате ESC вместо това, редът -има значение: трябва да въвеждате ESC, последван от CONTROL-v, защото -CONTROL-ESC v няма да работи. Това е така, защото ESC е собствен -знак, а не модификатор. +Ако нямате истински клавиш META и използвате вместо това, редът +вече има значение: трябва да въвеждате , последван от CONTROL-v, +защото CONTROL- v няма да работи. Това е така, защото е +собствен знак, а не модификатор. >> Въведете C-x 1 (в горния прозорец), за да махнете долния прозорец. (Ако сте въвели C-x 1 в долния прозорец, това ще махне горния. -Мислете за тази команда като "Задръж точно един прозорец -- този, в -който съм сега".) +Мислете за тази команда като „Задръж точно един прозорец – този, в +който съм сега“.) Няма нужда да извеждате един и същи буфер в двата прозореца. Ако използвате C-x C-f, за да намерите файл в единия прозорец, другият @@ -989,22 +970,47 @@ CONTROL-ESC v изтриете долния. +* МНОЖЕСТВО РАМКИ +----------------- + +Емакс може да създава и „рамки“. Рамката (frame) е това, което +наричаме един набор от прозорци, заедно с техните менюта, плъзгачи, +ехо области и т.н. В графичен дисплей Емакс нарича „рамка“ това, +което повечето други приложения наричат „прозорец“. На екрана могат +да бъдат показвани няколко графични рамки едновременно. В текстов +терминал може да се показва само една рамка в даден момент от време. + +>> Въведете M-x make-frame . + Вижте как се появява нова рамка на екрана. + +В новата рамка можете да правите всичко, което правите и в +оригиналната рамка. Няма нищо специално в първата рамка. + +>> Въведете M-x delete-frame + Избраната рамка се премахва. + +Можете да премахвате рамки и по нормалния за това начин в графичната +система, най-често с натискане на бутона, отбелязан като „X“ в горен +ъгъл на рамката. Ако премахнете и последната рамка на работещ Емакс, +това ще излезе от Емакс. + + * ВЛОЖЕНИ НИВА НА РЕДАКТИРАНЕ ----------------------------- -Понякога ще се озовете в това, което се нарича "вложено ниво на -редактиране" (recursive editing level). Това се отбелязва от +Понякога ще се озовете в това, което се нарича „вложено ниво на +редактиране“ (recursive editing level). Това се отбелязва от квадратни скоби в реда на режима, които ограждат скобите около името на главния режим. Например, може да видите [(Fundamental)] вместо (Fundamental). -За да се махнете от вложеното ниво на редактиране, въведете ESC ESC -ESC. Това е обща команда за "излизане". Може и да я използвате за -махане (скриване) на допълнителни прозорци, както и за да се махнете -от минибуфера. +За да се махнете от вложеното ниво на редактиране, въведете + . Това е обща команда за „излизане“. Може и да я +използвате за махане (скриване) на допълнителни прозорци, както и за +да се махнете от минибуфера. ->> Въведете M-x, за да влезете в минибуфер; тогава въведете ESC ESC - ESC, за да излезете. +>> Въведете M-x, за да влезете в минибуфер; тогава въведете + , за да излезете. Не можете да използвате C-g, за да излезете от вложено ниво на редактиране. Това е така, защото C-g се използва за прекратяване на @@ -1028,13 +1034,10 @@ CONTROL-h, помогне. Ако сте въвели C-h и решите, че не се нуждаете от помощ, просто въведете C-g, за да я прекратите. -(Някои компютри променят значението на знака C-h. Те наистина не -трябва да правят това като сляпа мярка за всички потребители, така че -имате основание да се оплачете на системния администратор. Между -другото, ако C-h не извежда съобщение за помощ в дъното на екрана, -опитайте клавиша F1 или M-x help вместо това.) +(Ако C-h не извежда съобщение за помощ в дъното на екрана, опитайте +клавиша F1 или M-x help вместо това.) -Най-основното помощно средство е C-h c. Въведете C-h, знака c и +Най-основното помощно средство е C-h c. Въведете C-h, знака „c“ и команден знак или последователност от знаци, образуващи команда; тогава Емакс ще изведе много кратко описание на командата. @@ -1045,10 +1048,10 @@ CONTROL-h, C-p runs the command previous-line (C-p изпълнява командата предишен-ред) -Това ви казва "името на функцията". Имената на функциите се използват +Това ви казва „името на функцията“. Имената на функциите се използват най-вече за настройване и разширяване на Емакс. Но тъй като имената на функциите са избрани така, че да показват какво прави командата, те -могат да служат и за много кратка документация -- достатъчна, за да ви +могат да служат и за много кратка документация – достатъчна, за да ви припомни команди, които вече сте учили. Многознакови команди, като C-x C-s и (ако нямате клавиш META или EDIT @@ -1070,7 +1073,7 @@ c. C-h f Описва функция. Трябва да въведете името на функцията. ->> Опитайте с въвеждане на C-h f previous-line. +>> Опитайте с въвеждане на C-h f previous-line . Това извежда цялата информация, която Емакс знае за функцията, която осъществява командата C-p. @@ -1086,11 +1089,12 @@ c. двузнакова последователност от клавиши, която пуска същата команда. ->> Въведете C-h a file. +>> Въведете C-h a file . Това извежда в друг прозорец списък на всички M-x команди, които -съдържат "file" в тяхното име. Ще видите знакови команди като C-x -C-f, изброени измежду съответните имена на команди, като find-file. +съдържат „file“ (файл) в тяхното име. Ще видите знакови команди като +C-x C-f, изброени измежду съответните имена на команди, като +find-file. >> Въведете C-M-v, за да скролирате помощния прозорец. Направете го няколко пъти. @@ -1098,7 +1102,7 @@ C-f, >> Въведете C-x 1, за да изтриете помощния прозорец. C-h i Четене на ръководства (Info). Тази команда ви праща в - специален буфер, наричан "*info*", където може да + специален буфер, наричан „*info*“, където може да четете ръководствата на инсталираните във вашата система пакети. Въведете m emacs , за да четете ръководството на Емакс. Ако никога преди това @@ -1113,8 +1117,8 @@ C-f, ----------------- Може да научите повече за Емакс с четене на неговото ръководство, или -като книга, или в Инфо (използвайте менюто помощ (Help) или въведете -F10 h r). Две възможности, които може да желаете в началото, са +като книга, или в Инфо (използвайте менюто Помощ (Help) или въведете +C-h r). Две възможности, които може да желаете в началото, са довършване (completion), което спестява писане, и dired, който опростява боравенето с файлове. @@ -1122,8 +1126,8 @@ F10 h r). искате да превключите към буфера *Messages*, може да въведете C-x b *M и Емакс ще запълни останалата част от името на буфера, доколкото може да се определи от това, което сте въвели. Довършването -е описано в Инфо-ръководството на Емакс в страницата "Довършване" -("Completion"). +е описано в Инфо-ръководството на Емакс в страницата „Довършване“ +(„Completion“). Dired ви позволява да гледате списъка от файлове в директория (и като възможност: нейните поддиректории), да се придвижвате в този списък, @@ -1138,13 +1142,11 @@ Dired * ЗАКЛЮЧЕНИЕ ------------ -Запомнете: за да излезете безвъзвратно от Емакс, използвайте C-x C-c. -За да излезете временно в обвивка, така че да се върнете в Емакс -по-късно, използвайте C-z. +За да излезете безвъзвратно от Емакс, използвайте C-x C-c. Това въведение е предвидено да бъде разбираемо за всички нови -потребители, така че ако намирате нещо неясно, не се самообвинявайте --- оплачете се! +потребители, така че ако намирате нещо неясно, не се самообвинявайте – +оплачете се! * КОПИРАНЕ @@ -1160,26 +1162,28 @@ Dired This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: -Copyright (C) 1985, 1996, 1998, 2001-2012 Free Software Foundation, Inc. + Copyright (C) 1985, 1996, 1998, 2001-2012 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. - Permission is granted to anyone to make or distribute verbatim copies - of this document as received, in any medium, provided that the - copyright notice and permission notice are preserved, - and that the distributor grants the recipient permission - for further redistribution as permitted by this notice. + 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. - Permission is granted to distribute modified versions - of this document, or of portions of it, - under the above conditions, provided also that they - carry prominent notices stating who last altered them. + You should have received a copy of the GNU General Public License + along with GNU Emacs. If not, see . -Условията за копиране на самия Емакс са по-сложни, но в същия дух. Моля, прочетете файла COPYING и тогава давайте копия на ГНУ Емакс на свои приятели. Помогнете да спрем затвореността на програмите -("притежанието"), като използваме, пишем и споделяме свободен софтуер! +(„притежанието“), като използваме, пишем и споделяме свободен софтуер! -Преводът на български е извършен от Огнян Кулев -. +Преводът на български е извършен от Огнян Кулев . ;;; Local Variables: ;;; coding: windows-1251 diff --git a/etc/tutorials/TUTORIAL.translators b/etc/tutorials/TUTORIAL.translators index 3408ef79fd3..3ec948eb79a 100644 --- a/etc/tutorials/TUTORIAL.translators +++ b/etc/tutorials/TUTORIAL.translators @@ -2,8 +2,8 @@ This file contains the list of translators and maintainers of the tutorial. * TUTORIAL.bg: -Author: Ognyan Kulev -Maintainer: Ognyan Kulev +Author: Ognyan Kulev +Maintainer: Ognyan Kulev * TUTORIAL.cn: Author: Sun Yijiang -- cgit v1.3 From 31cbea1d3d3c548025f70551514bd1a370301ccf Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 23 Jan 2012 12:23:50 +0800 Subject: Update several Lisp manual chapters. * doc/lispref/eval.texi (Intro Eval, Symbol Forms): Minor tweaks for correctness with lexical scoping. (Eval): Copyedits. * doc/lispref/sequences.texi (Sequence Functions): Don't repeat the introduction already given in the parent. (Vectors): Copyedits. (Rings): Move from lists.texi. Note that this is specific to the ring package. * doc/lispref/lists.texi (Cons Cells): Copyedits. (List Elements): Mention push. (List Variables): Mention pop. (Rings): Move to sequences.texi. * doc/lispref/strings.texi (Text Comparison): Minor qualification. * doc/lispref/symbols.texi (Definitions, Symbol Components): Mention variable scoping issues. (Plists and Alists): Copyedits. --- admin/FOR-RELEASE | 19 +++-- doc/lispref/ChangeLog | 23 ++++++ doc/lispref/control.texi | 10 +-- doc/lispref/elisp.texi | 2 +- doc/lispref/eval.texi | 24 +++---- doc/lispref/lists.texi | 163 ++++++++++------------------------------- doc/lispref/sequences.texi | 120 +++++++++++++++++++++++++++---- doc/lispref/strings.texi | 13 ++-- doc/lispref/symbols.texi | 176 ++++++++++++++++++++------------------------- 9 files changed, 281 insertions(+), 269 deletions(-) (limited to 'admin/FOR-RELEASE') diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 9335e5b1fbe..f704a3c9397 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -187,25 +187,25 @@ backups.texi buffers.texi commands.texi compile.texi -control.texi +control.texi cyd customize.texi debugging.texi display.texi edebug.texi elisp.texi errors.texi -eval.texi +eval.texi cyd files.texi frames.texi functions.texi -hash.texi +hash.texi cyd help.texi hooks.texi index.texi internals.texi intro.texi cyd keymaps.texi -lists.texi +lists.texi cyd loading.texi locals.texi macros.texi @@ -214,17 +214,17 @@ markers.texi minibuf.texi modes.texi nonascii.texi -numbers.texi +numbers.texi cyd objects.texi cyd os.texi package.texi positions.texi processes.texi searching.texi -sequences.texi +sequences.texi cyd streams.texi -strings.texi -symbols.texi +strings.texi cyd +symbols.texi cyd syntax.texi text.texi tips.texi @@ -232,8 +232,7 @@ variables.texi windows.texi * PLANNED ADDITIONS - -** pov-mode (probably not for Emacs-23: waiting for a Free POV-Ray). +* pov-mode (probably not for Emacs-23: waiting for a Free POV-Ray). ** gas-mode ? diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 3c18de96d72..b66f82c5738 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,26 @@ +2012-01-23 Chong Yidong + + * strings.texi (Text Comparison): Minor qualification. + + * lists.texi (Cons Cells): Copyedits. + (List Elements): Mention push. + (List Variables): Mention pop. + (Rings): Move to sequences.texi. + + * sequences.texi (Sequence Functions): Don't repeat the + introduction already given in the parent. + (Vectors): Copyedits. + (Rings): Move from lists.texi. Note that this is specific to the + ring package. + + * symbols.texi (Definitions, Symbol Components): Mention variable + scoping issues. + (Plists and Alists): Copyedits. + + * eval.texi (Intro Eval, Symbol Forms): Minor tweaks for + correctness with lexical scoping. + (Eval): Copyedits. + 2012-01-21 Chong Yidong * intro.texi (A Sample Function Description): Special notation diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi index e74f3e198bf..0511f21007d 100644 --- a/doc/lispref/control.texi +++ b/doc/lispref/control.texi @@ -8,11 +8,11 @@ @cindex special forms for control structures @cindex control structures - A Lisp program consists of expressions or @dfn{forms} (@pxref{Forms}). -We control the order of execution of these forms by enclosing them in -@dfn{control structures}. Control structures are special forms which -control when, whether, or how many times to execute the forms they -contain. + A Lisp program consists of a set of @dfn{expressions}, or +@dfn{forms} (@pxref{Forms}). We control the order of execution of +these forms by enclosing them in @dfn{control structures}. Control +structures are special forms which control when, whether, or how many +times to execute the forms they contain. @cindex textual order The simplest order of execution is sequential execution: first form diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 0b8d972c1d5..1555b98e7fb 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -326,7 +326,6 @@ Lists * Modifying Lists:: Storing new pieces into an existing list. * Sets And Lists:: A list can represent a finite mathematical set. * Association Lists:: A list can represent a finite relation or mapping. -* Rings:: Managing a fixed-size ring of objects. Modifying Existing List Structure @@ -344,6 +343,7 @@ Sequences, Arrays, and Vectors * Vector Functions:: Functions specifically for vectors. * Char-Tables:: How to work with char-tables. * Bool-Vectors:: How to work with bool-vectors. +* Rings:: Managing a fixed-size ring of objects. Hash Tables diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index adb4841a82d..fc18e503543 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi @@ -64,8 +64,8 @@ evaluate a @dfn{function call} form such as @code{(car x)}, Emacs first evaluates the argument (the subform @code{x}). After evaluating the argument, Emacs @dfn{executes} the function (@code{car}), and if the function is written in Lisp, execution works by evaluating the -@dfn{body} of the function. (In this example, however, @code{car} is -not a Lisp function; it is a primitive function implemented in C.) +@dfn{body} of the function (in this example, however, @code{car} is +not a Lisp function; it is a primitive function implemented in C). @xref{Functions}, for more information about functions and function calls. @@ -77,9 +77,8 @@ variables (@pxref{Variables}).@footnote{This definition of that can affect the result of a program.} Whenever a form refers to a variable without creating a new binding for it, the variable evaluates to the value given by the current environment. Evaluating a form may -create a new environment for recursive evaluation, by binding -variables (@pxref{Local Variables}). Such environments are temporary, -and vanish when the evaluation of the form is complete. +also temporarily alter the environment by binding variables +(@pxref{Local Variables}). @cindex side effect Evaluating a form may also make changes that persist; these changes @@ -177,9 +176,9 @@ program. Here is an example: @cindex symbol evaluation When a symbol is evaluated, it is treated as a variable. The result -is the variable's value, if it has one. If it has none (if its value -cell is void), an error is signaled. For more information on the use of -variables, see @ref{Variables}. +is the variable's value, if it has one. If the symbol has no value as +a variable, the Lisp interpreter signals an error. For more +information on the use of variables, see @ref{Variables}. In the following example, we set the value of a symbol with @code{setq}. Then we evaluate the symbol, and get back the value that @@ -602,12 +601,13 @@ functions provides the ability to pass information to them as arguments. @defun eval form &optional lexical -This is the basic function evaluating an expression. It evaluates +This is the basic function for evaluating an expression. It evaluates @var{form} in the current environment and returns the result. How the evaluation proceeds depends on the type of the object (@pxref{Forms}). -@var{lexical} if non-nil means to evaluate @var{form} using lexical scoping -rules (@pxref{Lexical Binding}) instead of the default dynamic scoping used -historically in Emacs Lisp. + +The argument @var{lexical}, if non-@code{nil}, means to evaluate +@var{form} using lexical scoping rules for variables, instead of the +default dynamic scoping rules. @xref{Lexical Binding}. Since @code{eval} is a function, the argument expression that appears in a call to @code{eval} is evaluated twice: once as preparation before diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index eb9ddf58603..c8433c79b54 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -23,7 +23,6 @@ the whole list. * Modifying Lists:: Storing new pieces into an existing list. * Sets And Lists:: A list can represent a finite mathematical set. * Association Lists:: A list can represent a finite relation or mapping. -* Rings:: Managing a fixed-size ring of objects. @end menu @node Cons Cells @@ -31,61 +30,56 @@ the whole list. @cindex lists and cons cells Lists in Lisp are not a primitive data type; they are built up from -@dfn{cons cells}. A cons cell is a data object that represents an -ordered pair. That is, it has two slots, and each slot @dfn{holds}, or -@dfn{refers to}, some Lisp object. One slot is known as the @sc{car}, -and the other is known as the @sc{cdr}. (These names are traditional; -see @ref{Cons Cell Type}.) @sc{cdr} is pronounced ``could-er.'' +@dfn{cons cells} (@pxref{Cons Cell Type}). A cons cell is a data +object that represents an ordered pair. That is, it has two slots, +and each slot @dfn{holds}, or @dfn{refers to}, some Lisp object. One +slot is known as the @sc{car}, and the other is known as the @sc{cdr}. +(These names are traditional; see @ref{Cons Cell Type}.) @sc{cdr} is +pronounced ``could-er.'' We say that ``the @sc{car} of this cons cell is'' whatever object its @sc{car} slot currently holds, and likewise for the @sc{cdr}. A list is a series of cons cells ``chained together,'' so that each -cell refers to the next one. There is one cons cell for each element of -the list. By convention, the @sc{car}s of the cons cells hold the -elements of the list, and the @sc{cdr}s are used to chain the list: the -@sc{cdr} slot of each cons cell refers to the following cons cell. The -@sc{cdr} of the last cons cell is @code{nil}. This asymmetry between -the @sc{car} and the @sc{cdr} is entirely a matter of convention; at the -level of cons cells, the @sc{car} and @sc{cdr} slots have the same -characteristics. +cell refers to the next one. There is one cons cell for each element +of the list. By convention, the @sc{car}s of the cons cells hold the +elements of the list, and the @sc{cdr}s are used to chain the list +(this asymmetry between @sc{car} and @sc{cdr} is entirely a matter of +convention; at the level of cons cells, the @sc{car} and @sc{cdr} +slots have similar properties). Hence, the @sc{cdr} slot of each cons +cell in a list refers to the following cons cell. @cindex true list - Since @code{nil} is the conventional value to put in the @sc{cdr} of -the last cons cell in the list, we call that case a @dfn{true list}. - - In Lisp, we consider the symbol @code{nil} a list as well as a -symbol; it is the list with no elements. For convenience, the symbol + Also by convention, the @sc{cdr} of the last cons cell in a list is +@code{nil}. We call such a @code{nil}-terminated structure a +@dfn{true list}. In Emacs Lisp, the symbol @code{nil} is both a +symbol and a list with no elements. For convenience, the symbol @code{nil} is considered to have @code{nil} as its @sc{cdr} (and also -as its @sc{car}). Therefore, the @sc{cdr} of a true list is always a -true list. +as its @sc{car}). + + Hence, the @sc{cdr} of a true list is always a true list. The +@sc{cdr} of a nonempty true list is a true list containing all the +elements except the first. @cindex dotted list @cindex circular list - If the @sc{cdr} of a list's last cons cell is some other value, -neither @code{nil} nor another cons cell, we call the structure a -@dfn{dotted list}, since its printed representation would use -@samp{.}. There is one other possibility: some cons cell's @sc{cdr} -could point to one of the previous cons cells in the list. We call -that structure a @dfn{circular list}. + If the @sc{cdr} of a list's last cons cell is some value other than +@code{nil}, we call the structure a @dfn{dotted list}, since its +printed representation would use dotted pair notation (@pxref{Dotted +Pair Notation}). There is one other possibility: some cons cell's +@sc{cdr} could point to one of the previous cons cells in the list. +We call that structure a @dfn{circular list}. For some purposes, it does not matter whether a list is true, -circular or dotted. If the program doesn't look far enough down the +circular or dotted. If a program doesn't look far enough down the list to see the @sc{cdr} of the final cons cell, it won't care. However, some functions that operate on lists demand true lists and signal errors if given a dotted list. Most functions that try to find the end of a list enter infinite loops if given a circular list. @cindex list structure - Because most cons cells are used as part of lists, the phrase -@dfn{list structure} has come to mean any structure made out of cons -cells. - - The @sc{cdr} of any nonempty true list @var{l} is a list containing all the -elements of @var{l} except the first. - - @xref{Cons Cell Type}, for the read and print syntax of cons cells and -lists, and for ``box and arrow'' illustrations of lists. + Because most cons cells are used as part of lists, we refer to any +structure made out of cons cells as a @dfn{list structure}. @node List-related Predicates @section Predicates on Lists @@ -257,6 +251,10 @@ x x @result{} (b c) @end example + +@noindent +For the @code{pop} macro, which removes an element from a list, +@xref{List Variables}. @end defmac @defun nth n list @@ -695,6 +693,10 @@ This macro provides an alternative way to write l @result{} (c a b) @end example + +@noindent +For the @code{pop} macro, which removes the first element from a list, +@xref{List Elements}. @end defmac Two functions modify lists that are the values of variables. @@ -1800,90 +1802,3 @@ often modifies the original list structure of @var{alist}. compares the @sc{cdr} of each @var{alist} association instead of the @sc{car}. @end defun - -@node Rings -@section Managing a Fixed-Size Ring of Objects - -@cindex ring data structure - This section describes functions for operating on rings. A -@dfn{ring} is a fixed-size data structure that supports insertion, -deletion, rotation, and modulo-indexed reference and traversal. - -@defun make-ring size -This returns a new ring capable of holding @var{size} objects. -@var{size} should be an integer. -@end defun - -@defun ring-p object -This returns @code{t} if @var{object} is a ring, @code{nil} otherwise. -@end defun - -@defun ring-size ring -This returns the maximum capacity of the @var{ring}. -@end defun - -@defun ring-length ring -This returns the number of objects that @var{ring} currently contains. -The value will never exceed that returned by @code{ring-size}. -@end defun - -@defun ring-elements ring -This returns a list of the objects in @var{ring}, in order, newest first. -@end defun - -@defun ring-copy ring -This returns a new ring which is a copy of @var{ring}. -The new ring contains the same (@code{eq}) objects as @var{ring}. -@end defun - -@defun ring-empty-p ring -This returns @code{t} if @var{ring} is empty, @code{nil} otherwise. -@end defun - - The newest element in the ring always has index 0. Higher indices -correspond to older elements. Indices are computed modulo the ring -length. Index @minus{}1 corresponds to the oldest element, @minus{}2 -to the next-oldest, and so forth. - -@defun ring-ref ring index -This returns the object in @var{ring} found at index @var{index}. -@var{index} may be negative or greater than the ring length. If -@var{ring} is empty, @code{ring-ref} signals an error. -@end defun - -@defun ring-insert ring object -This inserts @var{object} into @var{ring}, making it the newest -element, and returns @var{object}. - -If the ring is full, insertion removes the oldest element to -make room for the new element. -@end defun - -@defun ring-remove ring &optional index -Remove an object from @var{ring}, and return that object. The -argument @var{index} specifies which item to remove; if it is -@code{nil}, that means to remove the oldest item. If @var{ring} is -empty, @code{ring-remove} signals an error. -@end defun - -@defun ring-insert-at-beginning ring object -This inserts @var{object} into @var{ring}, treating it as the oldest -element. The return value is not significant. - -If the ring is full, this function removes the newest element to make -room for the inserted element. -@end defun - -@cindex fifo data structure - If you are careful not to exceed the ring size, you can -use the ring as a first-in-first-out queue. For example: - -@lisp -(let ((fifo (make-ring 5))) - (mapc (lambda (obj) (ring-insert fifo obj)) - '(0 one "two")) - (list (ring-remove fifo) t - (ring-remove fifo) t - (ring-remove fifo))) - @result{} (0 t one t "two") -@end lisp diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index 0ea32f99e12..94f1bf666d2 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi @@ -8,10 +8,10 @@ @chapter Sequences, Arrays, and Vectors @cindex sequence - Recall that the @dfn{sequence} type is the union of two other Lisp -types: lists and arrays. In other words, any list is a sequence, and -any array is a sequence. The common property that all sequences have is -that each is an ordered collection of elements. + The @dfn{sequence} type is the union of two other Lisp types: lists +and arrays. In other words, any list is a sequence, and any array is +a sequence. The common property that all sequences have is that each +is an ordered collection of elements. An @dfn{array} is a fixed-length object with a slot for each of its elements. All the elements are accessible in constant time. The four @@ -54,19 +54,17 @@ But it is possible to add elements to the list, or remove elements. * Vector Functions:: Functions specifically for vectors. * Char-Tables:: How to work with char-tables. * Bool-Vectors:: How to work with bool-vectors. +* Rings:: Managing a fixed-size ring of objects. @end menu @node Sequence Functions @section Sequences - In Emacs Lisp, a @dfn{sequence} is either a list or an array. The -common property of all sequences is that they are ordered collections of -elements. This section describes functions that accept any kind of -sequence. + This section describes functions that accept any kind of sequence. @defun sequencep object -Returns @code{t} if @var{object} is a list, vector, string, -bool-vector, or char-table, @code{nil} otherwise. +This function returns @code{t} if @var{object} is a list, vector, +string, bool-vector, or char-table, @code{nil} otherwise. @end defun @defun length sequence @@ -149,8 +147,9 @@ This function generalizes @code{aref} (@pxref{Array Functions}) and @defun copy-sequence sequence @cindex copying sequences -Returns a copy of @var{sequence}. The copy is the same type of object -as the original sequence, and it has the same elements in the same order. +This function returns a copy of @var{sequence}. The copy is the same +type of object as the original sequence, and it has the same elements +in the same order. Storing a new element into the copy does not affect the original @var{sequence}, and vice versa. However, the elements of the new @@ -394,8 +393,8 @@ symbol-lookup tables (@pxref{Creating Symbols}), as part of the representation of a byte-compiled function (@pxref{Byte Compilation}), and more. - In Emacs Lisp, the indices of the elements of a vector start from zero -and count up from there. + Like other arrays, vectors use zero-origin indexing: the first +element has index 0. Vectors are printed with square brackets surrounding the elements. Thus, a vector whose elements are the symbols @code{a}, @code{b} and @@ -728,3 +727,96 @@ bv @noindent These results make sense because the binary codes for control-_ and control-W are 11111 and 10111, respectively. + +@node Rings +@section Managing a Fixed-Size Ring of Objects + +@cindex ring data structure + A @dfn{ring} is a fixed-size data structure that supports insertion, +deletion, rotation, and modulo-indexed reference and traversal. An +efficient ring data structure is implemented by the @code{ring} +package. It provides the functions listed in this section. + + Note that several ``rings'' in Emacs, like the kill ring and the +mark ring, are actually implemented as simple lists, @emph{not} using +the @code{ring} package; thus the following functions won't work on +them. + +@defun make-ring size +This returns a new ring capable of holding @var{size} objects. +@var{size} should be an integer. +@end defun + +@defun ring-p object +This returns @code{t} if @var{object} is a ring, @code{nil} otherwise. +@end defun + +@defun ring-size ring +This returns the maximum capacity of the @var{ring}. +@end defun + +@defun ring-length ring +This returns the number of objects that @var{ring} currently contains. +The value will never exceed that returned by @code{ring-size}. +@end defun + +@defun ring-elements ring +This returns a list of the objects in @var{ring}, in order, newest first. +@end defun + +@defun ring-copy ring +This returns a new ring which is a copy of @var{ring}. +The new ring contains the same (@code{eq}) objects as @var{ring}. +@end defun + +@defun ring-empty-p ring +This returns @code{t} if @var{ring} is empty, @code{nil} otherwise. +@end defun + + The newest element in the ring always has index 0. Higher indices +correspond to older elements. Indices are computed modulo the ring +length. Index @minus{}1 corresponds to the oldest element, @minus{}2 +to the next-oldest, and so forth. + +@defun ring-ref ring index +This returns the object in @var{ring} found at index @var{index}. +@var{index} may be negative or greater than the ring length. If +@var{ring} is empty, @code{ring-ref} signals an error. +@end defun + +@defun ring-insert ring object +This inserts @var{object} into @var{ring}, making it the newest +element, and returns @var{object}. + +If the ring is full, insertion removes the oldest element to +make room for the new element. +@end defun + +@defun ring-remove ring &optional index +Remove an object from @var{ring}, and return that object. The +argument @var{index} specifies which item to remove; if it is +@code{nil}, that means to remove the oldest item. If @var{ring} is +empty, @code{ring-remove} signals an error. +@end defun + +@defun ring-insert-at-beginning ring object +This inserts @var{object} into @var{ring}, treating it as the oldest +element. The return value is not significant. + +If the ring is full, this function removes the newest element to make +room for the inserted element. +@end defun + +@cindex fifo data structure + If you are careful not to exceed the ring size, you can +use the ring as a first-in-first-out queue. For example: + +@lisp +(let ((fifo (make-ring 5))) + (mapc (lambda (obj) (ring-insert fifo obj)) + '(0 one "two")) + (list (ring-remove fifo) t + (ring-remove fifo) t + (ring-remove fifo))) + @result{} (0 t one t "two") +@end lisp diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index 49199d3e32f..bbb75f1474d 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi @@ -410,8 +410,13 @@ in case if @code{case-fold-search} is non-@code{nil}. @defun string= string1 string2 This function returns @code{t} if the characters of the two strings match exactly. Symbols are also allowed as arguments, in which case -their print names are used. -Case is always significant, regardless of @code{case-fold-search}. +the symbol names are used. Case is always significant, regardless of +@code{case-fold-search}. + +This function is equivalent to @code{equal} for comparing two strings +(@pxref{Equality Predicates}). In particular, the text properties of +the two strings are ignored. But if either argument is not a string +or symbol, an error is signaled. @example (string= "abc" "abc") @@ -422,10 +427,6 @@ Case is always significant, regardless of @code{case-fold-search}. @result{} nil @end example -The function @code{string=} ignores the text properties of the two -strings. When @code{equal} (@pxref{Equality Predicates}) compares two -strings, it uses @code{string=}. - For technical reasons, a unibyte and a multibyte string are @code{equal} if and only if they contain the same sequence of character codes and all these codes are either in the range 0 through diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index 866a63c4cd9..0ee22b905b6 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi @@ -41,62 +41,58 @@ references another object: @table @asis @item Print name @cindex print name cell -The @dfn{print name cell} holds a string that names the symbol for -reading and printing. See @code{symbol-name} in @ref{Creating Symbols}. +The symbol's name. @item Value @cindex value cell -The @dfn{value cell} holds the current value of the symbol as a -variable. When a symbol is used as a form, the value of the form is the -contents of the symbol's value cell. See @code{symbol-value} in -@ref{Accessing Variables}. +The symbol's current value as a variable. @item Function @cindex function cell -The @dfn{function cell} holds the function definition of the symbol. -When a symbol is used as a function, its function definition is used in -its place. This cell is also used to make a symbol stand for a keymap -or a keyboard macro, for editor command execution. Because each symbol -has separate value and function cells, variables names and function names do -not conflict. See @code{symbol-function} in @ref{Function Cells}. +The symbol's function definition. It can also hold a symbol, a +keymap, or a keyboard macro. @item Property list @cindex property list cell -The @dfn{property list cell} holds the property list of the symbol. See -@code{symbol-plist} in @ref{Property Lists}. +The symbol's property list. @end table - The print name cell always holds a string, and cannot be changed. The -other three cells can be set individually to any specified Lisp object. - - The print name cell holds the string that is the name of the symbol. -Since symbols are represented textually by their names, it is important -not to have two symbols with the same name. The Lisp reader ensures -this: every time it reads a symbol, it looks for an existing symbol with -the specified name before it creates a new one. (In GNU Emacs Lisp, -this lookup uses a hashing algorithm and an obarray; see @ref{Creating -Symbols}.) - - The value cell holds the symbol's value as a variable -(@pxref{Variables}). That is what you get if you evaluate the symbol as -a Lisp expression (@pxref{Evaluation}). Any Lisp object is a legitimate -value. Certain symbols have values that cannot be changed; these -include @code{nil} and @code{t}, and any symbol whose name starts with -@samp{:} (those are called @dfn{keywords}). @xref{Constant Variables}. - - We often refer to ``the function @code{foo}'' when we really mean -the function stored in the function cell of the symbol @code{foo}. We -make the distinction explicit only when necessary. In normal -usage, the function cell usually contains a function -(@pxref{Functions}) or a macro (@pxref{Macros}), as that is what the -Lisp interpreter expects to see there (@pxref{Evaluation}). Keyboard -macros (@pxref{Keyboard Macros}), keymaps (@pxref{Keymaps}) and -autoload objects (@pxref{Autoloading}) are also sometimes stored in -the function cells of symbols. +@noindent +The print name cell always holds a string, and cannot be changed. +Each of the other three cells can be set to any Lisp object. + + The print name cell holds the string that is the name of a symbol. +Since symbols are represented textually by their names, it is +important not to have two symbols with the same name. The Lisp reader +ensures this: every time it reads a symbol, it looks for an existing +symbol with the specified name before it creates a new one. To get a +symbol's name, use the function @code{symbol-name} (@pxref{Creating +Symbols}). + + The value cell holds a symbol's value as a variable, which is what +you get if the symbol itself is evaluated as a Lisp expression. +@xref{Variables}, for details about how values are set and retrieved, +including complications such as @dfn{local bindings} and @dfn{scoping +rules}. Most symbols can have any Lisp object as a value, but certain +special symbols have values that cannot be changed; these include +@code{nil} and @code{t}, and any symbol whose name starts with +@samp{:} (those are called @dfn{keywords}). @xref{Constant +Variables}. + + The function cell holds a symbol's function definition. Often, we +refer to ``the function @code{foo}'' when we really mean the function +stored in the function cell of @code{foo}; we make the distinction +explicit only when necessary. Typically, the function cell is used to +hold a function (@pxref{Functions}) or a macro (@pxref{Macros}). +However, it can also be used to hold a symbol (@pxref{Function +Indirection}), keyboard macro (@pxref{Keyboard Macros}), keymap +(@pxref{Keymaps}), or autoload object (@pxref{Autoloading}). To get +the contents of a symbol's function cell, use the function +@code{symbol-function} (@pxref{Function Cells}). The property list cell normally should hold a correctly formatted -property list (@pxref{Property Lists}), as a number of functions expect -to see a property list there. +property list. To get a symbol's function cell, use the function +@code{symbol-plist}. @xref{Property Lists}. The function cell or the value cell may be @dfn{void}, which means that the cell does not reference any object. (This is not the same @@ -104,57 +100,43 @@ thing as holding the symbol @code{void}, nor the same as holding the symbol @code{nil}.) Examining a function or value cell that is void results in an error, such as @samp{Symbol's value as variable is void}. - The four functions @code{symbol-name}, @code{symbol-value}, -@code{symbol-plist}, and @code{symbol-function} return the contents of -the four cells of a symbol. Here as an example we show the contents of -the four cells of the symbol @code{buffer-file-name}: + Because each symbol has separate value and function cells, variables +names and function names do not conflict. For example, the symbol +@code{buffer-file-name} has a value (the name of the file being +visited in the current buffer) as well as a function definition (a +primitive function that returns the name of the file): @example -(symbol-name 'buffer-file-name) - @result{} "buffer-file-name" -(symbol-value 'buffer-file-name) +buffer-file-name @result{} "/gnu/elisp/symbols.texi" (symbol-function 'buffer-file-name) @result{} # -(symbol-plist 'buffer-file-name) - @result{} (variable-documentation 29529) @end example -@noindent -Because this symbol is the variable which holds the name of the file -being visited in the current buffer, the value cell contents we see are -the name of the source file of this chapter of the Emacs Lisp Manual. -The property list cell contains the list @code{(variable-documentation -29529)} which tells the documentation functions where to find the -documentation string for the variable @code{buffer-file-name} in the -@file{DOC-@var{version}} file. (29529 is the offset from the beginning -of the @file{DOC-@var{version}} file to where that documentation string -begins---see @ref{Documentation Basics}.) The function cell contains -the function for returning the name of the file. -@code{buffer-file-name} names a primitive function, which has no read -syntax and prints in hash notation (@pxref{Primitive Function Type}). A -symbol naming a function written in Lisp would have a lambda expression -(or a byte-code object) in this cell. - @node Definitions, Creating Symbols, Symbol Components, Symbols @section Defining Symbols @cindex definitions of symbols - A @dfn{definition} in Lisp is a special form that announces your -intention to use a certain symbol in a particular way. In Emacs Lisp, -you can define a symbol as a variable, or define it as a function (or -macro), or both independently. - - A definition construct typically specifies a value or meaning for the -symbol for one kind of use, plus documentation for its meaning when used -in this way. Thus, when you define a symbol as a variable, you can -supply an initial value for the variable, plus documentation for the -variable. + A @dfn{definition} is a special kind of Lisp expression that +announces your intention to use a symbol in a particular way. It +typically specifies a value or meaning for the symbol for one kind of +use, plus documentation for its meaning when used in this way. Thus, +when you define a symbol as a variable, you can supply an initial +value for the variable, plus documentation for the variable. @code{defvar} and @code{defconst} are special forms that define a -symbol as a global variable. They are documented in detail in -@ref{Defining Variables}. For defining user option variables that can -be customized, use @code{defcustom} (@pxref{Customization}). +symbol as a @dfn{global variable}---a variable that can be accessed at +any point in a Lisp program. @xref{Variables}, for details about +variables. To define a customizable variable, use the +@code{defcustom} macro, which also calls @code{defvar} as a subroutine +(@pxref{Customization}). + + In principle, you can assign a variable value to any symbol with +@code{setq}, whether not it has first been defined as a variable. +However, you ought to write a variable definition for each global +variable that you want to use; otherwise, your Lisp program may not +act correctly if it is evaluated with lexical scoping enabled +(@pxref{Variable Scoping}). @code{defun} defines a symbol as a function, creating a lambda expression and storing it in the function cell of the symbol. This @@ -171,15 +153,14 @@ both macro and function definitions are kept in the function cell, and that cell can hold only one Lisp object at any given time. @xref{Macros}. - In Emacs Lisp, a definition is not required in order to use a symbol -as a variable or function. Thus, you can make a symbol a global -variable with @code{setq}, whether you define it first or not. The real -purpose of definitions is to guide programmers and programming tools. -They inform programmers who read the code that certain symbols are -@emph{intended} to be used as variables, or as functions. In addition, -utilities such as @file{etags} and @file{make-docfile} recognize -definitions, and add appropriate information to tag tables and the -@file{DOC-@var{version}} file. @xref{Accessing Documentation}. + As previously noted, Emacs Lisp allows the same symbol to be defined +both as a variable (e.g.@: with @code{defvar}) and as a function or +macro (e.g.@: with @code{defun}). Such definitions do not conflict. + + These definition also act as guides for programming tools. For +example, the @kbd{C-h f} and @kbd{C-h v} commands create help buffers +containing links to the relevant variable, function, or macro +definitions. @xref{Name Help,,, emacs, The GNU Emacs Manual}. @node Creating Symbols, Property Lists, Definitions, Symbols @section Creating and Interning Symbols @@ -254,8 +235,8 @@ not work---only @code{intern} can enter a symbol in an obarray properly. @cindex CL note---symbol in obarrays @quotation -@b{Common Lisp note:} In Common Lisp, a single symbol may be interned in -several obarrays. +@b{Common Lisp note:} Unlike Common Lisp, Emacs Lisp does not provide +for interning a single symbol in several obarrays. @end quotation Most of the functions below take a name and sometimes an obarray as @@ -448,12 +429,13 @@ must be distinct. Property lists are better than association lists for attaching information to various Lisp function names or variables. If your -program keeps all of its associations in one association list, it will +program keeps all such information in one association list, it will typically need to search that entire list each time it checks for an -association. This could be slow. By contrast, if you keep the same -information in the property lists of the function names or variables -themselves, each search will scan only the length of one property list, -which is usually short. This is why the documentation for a variable is +association for a particular Lisp function name or variable, which +could be slow. By contrast, if you keep the same information in the +property lists of the function names or variables themselves, each +search will scan only the length of one property list, which is +usually short. This is why the documentation for a variable is recorded in a property named @code{variable-documentation}. The byte compiler likewise uses properties to record those functions needing special treatment. -- cgit v1.3