1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-33

Merge from emacs--cvs-trunk--0

Patches applied:

 * emacs--cvs-trunk--0  (patch 223-227)

   - Update from CVS
This commit is contained in:
Miles Bader 2005-04-02 22:40:25 +00:00
commit 4a2283bcc7
62 changed files with 1363 additions and 616 deletions

View file

@ -1,3 +1,16 @@
2005-03-30 Marcelo Toledo <marcelo@marcelotoledo.org>
* FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The
first line of every tutorial must begin with a sentence saying
"Emacs Tutorial" in the respective language. This should be
followed by "See end for copying conditions", likewise in the
respective language.
2005-03-29 Luc Teirlinck <teirllm@auburn.edu>
* FOR-RELEASE (TO BE DONE SHORTLY BEFORE RELEASE): New section.
Add `undo-ask-before-discard' to it.
2005-03-02 Miles Bader <miles@gnu.org>
* quick-install-emacs: Only use the mkdir --verbose option if the

View file

@ -1,8 +1,8 @@
Tasks needed before the next release.
* THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE
* TO BE DONE SHORTLY BEFORE RELEASE
`undo-ask-before-discard', currently set to t for debugging purposes
** `undo-ask-before-discard', currently set to t for debugging purposes
has to be set to nil: when t, it can leak memory and cause other problems.
* NEW FEATURES
@ -23,6 +23,8 @@ See msg from rms to emacs-devel on 21 Dec.
* FATAL ERRORS
** Make unexec handle memory mapping policy of the latest versions of Linux.
** Investigate reported crashes in compact_small_strings.
** Investigate reported crashes related to using an
@ -150,7 +152,7 @@ man/basic.texi "Luc Teirlinck" Chong Yidong
man/buffers.texi "Luc Teirlinck" Chong Yidong
man/building.texi "Ted Zlatanov" <tzz@lifelogs.com>
man/calendar.texi joakim@verona.se Chong Yidong
man/cmdargs.texi Chong Yidong
man/cmdargs.texi Chong Yidong "Luc Teirlinck"
man/commands.texi "Luc Teirlinck" Chong Yidong
man/custom.texi Chong Yidong
man/dired.texi Chong Yidong joakim@verona.se
@ -216,7 +218,7 @@ lispref/frames.texi "Luc Teirlinck" Chong Yidong
lispref/functions.texi "Luc Teirlinck" Chong Yidong
lispref/hash.texi "Luc Teirlinck" Chong Yidong
lispref/help.texi "Luc Teirlinck" Chong Yidong
lispref/hooks.texi
lispref/hooks.texi Lute Kamstra
lispref/internals.texi "Luc Teirlinck" Chong Yidong
lispref/intro.texi "Luc Teirlinck"
lispref/keymaps.texi "Luc Teirlinck" Chong Yidong
@ -245,6 +247,42 @@ lispref/tips.texi "Luc Teirlinck" Chong Yidong
lispref/variables.texi "Luc Teirlinck" Chong Yidong
lispref/windows.texi "Luc Teirlinck" Chong Yidong
** Check the Emacs Tutorial.
The first line of every tutorial must begin with a sentence saying
"Emacs Tutorial" in the respective language. This should be followed
by "See end for copying conditions", likewise in the respective
language.
After each file name, on the same line or the following line, come the
names of the people who have checked it.
SECTION READERS
----------------------------------
etc/TUTORIAL rms
etc/TUTORIAL.bg Ognyan Kulev <ogi@fmi.uni-sofia.bg>
etc/TUTORIAL.cn
etc/TUTORIAL.cs
etc/TUTORIAL.de
etc/TUTORIAL.es Marcelo Toledo
etc/TUTORIAL.fr
etc/TUTORIAL.it
etc/TUTORIAL.ja
etc/TUTORIAL.ko
etc/TUTORIAL.nl Lute Kamstra
etc/TUTORIAL.pl
etc/TUTORIAL.pt_BR Marcelo Toledo
etc/TUTORIAL.ro
etc/TUTORIAL.ru
etc/TUTORIAL.sk
etc/TUTORIAL.sl
etc/TUTORIAL.sv Mats Lidell <matsl@contactor.se>
etc/TUTORIAL.th
etc/TUTORIAL.zh
Local variables:
mode: outline

View file

@ -1,3 +1,31 @@
2005-04-02 Richard M. Stallman <rms@gnu.org>
* TUTORIAL.ja, TUTORIAL.cn, TUTORIAL.ru, TUTORIAL.zh: Remove the
old intro line that apparently was a longer version of "Emacs
tutorial".
* TUTORIAL.es: Clean up line breaks.
2005-04-01 Marcelo Toledo <marcelo@marcelotoledo.org>
* TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de,
TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko,
TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru,
TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title
line.
* TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in
2005-02-08T14:20:54Z!lute@gnu.org, "Emacs" is not transliterated to cyrillic anymore;
Minor fixes; by Ognyan Kulev <ogi@fmi.uni-sofia.bg>.
* TUTORIAL.sv: Sync some other changes with the TUTORIAL version
2005-04-01T00:31:25Z!rms@gnu.org by Mats Lidell <matsl@contactor.se>.
2005-04-01 Lute Kamstra <lute@gnu.org>
* TUTORIAL.nl: Fix title line.
2005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
* TUTORIAL: Add title line.

View file

@ -2804,6 +2804,10 @@ the command `undefined'. (In earlier Emacs versions, it used
* Lisp Changes in Emacs 22.1
---
** easy-mmode-define-global-mode has been renamed to
define-global-minor-mode. The old name remains as an alias.
+++
** The new function `filter-buffer-substring' extracts a buffer
substring, passes it through a set of filter functions, and returns

View file

@ -1,5 +1,4 @@
Emacs Tutorial
You are looking at the Emacs tutorial. See end for copying conditions.
Emacs tutorial. See end for copying conditions.
Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation.
Emacs commands generally involve the CONTROL key (sometimes labeled

View file

@ -1,8 +1,7 @@
въведението на Емакс
Вие гледате въведението на Емакс. Условията за копиране са в края на текста.
Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation.
Въведение в Emacs. Условията за копиране са в края на текста.
Copyright (c) 1985,1996,1998,2001,2002,2003,2005 Free Software Foundation.
Командите на Емакс най-често включват клавишите CONTROL (понякога
Командите на Emacs най-често включват клавишите CONTROL (понякога
отбелязван с CTRL или CTL) и META (понякога отбелязван с EDIT или
ALT). Вместо да се изписват с пълно име всеки път, ние ще използваме
следните съкращения:
@ -16,7 +15,7 @@ ALT).
клавиша ESC и след това въведете <знак>. Ние
записваме <ESC>, за да отбележим клавиша ESC.
Важна бележка: в края на Емакс сесията въведете двата знака C-x C-c.
Важна бележка: в края на Emacs сесията въведете двата знака C-x C-c.
Знаците ">>" отляво ви дават указание да изпълните команда. Например:
<<Blank lines inserted here by startup of help-with-tutorial>>
>> Сега въведете C-v (Покажи следващия екран), за да се придвижите към
@ -94,7 +93,7 @@ Next (
Всеки ред от текст завършва със знак за нов ред, който служи за
отделянето на реда от следващия ред. Последният ред във вашия файл
трябва да има знак за нов ред в края (но Емакс не изисква такъв,
трябва да има знак за нов ред в края (но Emacs не изисква такъв,
когато прочита файла).
>> Опитайте C-b в началото на ред. Това трябва да ви придвижи в края
@ -110,7 +109,7 @@ C-f
Когато се придвижвате след горния или долния край на екрана, текстът
отвъд края се измества към екрана. Това се нарича "скролиране". То
позволява на Емакс да придвижва курсора към зададеното място в текста,
позволява на Emacs да придвижва курсора към зададеното място в текста,
без да го изкарва извън екрана.
>> Опитайте се да придвижите курсора след долния край на екрана с C-n
@ -193,7 +192,7 @@ Shift
Вие можете също да се придвижвате с клавишите-стрелки, ако вашият
терминал има такива. Ние препоръчваме да научите C-b, C-f, C-n и C-p
по три причини. Първо, те работят на всички видове терминали. Второ,
веднъж след като добиете практика в използването на Емакс, ще
веднъж след като добиете практика в използването на Emacs, ще
откриете, че въвеждането на тези Control-знаци е по-бързо от
въвеждането на клавишите стрелки, защото не трябва да премествате
ръката си далеч от областта на клавишите с букви. Трето, веднъж след
@ -201,7 +200,7 @@ Shift
можете също така лесно да научите по-напредналите команди за движение
на курсора.
Повечето Емакс команди приемат числов аргумент; за повечето от тях той
Повечето Emacs команди приемат числов аргумент; за повечето от тях той
служи като брояч на повторения. Начинът, по който давате числов
брояч, е с въвеждане на C-u, последвано от въвеждане на цифрите, и
всичко това преди въвеждане на самата команда. Ако имате клавиш META
@ -233,7 +232,7 @@ C-v
Ако използвате графичен интерфейс, като X11 или MS-Windows, би
трябвало да има тънка правоъгълна област, наречена плъзгач (scroll
bar), в лявата страна на прозореца на Емакс. Вие можете да скролирате
bar), в лявата страна на прозореца на Emacs. Вие можете да скролирате
текста, щракайки с мишката в плъзгача.
>> Опитайте да натиснете средния бутон на върха на осветената област
@ -245,10 +244,10 @@ bar),
нагоре и надолу, като движите мишката.
* КОГАТО ЕМАКС Е БЛОКИРАЛ
* КОГАТО EMACS Е БЛОКИРАЛ
-------------------------
Ако Емакс спре да отговаря на вашите команди, вие можете да го спрете
Ако Emacs спре да отговаря на вашите команди, вие можете да го спрете
безопасно, като въведете C-g. Може да използвате C-g, за да спрете
команда, която се изпълнява твърде дълго.
@ -265,15 +264,15 @@ bar),
* ЗАБРАНЕНИ КОМАНДИ
-------------------
Някои команди на Емакс са "забранени", така че начинаещите потребители
Някои команди на Emacs са "забранени", така че начинаещите потребители
да не могат да ги употребят по погрешка.
Ако въведете някоя от забранените команди, Емакс извежда съобщение,
Ако въведете някоя от забранените команди, Emacs извежда съобщение,
казвайки каква е била командата и питайки ви дали искате да продължите
напред и да изпълните командата.
Ако наистина искате да изпробвате командата, въведете клавиша интервал
в отговор на въпроса. Обикновено ако не искате да изпълните
Ако наистина искате да изпробвате командата, въведете <SPC> (клавиша
интервал) в отговор на въпроса. Обикновено ако не искате да изпълните
забранената команда, отговаряте на въпроса с "n".
>> Въведете C-x C-l (която е забранена команда), и след това въведете
@ -283,7 +282,7 @@ bar),
* ПРОЗОРЦИ
----------
Емакс може да управлява няколко прозореца, всеки извеждайки свой
Emacs може да управлява няколко прозореца, всеки извеждайки свой
собствен текст. Ние ще обясним по-късно как да използвате няколко
прозореца. Точно сега ние искаме да обясним как да се отървете от
допълнителни прозорци и да се върнете към основното редактиране с един
@ -313,13 +312,13 @@ bar),
----------------------
Ако искате да вмъкнете текст, просто го въведете. Знаците, които
могат да се виждат, като А, 7, * и т.н., се възприемат от Емакс като
могат да се виждат, като А, 7, * и т.н., се възприемат от Emacs като
текст и се вмъкват веднага. Въведете <Return> (клавишът за връщане в
началото на реда), за да вмъкнете знак за нов ред.
Може да изтриете последния знак, който сте въвели, с въвеждане на
<Delback>. <Delback> е клавиш от клавиатурата -- същият, който
обикновено използвате извън Емакс, за да изтриете последния въведен от
обикновено използвате извън Emacs, за да изтриете последния въведен от
вас знак. Обикновено е голям клавиш, на няколко реда разстояние от
клавиша <Return>, и обикновено е отбелязан с "Delete", "Del" или
"Backspace".
@ -359,24 +358,24 @@ bar),
>> Въведете <Return>, за да вмъкнете наново знака за нов ред, който
изтрихте.
Запомнете, че на повечето команди на Емакс може да бъде зададен брояч
Запомнете, че на повечето команди на Emacs може да бъде зададен брояч
на повторенията; това включва вмъкването на текстови знаци.
Повтарянето на текстов знак го вмъква няколко пъти.
>> Опитайте това сега -- въведете C-u 8 *, за да вмъкнете ********.
Сега вие сте научили най-основните начини за въвеждане на нещо в Емакс
Сега вие сте научили най-основните начини за въвеждане на нещо в Emacs
и поправяне на грешки. Можете също така да изтривате думи или редове.
Ето обобщение на изтриващите действия:
<Delback> изтриване на знака точно преди курсора
C-d изтриване на знака точно след курсора
<Delback> Изтриване на знака точно преди курсора
C-d Изтриване на знака точно след курсора
M-<Delback> изтриване на думата непосредствено преди курсора
M-d изтриване на думата след курсора
M-<Delback> Изтриване на думата непосредствено преди курсора
M-d Изтриване на думата след курсора
C-k изтриване от мястото на курсора до края на реда
M-k изтриване до края на текущото изречение
C-k Изтриване от мястото на курсора до края на реда
M-k Изтриване до края на текущото изречение
Забележете, че <Delback> и C-d, сравнени с M-<Delback> и M-d,
разширяват подобието, започнато от C-f и M-f (добре, <Delback> не е
@ -386,12 +385,12 @@ M-k
Можете също да премахнете всяка част от буфера с един универсален
начин. Придвижете се до единия край на частта и въведете C-@ или
C-интервал (което и да е от двете). Придвижете се до другия край на
частта и въведете C-w. Това ще изреже целия текст между тези два
края.
C-<SPC> (което и да е от двете). (<SPC> е клавишът интервал.)
Придвижете се до другия край на частта и въведете C-w. Това ще изреже
целия текст между тези два края.
>> Придвижете курсора до знака "М" в началото на предишния абзац.
>> Въведете C-интервал. Емакс трябва да изведе съобщение "Mark set" в
>> Въведете C-<SPC>. Emacs трябва да изведе съобщение "Mark set" в
долния край на екрана.
>> Придвижете курсора до буквата "р" в "край" на втория ред от абзаца.
>> Въведете C-w. Това ще изреже текста, започващ от "М" и завършващ
@ -421,9 +420,9 @@ C-k
Връщането обратно на текст се нарича "вмъкване". (Мислете за него
като за изваждане обратно, или дръпване обратно, на текст, който е бил
изрязан.) Можете да вмъквате изрязания текст или на същото място,
откъдето е бил премахнат, или на друго място в буфера, даже и в
различен файл. Можете да вмъквате един и същ текст няколко пъти; това
прави няколко копия от него.
откъдето е бил премахнат, или на друго място в редактирания текст,
даже и в различен файл. Можете да вмъквате един и същ текст няколко
пъти; това прави няколко копия от него.
Командата за вмъкване е C-y. Тя вмъква наново последния изрязан текст
в текущото място на курсора.
@ -502,25 +501,25 @@ C_-
---------
За да направите текста, който редактирате, постоянен, трябва да го
сложите във файл. В противен случай той ще изчезне, когато Емакс
сложите във файл. В противен случай той ще изчезне, когато Emacs
приключи. За да сложите вашия текст във файл, трябва да "намерите"
файла преди да въвеждате текст. (Това също се нарича "посещаване" на
файла.)
Намиране на файл означава, че виждате съдържанието му в Емакс. В
Намиране на файл означава, че виждате съдържанието му в Emacs. В
много случаи това е като да редактирате самия файл. Обаче промените,
които правите, използвайки Емакс, не остават постоянни, докато не
които правите, използвайки Emacs, не остават постоянни, докато не
"запишете" файла. Това е така, за да се предотврати оставянето на
полупроменен файл в системата, когато не искате това. Дори когато
записвате, Емакс оставя началния файл под променено име, в случай, че
записвате, Emacs оставя началния файл под променено име, в случай, че
по-късно решите, че вашите промени са били грешка.
Ако погледнете в дъното на екрана, ще видите ред, който започва и
завършва с тирета и започва с "-R:-- TUTORIAL.bg" или нещо подобно.
Тази част от екрана показва името на файла, който сте посетили. Точно
сега вие сте посетили файл, наречен "TUTORIAL.bg", който е вашето
лично копие-чернова на Емакс въведението. Когато намерите файл в
Емакс, името на този файл ще се появи на същото място.
лично копие-чернова на Emacs въведението. Когато намерите файл в
Emacs, името на този файл ще се появи на същото място.
Особеност на командата за намиране на файл е, че трябва да кажете
името на файла, който искате. Ние го наричаме "четене на аргумент от
@ -529,10 +528,10 @@ C_-
C-x C-f Намиране на файл
Емакс ви подканя да въведете името на файла. Името на файла, което
Emacs ви подканя да въведете името на файла. Името на файла, което
напишете, се появява в дъното на екрана. Редът в дъното на екрана се
нарича минибуфер, когато се използва за този вид вход. Можете да
използвате обикновените команди за редактиране на Емакс, за да
използвате обикновените команди за редактиране на Emacs, за да
редактирате името на файла.
Когато въвеждате името на файла (или какъвто и да е вход в
@ -553,12 +552,12 @@ C_-
C-x C-s Запазване на файла
Това копира текста от Емакс във файла. Първия път, когато това се
направи, Емакс преименува началния файл с ново име, така че той да не
Това копира текста от Emacs във файла. Първия път, когато това се
направи, Emacs преименува началния файл с ново име, така че той да не
се изгуби. Новото име се построява с добавяне на "~" в края на името
на началния файл.
Когато запазването е свършило, Емакс извежда името на файла, който е
Когато запазването е свършило, Emacs извежда името на файла, който е
бил записан. Трябва да записвате достатъчно често, така че да не
изгубите много работа, ако системата се срине по някаква причина.
@ -566,19 +565,19 @@ C_-
Това трябва да изведе "Wrote ...TUTORIAL.bg" в дъното на екрана.
ЗАБЕЛЕЖКА: На някои системи въвеждането на C-x C-s ще замръзи екрана и
вие няма да виждате повече изход от Емакс. Това показва, че една
вие няма да виждате повече изход от Emacs. Това показва, че една
"способност" на операционната система, наричана "управление на потока"
(flow control), е прихванала C-s и не го пропуска към Емакс. За да
(flow control), е прихванала C-s и не го пропуска към Emacs. За да
размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно
включване на постъпково търсене" (Spontaneous Entry to Incremental
Search) в ръководството на Емакс за съвет как да се справите с тази
Search) в ръководството на Emacs за съвет как да се справите с тази
"способност".
Може да намерите съществуващ файл, да го разгледате и да го
редактирате. Можете също да намерите файл, който не съществува. Това
е начинът за създаване на нови файлове в Емакс: намирате файла, който
е начинът за създаване на нови файлове в Emacs: намирате файла, който
ще бъде в началото празен, и тогава започвате вмъкването на текста за
файла. Когато говорите за "записване" на файл, Емакс всъщност ще
файла. Когато говорите за "записване" на файл, Emacs всъщност ще
създаде файла с текста, който сте въвели. Оттам нататък може да
считате, че редактирате вече съществуващ файл.
@ -586,9 +585,9 @@ Search)
* БУФЕРИ
--------
Ако намерите втори файл с C-x C-f, първият файл остава в Емакс.
Ако намерите втори файл с C-x C-f, първият файл остава в Emacs.
Можете да превключите обратно към него, като го намерите пак с C-x
C-f. По този начин може да получите доста на брой файлове в Емакс.
C-f. По този начин може да получите доста на брой файлове в Emacs.
>> Създайте файл с име "foo", въвеждайки C-x C-f foo <Return>.
Вмъкнете малко текст, редактирайте го и запазете "foo" с въвеждане
@ -596,16 +595,16 @@ C-f.
Накрая въведете C-x C-f TUTORIAL.bg <Return>, за да се върнете
обратно във въведението.
Емакс запазва текста на всеки файл в обект, наричан "буфер".
Намирането на файл прави нов буфер в Емакс. За да видите списък на
буферите, които в момента съществуват във вашия Емакс, въведете
Emacs запазва текста на всеки файл в обект, наричан "буфер".
Намирането на файл прави нов буфер в Emacs. За да видите списък на
буферите, които в момента съществуват във вашия Emacs, въведете
C-x C-b Показване на буферите
>> Опитайте C-x C-b сега.
Вижте как всеки буфер има име, а понякога и име на файл за файла,
чието съдържание държи. ВСЕКИ текст, който виждате в Емакс прозорец,
чието съдържание държи. ВСЕКИ текст, който виждате в Emacs прозорец,
е винаги част от някакъв буфер.
>> Въведете C-x 1, за да махнете списъка с буферите.
@ -627,13 +626,13 @@ C-f.
Списъкът с буферите, който правите с C-x C-b, винаги ви показва името
на всеки буфер.
ВСЕКИ текст, който виждате в Емакс прозорец, е винаги част от някакъв
ВСЕКИ текст, който виждате в Emacs прозорец, е винаги част от някакъв
буфер. Някои буфери не съответстват на файлове. Например буферът,
именуван "*Buffer List*", не съответства на файл. Това е буферът,
който съдържа списъка с буферите, които сте направили с C-x C-b.
Буферът, именуван "*Messages*", също не съответства на файл; той
съдържа съобщенията, които се появяват в дъното на екрана по време на
Емакс сесията.
Emacs сесията.
>> Въведете C-x b *Messages* <Return>, за да видите буфера със
съобщенията. След това въведете C-x C-b TUTORIAL <Return>, за да
@ -641,7 +640,7 @@ C-f.
Ако направите промени в текста на един файл и тогава намерите друг
файл, това няма да запише първия файл. Неговите промени остават вътре
в Емакс, в буфера на файла. Създаването или редактирането на буфера
в Emacs, в буфера на файла. Създаването или редактирането на буфера
на втория файл няма ефект върху буфера на първия файл. Това е много
полезно, но също означава, че се нуждаете от удобен начин да запазите
буфера на първия файл. Ще е неудобно да превключите обратно с C-x
@ -660,8 +659,8 @@ C-x s
* РАЗШИРЯВАНЕ НА НАБОРА КОМАНДИ
-------------------------------
Има много, много повече команди на Емакс, отколкото могат да се сложат
на всички контролни и мета знаци. Емакс заобикаля това с X (eXtended)
Има много, много повече команди на Emacs, отколкото могат да се сложат
на всички контролни и мета знаци. Emacs заобикаля това с X (eXtended)
командата. Това става по два начина:
C-x Знаково разширяване. Последвано от един знак.
@ -669,49 +668,49 @@ C-x s
име.
Тези команди са общо взето полезни, но по-малко, отколкото командите,
които досега сте научили. Вече видяхте две от тях: командите върху
файлове C-x C-f за намиране (Find) и C-x C-s за запазване (Save).
Друг пример е командата за край на Емакс сесията -- това е командата
C-x C-c. (Не се безпокойте, че може да изгубите всички промени, които
сте направили; C-x C-c предлага да запази всеки променен файл, преди
да премахне Емакс.)
които досега сте научили. Вече видяхте няколко от тях: например
командите върху файлове C-x C-f за намиране (Find) и C-x C-s за
запазване (Save). Друг пример е командата за край на Emacs сесията --
това е командата C-x C-c. (Не се безпокойте, че може да изгубите
всички промени, които сте направили; C-x C-c предлага да запази всеки
променен файл, преди да премахне Emacs.)
C-z е командата за излизане от Емакс *временно* -- така че да можете
да се върнете към същата Емакс сесия по-късно.
C-z е командата за излизане от Emacs *временно* -- така че да можете
да се върнете към същата Emacs сесия по-късно.
На системи, които позволяват това, C-z "изоставя" (suspend) Емакс,
т.е. връща към обвивката, но не разрушава Емакс. В повечето обвивки
можете да продължите Емакс сесията с командата "fg" или с "%emacs".
На системи, които позволяват това, C-z "изоставя" (suspend) Emacs,
т.е. връща към обвивката, но не разрушава Emacs. В повечето обвивки
можете да продължите Emacs сесията с командата "fg" или с "%emacs".
На системи, които не позволяват изоставяне, C-z създава нова
подобвивка, която върви под Емакс, за да ви даде шанс да стартирате
други програми и да се върнете към Емакс след това; това не е истинско
"излизане" от Емакс. В този случай командата на обвивката "exit" е
обикновеният начин да се върнете обратно към Емакс от подобвивката.
подобвивка, която върви под Emacs, за да ви даде шанс да стартирате
други програми и да се върнете към Emacs след това; това не е истинско
"излизане" от Emacs. В този случай командата на обвивката "exit" е
обикновеният начин да се върнете обратно към Emacs от подобвивката.
Моментът да използвате C-x C-c е, когато искате да излезете от
системата. Това е и правилната команда за излизане, когато Емакс е
системата. Това е и правилната команда за излизане, когато Emacs е
извикан от пощенска програма или други странични програми, тъй като те
може и да не знаят как да се справят с изоставянето на Емакс. При
може и да не знаят как да се справят с изоставянето на Emacs. При
обикновени обстоятелства, обаче, ако не сте тръгнали да излизате от
системата, по-добре е да изоставите Емакс с C-z, вместо да излизате от
Емакс.
системата, по-добре е да изоставите Emacs с C-z, вместо да излизате от
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 Отмяна.
C-x C-f Намиране на файл
C-x C-s Запазване на файл
C-x C-b Списък на буферите
C-x C-c Излизане от Emacs
C-x 1 Изтриване на всички прозорци, освен един
C-x u Отмяна
Именуваните разширени команди са команди, които се използват даже още
по-рядко, или команди, които се използват само в определени режими.
Пример е командата replace-string, която заменя глобално един низ с
друг. Когато въведете M-x, Емакс ви подсказва в дъното на екрана с
друг. Когато въведете M-x, Emacs ви подсказва в дъното на екрана с
M-x и вие трябва да въведете името на командата, в този случай
"replace-string". Просто въведете "repl s<TAB>" и Емакс ще завърши
"replace-string". Просто въведете "repl s<TAB>" и Emacs ще завърши
името. (<TAB> е клавишът Tab, обикновено намиращ се над клавиша
CapsLock или клавиша Shift близо до левия край на клавиатурата.)
Завършете името на командата с <Return>.
@ -735,11 +734,11 @@ CapsLock
Когато сте направили промени във файл, но още не сте го запазили, те
могат да бъдат загубени, ако компютърът внезапно се изключи. За да ви
предпази от такива ситуации, Емакс периодично запазва "автоматично
предпази от такива ситуации, Emacs периодично запазва "автоматично
запазван" файл за всеки файл, който редактирате. Името на автоматично
запазвания файл има # в началото и в края; например, ако вашият файл е
с име "hello.c", името на неговия автоматично запазван файл ще бъде
"#hello.c#". Когато запазвате файл по обикновения начин, Емакс
"#hello.c#". Когато запазвате файл по обикновения начин, Emacs
изтрива неговия автоматично записван файл.
Ако компютърът зависне, може да възстановите вашата автоматично
@ -753,7 +752,7 @@ M-x recover file<Return>.
* ЕХО ОБЛАСТТА
--------------
Ако Емакс види, че въвеждате многознакови команди бавно, ще ви ги
Ако Emacs види, че въвеждате многознакови команди бавно, ще ви ги
покаже в дъното на екрана, в област, наричана "ехо област". Ехо
областта обхваща последния ред от екрана.
@ -764,18 +763,18 @@ M-x recover file<Return>.
Редът точно над ехо областта се нарича "ред на режима" (mode line).
Той показва нещо като:
-R:** TUTORIAL.bg (Fundamental)--L670--58%----------------
-D:** TUTORIAL.bg 63% L749 (Fundamental)---------------------
Този ред дава полезна информация за състоянието на Емакс и текста,
Този ред дава полезна информация за състоянието на Emacs и текста,
който редактирате.
Вече знаете какво означава името на файла -- това е файлът, който сте
намерили. -NN%-- показва вашата текуща позиция в текста; това
означава, че NN процента от текста е над върха на екрана. Ако
началото на файла е на екрана, ще се показва --Top-- (връх) вместо
--00%--. Ако края на файла е на екрана, ще се показва --Bot-- (дъно).
Ако гледате текст, който е толкова малък, че се показва изцяло на
екрана, редът на режима ще изведе --All--.
намерили. NN% показва вашата текуща позиция в текста; това означава,
че NN процента от текста е над върха на екрана. Ако началото на файла
е на екрана, ще се показва --Top-- (връх) вместо --00%--. Ако краят
на файла е на екрана, ще се показва --Bot-- (дъно). Ако гледате
текст, който е толкова малък, че се показва изцяло на екрана, редът на
режима ще изведе --All--.
Знакът L и цифрите показват мястото по друг начин: това е номерът на
текущия ред на точката.
@ -789,7 +788,7 @@ M-x recover file<Return>.
Fundamental (Основен), който използвате в момента. Това е пример за
"главен режим" (major mode).
Емакс има много главни режими. Някои от тях са предвидени за
Emacs има много главни режими. Някои от тях са предвидени за
редактиране на различни езици и/или видове текст, като например режим
Лисп, режим Текст и други. Във всеки един момент от време точно един
главен режим е активен и неговото име може винаги да бъде намерено в
@ -808,7 +807,7 @@ Fundamental (
>> Въведете M-x text mode<Return>.
Не се безпокойте, никоя от Емакс командите, които сте научили, няма да
Не се безпокойте, никоя от Emacs командите, които сте научили, няма да
се промени по някакъв съществен начин. Но може да забележите, че M-f
и M-b сега възприемат апострофите (') като част от думите. Преди
това, в основния режим (Fundamental), M-f и M-b се възприемаха като
@ -837,7 +836,7 @@ m.
Един главен режим, който е много полезен, особено за редактиране на
текст на естествен език, е режимът на автоматично запълване (Auto Fill
mode). Когато този режим е включен, Емакс автоматично разделя реда
mode). Когато този режим е включен, Emacs автоматично разделя реда
при мястото между думите, когато вмъквате текст и направите ред, който
е твърде дълъг.
@ -857,7 +856,7 @@ auto fill mode<Return>.
аргумент на командата.
>> Въведете C-x f с аргумент 20. (C-u 2 0 C-x f).
Сега въведете някакъв текст и вижте как Емакс запълва редовете с по
Сега въведете някакъв текст и вижте как Emacs запълва редовете с по
не повече от 20 знака. После върнете обратно границата на 70,
използвайки C-x f отново.
@ -872,12 +871,12 @@ auto fill mode<Return>.
* ТЪРСЕНЕ
---------
Емакс може да извършва търсения на низове (това са последователности
Emacs може да извършва търсения на низове (това са последователности
от знаци или думи) или напред в текста, или назад в него. Търсенето
на низ е придвижваща курсора команда; тя премества курсора на
следващото място, където се среща низът.
Командата за търсене на Емакс се различава от командата за търсене на
Командата за търсене на Emacs се различава от командата за търсене на
повечето редактори по това, че тя е "постъпкова". Това означава, че
търсенето се извършва още докато въвеждате текста, който търсите.
@ -885,7 +884,7 @@ auto fill mode<Return>.
търсене назад. НО ПОЧАКАЙТЕ! Не ги пробвайте сега.
Когато въведете C-s, ще забележите, че низът "I-search" се появява
като подсказка в ехо областта. Това ви казва, че Емакс е в това,
като подсказка в ехо областта. Това ви казва, че Emacs е в това,
което се нарича постъпково търсене, чакайки ви да въвеждате текста,
който искате да търсите. <Return> приключва търсенето.
@ -897,19 +896,19 @@ auto fill mode<Return>.
>> Сега въведете <Delback> три пъти и вижте как се придвижва курсора.
>> Въведете <Return>, за да прекратите търсенето.
Забелязахте ли какво стана? Емакс, когато търси постъпково, се опитва
Забелязахте ли какво стана? Emacs, когато търси постъпково, се опитва
да намери следващото съвпадение на низа, който се въвежда. За да
отидете на следващото съвпадение на "търсне", просто отново въведете
C-s. Ако няма такова съвпадение, Емакс бибипва и ви казва, че
C-s. Ако няма такова съвпадение, Emacs бибипва и ви казва, че
търсенето е "провалено" (failing). C-g също прекратява търсенето.
ЗАБЕЛЕЖКА: На някои системи въвеждането на C-s ще замрази екрана и вие
няма да може да видите повече реакция от Емакс. Това показва, че
няма да може да видите повече реакция от Emacs. Това показва, че
"способност" на операционната система, наречена "управление на потока"
(flow control), е прихванала C-s и не го пропуска до Емакс. За да
(flow control), е прихванала C-s и не го пропуска до Emacs. За да
размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно
включване на постъпковото търсене" (Spontaneous Entry to Incremental
Search) в ръководството на Емакс за съвет как да се справите с тази
Search) в ръководството на Emacs за съвет как да се справите с тази
"способност".
Ако сте в средата на постъпково търсене и въведете <Delback>, ще
@ -931,9 +930,9 @@ C-s
* МНОЖЕСТВО ПРОЗОРЦИ
----------------
--------------------
Една от привлекателните способности на Емакс е тази, че може да
Една от привлекателните способности на Emacs е тази, че може да
гледате повече от един прозорец на екрана в даден момент от време.
>> Придвижете курсора до този ред и въведете C-u 0 C-l (това е
@ -944,7 +943,7 @@ C-s
остава на по-горния прозорец.
>> Въведете C-M-v, за да скролирате долния прозорец. (Ако нямате
истински клавиш META, въведете ESC C-v.)
истински клавиш META, въведете <ESC> C-v.)
>> Въведете C-x o ("o" от "other" -- "друг"), за да придвижите
курсора в долния прозорец.
@ -973,10 +972,10 @@ C-M-v
първи", защото и двата клавиша действат, модифицирайки знака, който
сте въвели.
Ако нямате истински клавиш META и използвате ESC вместо това, редът
има значение: трябва да въвеждате ESC, последван от CONTROL-v, защото
CONTROL-ESC v няма да работи. Това е така, защото ESC е собствен
знак, а не модификатор.
Ако нямате истински клавиш META и използвате <ESC> вместо това, редът
има значение: трябва да въвеждате <ESC>, последван от CONTROL-v,
защото CONTROL-<ESC> v няма да работи. Това е така, защото <ESC> е
собствен знак, а не модификатор.
>> Въведете C-x 1 (в горния прозорец), за да махнете долния прозорец.
@ -1009,13 +1008,13 @@ CONTROL-ESC v
на главния режим. Например, може да видите [(Fundamental)] вместо
(Fundamental).
За да се махнете от вложеното ниво на редактиране, въведете ESC ESC
ESC. Това е обща команда за "излизане". Може и да я използвате за
махане (скриване) на допълнителни прозорци, както и за да се махнете
от минибуфера.
За да се махнете от вложеното ниво на редактиране, въведете <ESC>
<ESC> <ESC>. Това е обща команда за "излизане". Може и да я
използвате за махане (скриване) на допълнителни прозорци, както и за
да се махнете от минибуфера.
>> Въведете M-x, за да влезете в минибуфер; тогава въведете ESC ESC
ESC, за да излезете.
>> Въведете M-x, за да влезете в минибуфер; тогава въведете <ESC> <ESC>
<ESC>, за да излезете.
Не можете да използвате C-g, за да излезете от вложено ниво на
редактиране. Това е така, защото C-g се използва за прекратяване на
@ -1026,16 +1025,16 @@ ESC.
----------------------------------
В това въведение се опитахме да осигурим достатъчно информация, за да
започнете да използвате Емакс. Има толкова много още в Емакс, че не е
започнете да използвате Emacs. Има толкова много още в Emacs, че не е
възможно то да бъде обяснено всичкото тук. Обаче може да поискате да
научите повече за Емакс, тъй като той притежава още много полезни
способности. Емакс има команди за четене на документацията на Емакс
научите повече за Emacs, тъй като той притежава още много полезни
способности. Emacs има команди за четене на документацията на Emacs
командите. Тези "помощни" команди всички започват със знака
CONTROL-h, който се нарича "знакът за помощ".
За да използвате възможностите на тази помощ, въведете знака C-h и
след това знака, казващ какъв вид помощ искате. Ако НАИСТИНА сте се
изгубили, въведете C-h ? и Емакс ще ви каже с какво може да ви
изгубили, въведете C-h ? и Emacs ще ви каже с какво може да ви
помогне. Ако сте въвели C-h и решите, че не се нуждаете от помощ,
просто въведете C-g, за да я прекратите.
@ -1047,7 +1046,7 @@ CONTROL-h,
Най-основното помощно средство е C-h c. Въведете C-h, знака c и
команден знак или последователност от знаци, образуващи команда;
тогава Емакс ще изведе много кратко описание на командата.
тогава Emacs ще изведе много кратко описание на командата.
>> Type C-h c C-p.
@ -1057,7 +1056,7 @@ CONTROL-h,
(C-p изпълнява командата предишен-ред)
Това ви казва "името на функцията". Имената на функциите се използват
най-вече за настройване и разширяване на Емакс. Но тъй като имената
най-вече за настройване и разширяване на Emacs. Но тъй като имената
на функциите са избрани така, че да показват какво прави командата, те
могат да служат и за много кратка документация -- достатъчна, за да ви
припомни команди, които вече сте учили.
@ -1071,7 +1070,7 @@ c.
>> Въведете C-h k C-p.
Това извежда документацията на функцията, както и нейното име, в
отделен Емакс прозорец. Когато я прочетете, въведете C-x 1, за да
отделен Emacs прозорец. Когато я прочетете, въведете C-x 1, за да
махнете помощния текст. Не е нужно да правите това точно сега. Може
да редактирате, докато се обръщате към помощния текст за справка, и
след това да въведете C-x 1.
@ -1082,14 +1081,14 @@ c.
функцията.
>> Опитайте с въвеждане на C-h f previous-line<Return>.
Това извежда цялата информация, която Емакс знае за функцията,
Това извежда цялата информация, която Emacs знае за функцията,
която осъществява командата C-p.
Подобна команда, C-h v, извежда документацията на променливите, които
може да променяте, за да настройвате поведението на Емакс. Трябва да
въведете името на променливата, когато Емакс ви подскаже това.
може да променяте, за да настройвате поведението на Emacs. Трябва да
въведете името на променливата, когато Emacs ви подскаже това.
C-h a Команда Апропос. Въведете ключова дума и Емакс ще
C-h a Команда Апропос. Въведете ключова дума и Emacs ще
покаже списък на всички команди, чието име съдържа
тази ключова дума. Тези команди могат всички да бъдат
извикани чрез META-x. За някои команди командата
@ -1112,18 +1111,18 @@ C-f,
специален буфер, наричан "*info*", където може да
четете ръководствата на инсталираните във вашата
система пакети. Въведете m emacs <Return>, за да
четете ръководството на Емакс. Ако никога преди това
не сте използвали Info, въведете ? и Емакс ще включи
четете ръководството на Emacs. Ако никога преди това
не сте използвали Info, въведете ? и Emacs ще включи
въведение във възможностите на режима Инфо. Веднъж
след като сте преминали това въведение, трябва да се
консултирате с Емакс Инфо ръководството като ваша
консултирате с Emacs Инфо ръководството като ваша
основна документация.
* ОЩЕ ВЪЗМОЖНОСТИ
-----------------
Може да научите повече за Емакс с четене на неговото ръководство, или
Може да научите повече за Emacs с четене на неговото ръководство, или
като книга, или в Инфо (използвайте менюто помощ (Help) или въведете
F10 h r). Две възможности, които може да желаете в началото, са
довършване (completion), което спестява писане, и dired, който
@ -1131,26 +1130,26 @@ F10 h r).
Довършването е начин да избягвате ненужно писане. Например, ако
искате да превключите към буфера *Messages*, може да въведете C-x b
*M<Tab> и Емакс ще запълни останалата част от името на буфера,
*M<Tab> и Emacs ще запълни останалата част от името на буфера,
доколкото може да се определи от това, което сте въвели. Довършването
е описано в Инфо-ръководството на Емакс в страницата "Довършване"
е описано в Инфо-ръководството на Emacs в страницата "Довършване"
("Completion").
Dired ви позволява да гледате списъка от файлове в директория (и като
възможност: нейните поддиректории), да се придвижвате в този списък,
да посещавате, преименувате, изтривате и изобщо действате върху
файловете. Dired е описан в Инфо-ръководството на Емакс в страницата
файловете. Dired е описан в Инфо-ръководството на Emacs в страницата
"Dired".
Ръководството на Емакс описва още много други възможности на
Ръководството на Emacs описва още много други възможности на
редактора.
* ЗАКЛЮЧЕНИЕ
------------
Запомнете: за да излезете безвъзвратно от Емакс, използвайте C-x C-c.
За да излезете временно в обвивка, така че да се върнете в Емакс
Запомнете: за да излезете безвъзвратно от Emacs, използвайте C-x C-c.
За да излезете временно в обвивка, така че да се върнете в Emacs
по-късно, използвайте C-z.
Това въведение е предвидено да бъде разбираемо за всички нови
@ -1161,17 +1160,17 @@ Dired
* КОПИРАНЕ
----------
Това въведение произлиза от дълга поредица въведения в Емакс,
започвайки от едно, написано от Стюърт Кракрафт за началния Емакс.
Това въведение произлиза от дълга поредица въведения в Emacs,
започвайки от едно, написано от Стюърт Кракрафт за началния Emacs.
Тази версия на въведението, както и ГНУ Емакс, е защитена с авторски
Тази версия на въведението, както и GNU Emacs, е защитена с авторски
права и идва с разрешение да разпространявате копия при следните
условия:
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, 2002 Free Software Foundation
Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
@ -1184,8 +1183,8 @@ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation
under the above conditions, provided also that they
carry prominent notices stating who last altered them.
Условията за копиране на самия Емакс са по-сложни, но в същия дух.
Моля, прочетете файла COPYING и тогава давайте копия на ГНУ Емакс на
Условията за копиране на самия Emacs са по-сложни, но в същия дух.
Моля, прочетете файла COPYING и тогава давайте копия на GNU Emacs на
свои приятели. Помогнете да спрем затвореността на програмите
("притежанието"), като използваме, пишем и споделяме свободен софтуер!

View file

@ -1,5 +1,4 @@
Emacs 快速指南
您正在阅读 Emacs 快速指南( Emacs tutorial )。请见页尾有关复制条件。
Emacs 우醵寧켓.
Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
Emacs 指令通常包含有 CONTROL 键(有时候以 CTRL 或 CTL 来标示)或是

View file

@ -1,4 +1,4 @@
tutori疝 k Emacsu
tutori疝 k Emacsu.
Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci.
Do èe¹tiny pøelo¾il Milan Zamazal <pdm@zamazal.org>.

View file

@ -1,4 +1,3 @@
Einführung in Emacs
Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc.
Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal

View file

@ -1,7 +1,5 @@
tutorial de Emacs
Usted esta viendo el tutorial de Emacs. Vea al final las condiciones
de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software
Foundation.
Tutorial de Emacs. Vea al final las condiciones de copiado.
Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
Generalmente los comandos de Emacs involucran la tecla CONTROL
(algunas veces llamada CTRL O CTL) o la tecla meta (algunas veces

View file

@ -1,4 +1,3 @@
Didacticiel d'Emacs
Didacticiel d'Emacs. Voir la fin de ce document pour les conditions.
Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc.

View file

@ -1,4 +1,3 @@
Esercitazione di Emacs
Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc.
Condizioni d'uso alla fine del file.

View file

@ -1,5 +1,4 @@
Emacs $BF~Lg%,%$%I$G$9(B
$B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#%U%!%$%k:G8e$r;2>H$N$3$H!#(B
Emacs $BF~Lg%,%$%I$G$9(B.
Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!<!J%-!<%H%C%W$K(B

View file

@ -1,4 +1,4 @@
$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B
$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B.
$(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B
$(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B.

View file

@ -1,5 +1,4 @@
Emacs-inleiding
Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan.
Emacs-inleiding. De kopieervoorwaarden staan onderaan.
Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation
De meeste Emacs-commando's gebruiken de CONTROL-toets (soms CTRL of CTL

View file

@ -1,5 +1,4 @@
krótki samouczek Emacsa
Czytasz właśnie krótki samouczek Emacsa. Copyright (c) 1985, 2001
krótki samouczek Emacsa. Copyright (c) 1985, 2001
Free Software Foundation, Inc. Szczegóły na końcu pliku.
Polecenia Emacsa wymagają na ogół wciśnięcia klawisza CONTROL (oznaczanego

View file

@ -1,6 +1,5 @@
Tutorial do Emacs
Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as
condições.
Tutorial do Emacs. Veja no fim as condições para cópia.
Copyright (c) 2004, 2005 Free Software Foundation.
Os comandos do Emacs geralmente envolvem a tecla CONTROL (algumas vezes
nomeada CTRL ou CTL) ou a tecla META (algumas vezes nomeada EDIT ou
@ -131,8 +130,8 @@ jeito na dire
você pode observar a ação do M-f e M-b de varias lugares dentro e no
meio de palavras.
Observe o paralelismo entre C-f e C-b em uma mão, e M-f e M-b na
outra. Muito freqüentemente os caracteres Meta são usados para operações
Observe o paralelismo entre C-f e C-b por um lado, e M-f e M-b por outro
lado. Muito freqüentemente os caracteres Meta são usados para operações
relacionadas com as unidades definidas pela linguagem (palavras,
sentenças, parágrafos), enquanto caracteres Control operam nas unidades
básicas que são independente do que você está editando (caracteres,
@ -860,7 +859,7 @@ manual do Emacs para uma dica de como lhe dar com esse "recurso".
Se você estiver no meio de uma pesquisa incremental e digitar <Delete>,
você percebera que o ultimo caractere da pesquisa será apagado e a
pesquisa voltara para o ultimo lugar da pesquisa. Por instancia, imagine
pesquisa voltara para o ultimo lugar da pesquisa. Por exemplo, imagine
que você tenha digitado "c", para pesquisar a primeira ocorrência de
"c". Agora se você digitar "u", o cursor ira mover para a primeira
ocorrência de "cu". Agora digite <Delete>. Isso ira apagar o "u" da

View file

@ -1,4 +1,4 @@
tutorialului de Emacs
tutorialului de Emacs.
Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*-
Traducere din engleză de Tudor Hulubei <tudor@gnu.org>.
Mulţumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi şi sugestii.

View file

@ -1,5 +1,4 @@
учебник Emacs
Вы читаете учебник Emacs. Условия копирования в конце файла.
ユ゙ナツホノヒ Emacs.
Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc.
Для управления Emacs обычно используется ключ (сочетание клавиш клавиатуры

View file

@ -1,4 +1,4 @@
tútorial k Emacsu
tútorial k Emacsu.
Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci.
Do češtiny preložil Milan Zamazal <pdm@zamazal.org>, do slovenčiny Miroslav
Vaško <zemiak@zoznam.sk>.

View file

@ -1,4 +1,3 @@
Prvo berilo za Emacs
Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu.
Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc.

View file

@ -1,7 +1,5 @@
användarhandledningen till Emacs
Detta är den Svenska användarhandledningen till Emacs. I slutet finns
kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free
Software Foundation, Inc.
användarhandledningen till Emacs. I slutet finns kopieringsvillkoren.
Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation, Inc.
Emacs-kommandon innebär ofta användning av kontrolltangenten (vanligen
märkt CTRL eller CTL) eller META-tangenten ( vissa tangentbord märkt

View file

@ -1,4 +1,4 @@
0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B
0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B.
,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software
Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B.
0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B.

View file

@ -1,5 +1,4 @@
Emacs 快速指南(
您正在閱讀 Emacs 快速指南( Emacs tutorial )。請見頁尾有關複製條件。
Emacs §Ö³t«ü«n¡].
Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
Emacs 指令通常包含有 CONTROL 鍵(有時候以 CTRL 或 CTL 來標示)或是

View file

@ -1,4 +1,108 @@
2005-03-31 Kenichi Handa <handa@etlken2>
2005-04-02 Luc Teirlinck <teirllm@auburn.edu>
* simple.el (visible-mode): Use explicit :group keyword.
This changes the group of `visible-mode-hook' from paren-blinking
to editing-basics.
2005-04-02 Sergey Poznyakoff <gray@Mirddin.farlep.net> (tiny change)
* mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional
mailbox specifications as well as URLs.
(rmail-insert-inbox-text): Remove unused conditional branches.
2005-04-01 Jay Belanger <belanger@truman.edu>
* calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command)
(calc-gnuplot-print-command): Move definitions to calc.el.
* calc/calc-embed.el (calc-embedded-announce-formula)
(calc-embedded-open-formula, calc-embedded-close-formula)
(calc-embedded-open-word, calc-embedded-close-word)
(calc-embedded-open-plain, calc-embedded-close-plain)
(calc-embedded-open-new-formula, calc-embedded-close-new-formula)
(calc-embedded-open-mode, calc-embedded-close-mode):
Move definitions to calc.el.
* calc/calc.el (calc-settings-file, calc-language-alist):
Make customizable.
(calc-embedded-announce-formula, calc-embedded-open-formula)
(calc-embedded-close-formula, calc-embedded-open-word)
(calc-embedded-close-word, calc-embedded-open-plain)
(calc-embedded-close-plain, calc-embedded-open-new-formula)
(calc-embedded-close-new-formula, calc-embedded-open-mode)
(calc-embedded-close-mode, calc-gnuplot-name)
(calc-gnuplot-plot-command, calc-gnuplot-print-command): Move here
from other files and make customizable.
2005-04-01 Stefan Monnier <monnier@iro.umontreal.ca>
* pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Use buffer-live-p.
(cvs-mode-run): Don't call cvs-update-header here.
(cvs-run-process): Call cvs-update-header.
Use process properties for cvs-postprocess and cvs-buffer so that
the sentinel can behave better if the temp buffer is killed.
Use a pipe rather than a tty, to better handle unexpected prompts.
(cvs-sentinel): Rewrite. Call cvs-update-header.
2005-04-01 Andre Spiegel <spiegel@gnu.org>
* vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when
we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann.
2005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
* generic.el (define-generic-mode): Add indentation rule.
2005-03-31 Luc Teirlinck <teirllm@auburn.edu>
* files.el (mode-require-final-newline): Make Custom correctly
report a nil value and allow to set it to nil via Custom.
Doc fix.
2005-04-01 Kenichi Handa <handa@m17n.org>
* international/characters.el: Enable the correct case setting for
dotless-i and dotted-I.
2005-04-01 Kim F. Storm <storm@cua.dk>
* ido.el (ido-file-internal): Fall back to non-ido command if
initial directory is on slow ftp (or tramp) host.
2005-03-31 Richard M. Stallman <rms@gnu.org>
* emacs-lisp/autoload.el (make-autoload):
Handle define-global-minor-mode.
* emacs-lisp/easy-mmode.el (define-global-minor-mode):
Rename from easy-mmode-define-global-mode.
(easy-mmode-define-global-mode): Alias for define-global-minor-mode.
* progmodes/scheme.el (scheme-mode-syntax-table):
Update syntax of | and # for two-character comment syntax.
2005-03-31 Lute Kamstra <lute@gnu.org>
* emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode)
(define-minor-mode): Call custom-current-group at load-time.
* generic.el (define-generic-mode): Add debug declaration.
Add defcustom for the mode hook.
(generic-mode-internal): Use run-mode-hooks.
2005-03-31 Kim F. Storm <storm@cua.dk>
* mouse.el (mouse-1-click-follows-link): Increase to 450 ms.
(mouse-fixup-help-message): New defun called by show_help_echo
to fixup mouse-2 prefix in help messages when applicable.
* tooltip.el (tooltip-show-help-function): Don't fixup message here.
2005-03-31 Kenichi Handa <handa@m17n.org>
* language/thai-word.el (thai-find-word-ends): Pay attention to
the case that we reach the end of buffer.
* textmodes/fill.el (fill-text-properties-at): New function.
(fill-newline): Use fill-text-properties-at instead of
@ -69,13 +173,13 @@
* org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset)
(org-agenda-convert-date, org-agenda-goto-calendar): New commands.
(org-diary-default-entry): New function.
(org-get-entries-from-diary): Better parsing of diary entries
(org-get-entries-from-diary): Better parsing of diary entries.
(org-agenda-check-no-diary): New function.
("diary-lib"): Advice to function `add-to-diary-list', to allow
linking to diary entries.
(org-agenda-execute-calendar-command): New function
(org-agenda): Improved visible section in window. And
use `org-fit-agenda-window'.
(org-agenda-execute-calendar-command): New function.
(org-agenda): Improve visible section in window.
Use `org-fit-agenda-window'.
(org-fit-agenda-window): New option.
(org-move-subtree-down): Better handling of empty lines
at end of subtree.
@ -84,12 +188,10 @@
(org-fontify-done-headline): New option.
(org-headline-done-face): New face.
(org-set-font-lock-defaults): Use `org-headline-done-face'.
(org-table-copy-down): renamed from
`org-table-copy-from-above'. When current field is non-empty, it
is copied to next row.
(org-table-copy-from-above): Fixed bug which made it
impossible to copy fields containing only a single non-white
character.
(org-table-copy-down): Rename from `org-table-copy-from-above'.
When current field is non-empty, it is copied to next row.
(org-table-copy-from-above): Fix bug which made it
impossible to copy fields containing only a single non-white character.
2005-03-30 Kim F. Storm <storm@cua.dk>

View file

@ -1,6 +1,6 @@
;;; calc-embed.el --- embed Calc in a buffer
;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc.
;; Author: David Gillespie <daveg@synaptics.com>
;; Maintainer: Jay Belanger <belanger@truman.edu>
@ -48,48 +48,18 @@
(defvar calc-embedded-some-active nil)
(make-variable-buffer-local 'calc-embedded-some-active)
(defvar calc-embedded-open-formula "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n"
"*A regular expression for the opening delimiter of a formula used by
calc-embedded.")
(defvar calc-embedded-close-formula "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n"
"*A regular expression for the closing delimiter of a formula used by
calc-embedded.")
(defvar calc-embedded-open-word "^\\|[^-+0-9.eE]"
"*A regular expression for the opening delimiter of a formula used by
calc-embedded-word.")
(defvar calc-embedded-close-word "$\\|[^-+0-9.eE]"
"*A regular expression for the closing delimiter of a formula used by
calc-embedded-word.")
(defvar calc-embedded-open-plain "%%% "
"*A string which is the opening delimiter for a \"plain\" formula.
If calc-show-plain mode is enabled, this is inserted at the front of
each formula.")
(defvar calc-embedded-close-plain " %%%\n"
"*A string which is the closing delimiter for a \"plain\" formula.
See calc-embedded-open-plain.")
(defvar calc-embedded-open-new-formula "\n\n"
"*A string which is inserted at front of formula by calc-embedded-new-formula.")
(defvar calc-embedded-close-new-formula "\n\n"
"*A string which is inserted at end of formula by calc-embedded-new-formula.")
(defvar calc-embedded-announce-formula "%Embed\n\\(% .*\n\\)*"
"*A regular expression which is sure to be followed by a calc-embedded formula." )
(defvar calc-embedded-open-mode "% "
"*A string which should precede calc-embedded mode annotations.
This is not required to be present for user-written mode annotations.")
(defvar calc-embedded-close-mode "\n"
"*A string which should follow calc-embedded mode annotations.
This is not required to be present for user-written mode annotations.")
;; The following variables are customizable and defined in calc.el.
(defvar calc-embedded-announce-formula)
(defvar calc-embedded-open-formula)
(defvar calc-embedded-close-formula)
(defvar calc-embedded-open-word)
(defvar calc-embedded-close-word)
(defvar calc-embedded-open-plain)
(defvar calc-embedded-close-plain)
(defvar calc-embedded-open-new-formula)
(defvar calc-embedded-close-new-formula)
(defvar calc-embedded-open-mode)
(defvar calc-embedded-close-mode)
(defconst calc-embedded-mode-vars '(("precision" . calc-internal-prec)
("word-size" . calc-word-size)

View file

@ -1,6 +1,6 @@
;;; calc-graph.el --- graph output functions for Calc
;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc.
;; Author: David Gillespie <daveg@synaptics.com>
;; Maintainer: Jay Belanger <belanger@truman.edu>
@ -33,14 +33,10 @@
;;; Graphics
(defvar calc-gnuplot-name "gnuplot"
"*Name of GNUPLOT program, for calc-graph features.")
(defvar calc-gnuplot-plot-command nil
"*Name of command for displaying GNUPLOT output; %s = file name to print.")
(defvar calc-gnuplot-print-command "lp %s"
"*Name of command for printing GNUPLOT output; %s = file name to print.")
;; The following three variables are customizable and defined in calc.el.
(defvar calc-gnuplot-name)
(defvar calc-gnuplot-plot-command)
(defvar calc-gnuplot-print-command)
(defvar calc-gnuplot-tempfile "calc")

View file

@ -206,9 +206,121 @@
(require 'calc-macs)
(defgroup calc nil
"GNU Calc"
:prefix "calc-"
:tag "Calc")
;;;###autoload
(defvar calc-settings-file (convert-standard-filename "~/.calc.el")
"*File in which to record permanent settings.")
(defcustom calc-settings-file
(convert-standard-filename "~/.calc.el")
"*File in which to record permanent settings."
:group 'calc
:type '(file))
(defcustom calc-language-alist
'((latex-mode . latex)
(tex-mode . tex)
(plain-tex-mode . tex)
(context-mode . tex)
(nroff-mode . eqn)
(pascal-mode . pascal)
(c-mode . c)
(c++-mode . c)
(fortran-mode . fortran)
(f90-mode . fortran))
"*Alist of major modes with appropriate Calc languages."
:group 'calc
:type '(alist :key-type symbol :value-type symbol))
(defcustom calc-embedded-announce-formula
"%Embed\n\\(% .*\n\\)*"
"*A regular expression which is sure to be followed by a calc-embedded formula."
:group 'calc
:type '(regexp))
(defcustom calc-embedded-open-formula
"\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n"
"*A regular expression for the opening delimiter of a formula used by calc-embedded."
:group 'calc
:type '(regexp))
(defcustom calc-embedded-close-formula
"\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n"
"*A regular expression for the closing delimiter of a formula used by calc-embedded."
:group 'calc
:type '(regexp))
(defcustom calc-embedded-open-word
"^\\|[^-+0-9.eE]"
"*A regular expression for the opening delimiter of a formula used by calc-embedded-word."
:group 'calc
:type '(regexp))
(defcustom calc-embedded-close-word
"$\\|[^-+0-9.eE]"
"*A regular expression for the closing delimiter of a formula used by calc-embedded-word."
:group 'calc
:type '(regexp))
(defcustom calc-embedded-open-plain
"%%% "
"*A string which is the opening delimiter for a \"plain\" formula.
If calc-show-plain mode is enabled, this is inserted at the front of
each formula."
:group 'calc
:type '(string))
(defcustom calc-embedded-close-plain
" %%%\n"
"*A string which is the closing delimiter for a \"plain\" formula.
See calc-embedded-open-plain."
:group 'calc
:type '(string))
(defcustom calc-embedded-open-new-formula
"\n\n"
"*A string which is inserted at front of formula by calc-embedded-new-formula."
:group 'calc
:type '(string))
(defcustom calc-embedded-close-new-formula
"\n\n"
"*A string which is inserted at end of formula by calc-embedded-new-formula."
:group 'calc
:type '(string))
(defcustom calc-embedded-open-mode
"% "
"*A string which should precede calc-embedded mode annotations.
This is not required to be present for user-written mode annotations."
:group 'calc
:type '(string))
(defcustom calc-embedded-close-mode
"\n"
"*A string which should follow calc-embedded mode annotations.
This is not required to be present for user-written mode annotations."
:group 'calc
:type '(string))
(defcustom calc-gnuplot-name
"gnuplot"
"*Name of GNUPLOT program, for calc-graph features."
:group 'calc
:type '(string))
(defcustom calc-gnuplot-plot-command
nil
"*Name of command for displaying GNUPLOT output; %s = file name to print."
:group 'calc
:type '(choice (string) (sexp)))
(defcustom calc-gnuplot-print-command
"lp %s"
"*Name of command for printing GNUPLOT output; %s = file name to print."
:group 'calc
:type '(choice (string) (sexp)))
(defvar calc-bug-address "belanger@truman.edu"
"Address of the author of Calc, for use by `report-calc-bug'.")

View file

@ -72,7 +72,7 @@ or macro definition or a defcustom)."
(let ((car (car-safe form)) expand)
(cond
;; For complex cases, try again on the macro-expansion.
((and (memq car '(easy-mmode-define-global-mode
((and (memq car '(easy-mmode-define-global-mode define-global-minor-mode
easy-mmode-define-minor-mode define-minor-mode))
(setq expand (let ((load-file-name file)) (macroexpand form)))
(eq (car expand) 'progn)

View file

@ -1,6 +1,7 @@
;;; easy-mmode.el --- easy definition for major and minor modes
;; Copyright (C) 1997,2000,01,02,03,2004 Free Software Foundation, Inc.
;; Copyright (C) 1997, 2000, 2001, 2002, 2003, 2004, 2005
;; Free Software Foundation, Inc.
;; Author: Georges Brun-Cottan <Georges.Brun-Cottan@inria.fr>
;; Maintainer: Stefan Monnier <monnier@gnu.org>
@ -152,8 +153,8 @@ For example, you could write
(unless group
;; We might as well provide a best-guess default group.
(setq group
`(:group ',(or (custom-current-group)
(intern (replace-regexp-in-string
`(:group (or (custom-current-group)
',(intern (replace-regexp-in-string
"-mode\\'" "" mode-name))))))
`(progn
@ -253,8 +254,9 @@ With zero or negative ARG turn mode off.
;;;
;;;###autoload
(defmacro easy-mmode-define-global-mode (global-mode mode turn-on
&rest keys)
(defalias 'easy-mmode-define-global-mode 'define-global-minor-mode)
;;;###autoload
(defmacro define-global-minor-mode (global-mode mode turn-on &rest keys)
"Make GLOBAL-MODE out of the buffer-local minor MODE.
TURN-ON is a function that will be called with no args in every buffer
and that should try to turn MODE on if applicable for that buffer.
@ -278,8 +280,8 @@ KEYS is a list of CL-style keyword arguments:
(unless group
;; We might as well provide a best-guess default group.
(setq group
`(:group ',(or (custom-current-group)
(intern (replace-regexp-in-string
`(:group (or (custom-current-group)
',(intern (replace-regexp-in-string
"-mode\\'" "" (symbol-name mode)))))))
`(progn

View file

@ -291,7 +291,7 @@ from `mode-require-final-newline'."
:group 'editing-basics)
(defcustom mode-require-final-newline t
"*Whether to add a newline at the end of the file, in certain major modes.
"*Whether to add a newline at end of file, in certain major modes.
Those modes set `require-final-newline' to this value when you enable them.
They do so because they are used for files that are supposed
to end in newlines, and the question is how to arrange that.
@ -299,10 +299,16 @@ to end in newlines, and the question is how to arrange that.
A value of t means do this only when the file is about to be saved.
A value of `visit' means do this right after the file is visited.
A value of `visit-save' means do it at both of those times.
Any other non-nil value means ask user whether to add a newline, when saving."
Any other non-nil value means ask user whether to add a newline, when saving.
nil means don't add newlines.
You will have to be careful if you set this to nil: you will have
to remember to manually add a final newline whenever you finish a
file that really needs one."
:type '(choice (const :tag "When visiting" visit)
(const :tag "When saving" t)
(const :tag "When visiting or saving" visit-save)
(const :tag "Never" nil)
(other :tag "Ask" ask))
:group 'editing-basics
:version "22.1")

View file

@ -217,58 +217,72 @@ FUNCTION-LIST is a list of functions to call to do some
additional setup.
See the file generic-x.el for some examples of `define-generic-mode'."
(let* ((name-unquoted (if (eq (car-safe mode) 'quote) ; Backward compatibility.
(eval mode)
mode))
(name-string (symbol-name name-unquoted))
(declare (debug (sexp def-form def-form def-form form def-form
&optional stringp))
(indent 1))
;; Backward compatibility.
(when (eq (car-safe mode) 'quote)
(setq mode (eval mode)))
(let* ((mode-name (symbol-name mode))
(pretty-name (capitalize (replace-regexp-in-string
"-mode\\'" "" name-string))))
"-mode\\'" "" mode-name)))
(mode-hook (intern (concat mode-name "-hook"))))
`(progn
;; Add a new entry.
(add-to-list 'generic-mode-list ,name-string)
(add-to-list 'generic-mode-list ,mode-name)
;; Add it to auto-mode-alist
(dolist (re ,auto-mode-list)
(add-to-list 'auto-mode-alist (cons re ',name-unquoted)))
(add-to-list 'auto-mode-alist (cons re ',mode)))
(defun ,name-unquoted ()
(defcustom ,mode-hook nil
,(concat "Hook run when entering " pretty-name " mode.")
:type 'hook
:group (or (custom-current-group)
',(intern (replace-regexp-in-string
"-mode\\'" "" mode-name))))
(defun ,mode ()
,(or docstring
(concat pretty-name " mode.\n"
"This a generic mode defined with `define-generic-mode'."))
(interactive)
(generic-mode-internal ',name-unquoted ,comment-list ,keyword-list
(generic-mode-internal ',mode ,comment-list ,keyword-list
,font-lock-list ,function-list)))))
;;;###autoload
(defun generic-mode-internal (mode comments keywords font-lock-list funs)
(defun generic-mode-internal (mode comment-list keyword-list
font-lock-list function-list)
"Go into the generic mode MODE."
(let* ((modename (symbol-name mode))
(generic-mode-hooks (intern (concat modename "-hook")))
(let* ((mode-name (symbol-name mode))
(pretty-name (capitalize (replace-regexp-in-string
"-mode\\'" "" modename))))
"-mode\\'" "" mode-name)))
(mode-hook (intern (concat mode-name "-hook"))))
(kill-all-local-variables)
(setq major-mode mode
mode-name pretty-name)
(generic-mode-set-comments comments)
(generic-mode-set-comments comment-list)
;; Font-lock functionality.
;; Font-lock-defaults is always set even if there are no keywords
;; or font-lock expressions, so comments can be highlighted.
(setq generic-font-lock-keywords
(append
(when keywords
(list (generic-make-keywords-list keywords font-lock-keyword-face)))
(when keyword-list
(list (generic-make-keywords-list keyword-list
font-lock-keyword-face)))
font-lock-list))
(setq font-lock-defaults '(generic-font-lock-keywords nil))
;; Call a list of functions
(mapcar 'funcall funs)
(mapcar 'funcall function-list)
(run-hooks generic-mode-hooks)))
(run-mode-hooks mode-hook)))
;;;###autoload
(defun generic-mode (mode)
@ -392,7 +406,7 @@ This hook will be installed if the variable
(defun generic-mode-ini-file-find-file-hook ()
"Hook function to enter Default-Generic mode automatically for INI files.
Done if the first few lines of a file in Fundamental mode look like an
Done if the first few lines of a file in Fundamental mode look like an
INI file. This hook is NOT installed by default."
(and (eq major-mode 'fundamental-mode)
(save-excursion

View file

@ -1935,19 +1935,21 @@ If INITIAL is non-nil, it specifies the initial input string."
;; Internal function for ido-find-file and friends
(unless item
(setq item 'file))
(let* ((ido-current-directory (ido-expand-directory default))
(ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory))
(ido-directory-too-big (and (not ido-directory-nonreadable)
(ido-directory-too-big-p ido-current-directory)))
(ido-context-switch-command switch-cmd)
filename)
(let ((ido-current-directory (ido-expand-directory default))
(ido-context-switch-command switch-cmd)
ido-directory-nonreadable ido-directory-too-big
filename)
(cond
((or (not ido-mode) (ido-is-slow-ftp-host))
(setq filename t
ido-exit 'fallback))
(if (or (not ido-mode) (ido-is-slow-ftp-host))
(setq filename t
ido-exit 'fallback)
(setq ido-directory-nonreadable
(ido-nonreadable-directory-p ido-current-directory)
ido-directory-too-big
(and (not ido-directory-nonreadable)
(ido-directory-too-big-p ido-current-directory))))
((and (eq item 'file)
(when (and (eq item 'file)
(or ido-use-url-at-point ido-use-filename-at-point))
(let (fn d)
(require 'ffap)
@ -1966,7 +1968,7 @@ If INITIAL is non-nil, it specifies the initial input string."
(setq d (file-name-directory fn))
(file-directory-p d))
(setq ido-current-directory d)
(setq initial (file-name-nondirectory fn)))))))
(setq initial (file-name-nondirectory fn))))))
(let (ido-saved-vc-hb
(vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends))

View file

@ -10780,7 +10780,7 @@ the current word list."
;; character by character.
(while this
(setq pos (1+ pos)
char (char-after pos)
char (or (char-after pos) 0)
category-set (char-category-set char))
;; If the current sequence is recorded in `thai-word-table'
;; (i.e. (car THIS) is 1) and the following Thai character is

View file

@ -1622,13 +1622,15 @@ a remote mailbox, PASSWORD is the password if it should be
supplied as a separate argument to `movemail' or nil otherwise, GOT-PASSWORD
is non-nil if the user has supplied the password interactively.
"
(if (string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file)
(cond
((string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file)
(let (got-password supplied-password
(proto (match-string 1 file))
(user (match-string 3 file))
(pass (match-string 5 file))
(host (substring file (or (match-end 2)
(+ 3 (match-end 1))))))
(if (not pass)
(when rmail-remote-password-required
(setq got-password (not (rmail-have-password)))
@ -1645,8 +1647,22 @@ is non-nil if the user has supplied the password interactively.
(list file
(or (string-equal proto "pop") (string-equal proto "imap"))
supplied-password
got-password)))
(list file nil nil nil)))
got-password))))
((string-match "^po:\\([^:]+\\)\\(:\\(.*\\)\\)?" file)
(let (got-password supplied-password
(proto "pop")
(user (match-string 1 file))
(host (match-string 3 file)))
(when rmail-remote-password-required
(setq got-password (not (rmail-have-password)))
(setq supplied-password (rmail-get-remote-password nil)))
(list file "pop" supplied-password got-password)))
(t
(list file nil nil nil))))
(defun rmail-insert-inbox-text (files renamep)
;; Detect a locked file now, so that we avoid moving mail
@ -1686,15 +1702,7 @@ is non-nil if the user has supplied the password interactively.
(expand-file-name buffer-file-name))))
;; Always use movemail to rename the file,
;; since there can be mailboxes in various directories.
(setq movemail t)
;;; ;; If getting from mail spool directory,
;;; ;; use movemail to move rather than just renaming,
;;; ;; so as to interlock with the mailer.
;;; (setq movemail (string= file
;;; (file-truename
;;; (concat rmail-spool-directory
;;; (file-name-nondirectory file)))))
(if (and movemail (not popmail))
(if (not popmail)
(progn
;; On some systems, /usr/spool/mail/foo is a directory
;; and the actual inbox is /usr/spool/mail/foo/foo.
@ -1716,23 +1724,6 @@ is non-nil if the user has supplied the password interactively.
((or (file-exists-p tofile) (and (not popmail)
(not (file-exists-p file))))
nil)
((and (not movemail) (not popmail))
;; Try copying. If that fails (perhaps no space) and
;; we're allowed to blow away the inbox, rename instead.
(if rmail-preserve-inbox
(copy-file file tofile nil)
(condition-case nil
(copy-file file tofile nil)
(error
;; Third arg is t so we can replace existing file TOFILE.
(rename-file file tofile t))))
;; Make the real inbox file empty.
;; Leaving it deleted could cause lossage
;; because mailers often won't create the file.
(if (not rmail-preserve-inbox)
(condition-case ()
(write-region (point) (point) file)
(file-error nil))))
(t
(with-temp-buffer
(let ((errors (current-buffer)))

View file

@ -49,7 +49,7 @@
:version "22.1"
:group 'mouse)
(defcustom mouse-1-click-follows-link 350
(defcustom mouse-1-click-follows-link 450
"Non-nil means that clicking Mouse-1 on a link follows the link.
With the default setting, an ordinary Mouse-1 click on a link
@ -837,6 +837,29 @@ at the same position."
(funcall action pos))
(t action)))))))
(defun mouse-fixup-help-message (msg)
"Fix help message MSG for `mouse-1-click-follows-link'."
(let (mp pos)
(if (and mouse-1-click-follows-link
(stringp msg)
(save-match-data
(string-match "^mouse-2" msg))
(setq mp (mouse-pixel-position))
(consp (setq pos (cdr mp)))
(car pos) (>= (car pos) 0)
(cdr pos) (>= (cdr pos) 0)
(setq pos (posn-at-x-y (car pos) (cdr pos) (car mp)))
(windowp (posn-window pos)))
(with-current-buffer (window-buffer (posn-window pos))
(if (mouse-on-link-p pos)
(setq msg (concat
(cond
((eq mouse-1-click-follows-link 'double) "double-")
((and (integerp mouse-1-click-follows-link)
(< mouse-1-click-follows-link 0)) "Long ")
(t ""))
"mouse-1" (substring msg 7)))))))
msg)
(defun mouse-drag-region-1 (start-event)
(mouse-minibuffer-check start-event)
@ -886,6 +909,7 @@ at the same position."
(track-mouse
(while (progn
(setq event (read-event))
(setq mve (cons event (and (boundp 'mve) mve)))
(or (mouse-movement-p event)
(memq (car-safe event) '(switch-frame select-window))))
(if (memq (car-safe event) '(switch-frame select-window))
@ -997,7 +1021,7 @@ at the same position."
(= (window-start start-window)
start-window-start)))
(if (and on-link
(not end-point)
(or (not end-point) (= end-point start-point))
(consp event)
(or remap-double-click
(and

View file

@ -358,7 +358,7 @@ from the current buffer."
(dir default-directory)
(buf (cond
(name (cvs-get-buffer-create name))
((and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer))
((and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer))
cvs-temp-buffer)
(t
(set (make-local-variable 'cvs-temp-buffer)
@ -528,39 +528,49 @@ If non-nil, NEW means to create a new buffer no matter what."
(files (nth 1 dir+files+rest))
(rest (nth 2 dir+files+rest)))
;; setup the (current) process buffer
(set (make-local-variable 'cvs-postprocess)
(if (null rest)
;; this is the last invocation
postprocess
;; else, we have to register ourselves to be rerun on the rest
`(cvs-run-process ',args ',rest ',postprocess ',single-dir)))
(add-hook 'kill-buffer-hook
(lambda ()
(let ((proc (get-buffer-process (current-buffer))))
(when (processp proc)
(set-process-filter proc nil)
(set-process-sentinel proc nil)
(delete-process proc))))
;; Abort postprocessing but leave the sentinel so it
;; will update the list of running procs.
(process-put proc 'cvs-postprocess nil)
(interrupt-process proc))))
nil t)
;; create the new process and setup the procbuffer correspondingly
(let* ((args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery)
(let* ((msg (cvs-header-msg args fis))
(args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery)
(if cvs-cvsroot (list "-d" cvs-cvsroot))
args
files))
;; If process-connection-type is nil and the repository
;; is accessed via SSH, a bad interaction between libc,
;; CVS and SSH can lead to garbled output.
;; It might be a glibc-specific problem (but it also happens
;; It might be a glibc-specific problem (but it can also happens
;; under Mac OS X, it seems).
;; Until the problem is cleared, we'll use a pty rather than
;; a pipe.
;; (process-connection-type nil) ; Use a pipe, not a pty.
;; It seems that using a pty can help circumvent the problem,
;; but at the cost of screwing up when the process thinks it
;; can ask for user input (such as password or host-key
;; confirmation). A better workaround is to set CVS_RSH to
;; an appropriate script, or to use a later version of CVS.
(process-connection-type nil) ; Use a pipe, not a pty.
(process
;; the process will be run in the selected dir
(let ((default-directory (cvs-expand-dir-name dir)))
(apply 'start-process "cvs" procbuf cvs-program args))))
;; setup the process.
(process-put process 'cvs-buffer cvs-buffer)
(with-current-buffer cvs-buffer (cvs-update-header msg 'add))
(process-put process 'cvs-header msg)
(process-put
process 'cvs-postprocess
(if (null rest)
;; this is the last invocation
postprocess
;; else, we have to register ourselves to be rerun on the rest
`(cvs-run-process ',args ',rest ',postprocess ',single-dir)))
(set-process-sentinel process 'cvs-sentinel)
(set-process-filter process 'cvs-update-filter)
(set-marker (process-mark process) (point-max))
@ -636,33 +646,35 @@ If non-nil, NEW means to create a new buffer no matter what."
This is responsible for parsing the output from the cvs update when
it is finished."
(when (memq (process-status proc) '(signal exit))
(if (null (buffer-name (process-buffer proc)))
;;(set-process-buffer proc nil)
(error "cvs' process buffer was killed")
(let* ((obuf (current-buffer))
(procbuffer (process-buffer proc)))
(set-buffer (with-current-buffer procbuffer cvs-buffer))
(setq cvs-mode-line-process (symbol-name (process-status proc)))
(force-mode-line-update)
(set-buffer procbuffer)
(let ((cvs-postproc cvs-postprocess))
;; Since the buffer and mode line will show that the
;; process is dead, we can delete it now. Otherwise it
;; will stay around until M-x list-processes.
(delete-process proc)
(setq cvs-postprocess nil)
;; do the postprocessing like parsing and such
(save-excursion (eval cvs-postproc))
;; check whether something is left
(unless cvs-postprocess
;; IIRC, we enable undo again once the process is finished
;; for cases where the output was inserted in *vc-diff* or
;; in a file-like buffer. -stef
(buffer-enable-undo)
(with-current-buffer cvs-buffer
(message "CVS process has completed in %s" (buffer-name)))))
;; This might not even be necessary
(set-buffer obuf)))))
(let ((cvs-postproc (process-get proc 'cvs-postprocess))
(cvs-buf (process-get proc 'cvs-buffer)))
;; Since the buffer and mode line will show that the
;; process is dead, we can delete it now. Otherwise it
;; will stay around until M-x list-processes.
(process-put proc 'postprocess nil)
(delete-process proc)
;; Don't do anything if the main buffer doesn't exist any more.
(when (buffer-live-p cvs-buf)
(with-current-buffer cvs-buf
(cvs-update-header (process-get proc 'cvs-header) nil)
(setq cvs-mode-line-process (symbol-name (process-status proc)))
(force-mode-line-update)
(when cvs-postproc
(if (null (buffer-live-p (process-buffer proc)))
;;(set-process-buffer proc nil)
(error "cvs' process buffer was killed")
(with-current-buffer (process-buffer proc)
;; do the postprocessing like parsing and such
(save-excursion (eval cvs-postproc))
;; check whether something is left
(unless (get-buffer-process (current-buffer))
;; IIRC, we enable undo again once the process is finished
;; for cases where the output was inserted in *vc-diff* or
;; in a file-like buffer. --Stef
(buffer-enable-undo)
(with-current-buffer cvs-buffer
(message "CVS process has completed in %s"
(buffer-name))))))))))))
(defun cvs-parse-process (dcd &optional subdir old-fis)
"Parse the output of a cvs process.
@ -770,7 +782,7 @@ before calling the real function `" (symbol-name fun-1) "'.\n")
(defun-cvs-mode cvs-mode-kill-process ()
"Kill the temporary buffer and associated process."
(interactive)
(when (and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer))
(when (and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer))
(let ((proc (get-buffer-process cvs-temp-buffer)))
(when proc (delete-process proc)))))
@ -1133,7 +1145,7 @@ Full documentation is in the Texinfo file."
(eq (ewoc-buffer cvs-cookies) buf)
(setq check 'cvs-temp-buffer)
(or (null cvs-temp-buffer)
(null (buffer-name cvs-temp-buffer))
(null (buffer-live-p cvs-temp-buffer))
(and (eq (with-current-buffer cvs-temp-buffer cvs-buffer) buf)
(equal (with-current-buffer cvs-temp-buffer
default-directory)
@ -1822,11 +1834,6 @@ POSTPROC is a list of expressions to be evaluated at the very end (after
;; absence of `cvs update' output has a specific meaning.
(or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." ""))))))
(push `(cvs-parse-process ',dont-change-disc nil ',old-fis) postproc)))
(let ((msg (cvs-header-msg args fis)))
(cvs-update-header msg 'add)
(push `(with-current-buffer cvs-buffer
(cvs-update-header ',msg nil))
postproc))
(setq postproc (if (cdr postproc) (cons 'progn postproc) (car postproc)))
(with-current-buffer buf
(let ((inhibit-read-only t)) (erase-buffer))

View file

@ -90,7 +90,7 @@
(modify-syntax-entry ?\] ")[ " st)
(modify-syntax-entry ?{ "(} " st)
(modify-syntax-entry ?} "){ " st)
(modify-syntax-entry ?\| " 23" st)
(modify-syntax-entry ?\| "\" 23b" st)
;; Other atom delimiters
(modify-syntax-entry ?\( "() " st)
@ -103,7 +103,7 @@
;; Special characters
(modify-syntax-entry ?, "' " st)
(modify-syntax-entry ?@ "' " st)
(modify-syntax-entry ?# "' 14" st)
(modify-syntax-entry ?# "' 14bn" st)
(modify-syntax-entry ?\\ "\\ " st)
st))

View file

@ -5238,6 +5238,7 @@ Enabling Visible mode makes all invisible text temporarily visible.
Disabling Visible mode turns off that effect. Visible mode
works by saving the value of `buffer-invisibility-spec' and setting it to nil."
:lighter " Vis"
:group 'editing-basics
(when (local-variable-p 'vis-mode-saved-buffer-invisibility-spec)
(setq buffer-invisibility-spec vis-mode-saved-buffer-invisibility-spec)
(kill-local-variable 'vis-mode-saved-buffer-invisibility-spec))

View file

@ -469,27 +469,7 @@ This function must return nil if it doesn't handle EVENT."
(defun tooltip-show-help-function (msg)
"Function installed as `show-help-function'.
MSG is either a help string to display, or nil to cancel the display."
(let ((previous-help tooltip-help-message)
mp pos)
(if (and mouse-1-click-follows-link
(stringp msg)
(save-match-data
(string-match "^mouse-2" msg))
(setq mp (mouse-pixel-position))
(consp (setq pos (cdr mp)))
(car pos) (>= (car pos) 0)
(cdr pos) (>= (cdr pos) 0)
(setq pos (posn-at-x-y (car pos) (cdr pos) (car mp)))
(windowp (posn-window pos)))
(with-current-buffer (window-buffer (posn-window pos))
(if (mouse-on-link-p pos)
(setq msg (concat
(cond
((eq mouse-1-click-follows-link 'double) "double-")
((and (integerp mouse-1-click-follows-link)
(< mouse-1-click-follows-link 0)) "Long ")
(t ""))
"mouse-1" (substring msg 7))))))
(let ((previous-help tooltip-help-message))
(setq tooltip-help-message msg)
(cond ((null msg)
;; Cancel display. This also cancels a delayed tip, if

184
lisp/url/vc-dav.el Normal file
View file

@ -0,0 +1,184 @@
;;; vc-dav.el --- vc.el support for WebDAV
;; Copyright (C) 2001 Free Software Foundation, Inc.
;; Author: Bill Perry <wmperry@gnu.org>
;; Maintainer: Bill Perry <wmperry@gnu.org>
;; Keywords: url, vc
;; 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 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;;; Code:
(require 'url)
(require 'url-dav)
;;; Required functions for a vc backend
(defun vc-dav-registered (url)
"Return t iff URL is registered with a DAV aware server."
(url-dav-vc-registered url))
(defun vc-dav-state (url)
"Return the current version control state of URL.
For a list of possible values, see `vc-state'."
;; Things we can support for WebDAV
;;
;; up-to-date - use lockdiscovery
;; edited - check for an active lock by us
;; USER - use lockdiscovery + owner
;;
;; These don't make sense for WebDAV
;; needs-patch
;; needs-merge
;; unlocked-changes
(let ((locks (url-dav-active-locks url)))
(cond
((null locks) 'up-to-date)
((assoc url locks)
;; SOMEBODY has a lock... let's find out who.
(setq locks (cdr (assoc url locks)))
(if (rassoc url-dav-lock-identifier locks)
;; _WE_ have a lock
'edited
(cdr (car locks)))))))
(defun vc-dav-checkout-model (url)
"Indicate whether URL needs to be \"checked out\" before it can be edited.
See `vc-checkout-model' for a list of possible values."
;; The only thing we can support with webdav is 'locking
'locking)
;; This should figure out the version # of the file somehow. What is
;; the most appropriate property in WebDAV to look at for this?
(defun vc-dav-workfile-version (url)
"Return the current workfile version of URL."
"Unknown")
(defun vc-dav-register (url &optional rev comment)
"Register URL in the DAV backend."
;; Do we need to do anything here? FIXME?
)
(defun vc-dav-checkin (url rev comment)
"Commit changes in URL to WebDAV.
If REV is non-nil, that should become the new revision number.
COMMENT is used as a check-in comment."
;; This should PUT the resource and release any locks that we hold.
)
(defun vc-dav-checkout (url &optional editable rev destfile)
"Check out revision REV of URL into the working area.
If EDITABLE is non-nil URL should be writable by the user and if
locking is used for URL, a lock should also be set.
If REV is non-nil, that is the revision to check out. If REV is the
empty string, that means to check ou tht ehead of the trunk.
If optional arg DESTFILE is given, it is an alternate filename to
write the contents to.
"
;; This should LOCK the resource.
)
(defun vc-dav-revert (url &optional contents-done)
"Revert URL back to the current workfile version.
If optional arg CONTENTS-DONE is non-nil, then the contents of FILE
have already been reverted from a version backup, and this function
only needs to update the status of URL within the backend.
"
;; Should do a GET if !contents_done
;; Should UNLOCK the file.
)
(defun vc-dav-print-log (url)
"Insert the revision log of URL into the *vc* buffer."
)
(defun vc-dav-diff (url &optional rev1 rev2)
"Insert the diff for URL into the *vc-diff* buffer.
If REV1 and REV2 are non-nil report differences from REV1 to REV2.
If REV1 is nil, use the current workfile version as the older version.
If REV2 is nil, use the current workfile contents as the nwer version.
It should return a status of either 0 (no differences found), or
1 (either non-empty diff or the diff is run asynchronously).
"
;; We should do this asynchronously...
;; How would we do it at all, that is the question!
)
;;; Optional functions
;; Should be faster than vc-dav-state - but how?
(defun vc-dav-state-heuristic (url)
"Estimate the version control state of URL at visiting time."
(vc-dav-state url))
;; This should use url-dav-get-properties with a depth of `1' to get
;; all the properties.
(defun vc-dav-dir-state (url)
"find the version control state of all files in DIR in a fast way."
)
(defun vc-dav-workfile-unchanged-p (url)
"Return non-nil if URL is unchanged from its current workfile version."
;; Probably impossible with webdav
)
(defun vc-dav-responsible-p (url)
"Return non-nil if DAV considers itself `responsible' for URL."
;; Check for DAV support on the web server.
t)
(defun vc-dav-could-register (url)
"Return non-nil if URL could be registered under this backend."
;; Check for DAV support on the web server.
t)
;;; Unimplemented functions
;;
;; vc-dav-latest-on-branch-p(URL)
;; Return non-nil if the current workfile version of FILE is the
;; latest on its branch. There are no branches in webdav yet.
;;
;; vc-dav-mode-line-string(url)
;; Return a dav-specific mode line string for URL. Are there any
;; specific states that we want exposed?
;;
;; vc-dav-dired-state-info(url)
;; Translate the `vc-state' property of URL into a string that can
;; be used in a vc-dired buffer. Are there any extra states that
;; we want exposed?
;;
;; vc-dav-receive-file(url rev)
;; Let this backend `receive' a file that is already registered
;; under another backend. The default just calls `register', which
;; should be sufficient for WebDAV.
;;
;; vc-dav-unregister(url)
;; Unregister URL. Not possible with WebDAV, other than by
;; deleting the resource.
(provide 'vc-dav)
;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e
;;; vc-dav.el ends here

View file

@ -481,7 +481,9 @@ and does not employ any heuristic at all."
"Return non-nil if FILE has not changed since the last checkout."
(let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
(lastmod (nth 5 (file-attributes file))))
(if checkout-time
(if (and checkout-time
;; Tramp and Ange-FTP return this when they don't know the time.
(not (equal lastmod '(0 0))))
(equal checkout-time lastmod)
(let ((unchanged (vc-call workfile-unchanged-p file)))
(vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0))

View file

@ -1,3 +1,12 @@
2005-04-01 Richard M. Stallman <rms@gnu.org>
* nonascii.texi (Coding System Basics): Clarify previous change.
2005-04-01 Kenichi Handa <handa@m17n.org>
* nonascii.texi (Coding System Basics): Describe about rondtrip
identity of coding systems.
2005-03-29 Chong Yidong <cyd@stupidchicken.com>
* text.texi (Buffer Contents): Add filter-buffer-substring and

View file

@ -628,6 +628,27 @@ characters; for example, there are three coding systems for the Cyrillic
conversion, but some of them leave the choice unspecified---to be chosen
heuristically for each file, based on the data.
In general, a coding system doesn't guarantee roundtrip identity:
decoding text then encoding the result in the same coding system can
produce a different byte sequence from the one you originally decoded.
However, the following coding systems do guarantee that the result
will be the same as what you originally decoded:
@quotation
chinese-big5 chinese-iso-8bit cyrillic-iso-8bit emacs-mule
greek-iso-8bit hebrew-iso-8bit iso-latin-1 iso-latin-2 iso-latin-3
iso-latin-4 iso-latin-5 iso-latin-8 iso-latin-9 iso-safe
japanese-iso-8bit japanese-shift-jis korean-iso-8bit raw-text
@end quotation
Encoding buffer text and then decoding the result can also fail to
reproduce the original text. For instance, when you encode Latin-2
characters with @code{utf-8} and decode the result using the same
coding system, you'll get Unicode characters (of charset
@code{mule-unicode-0100-24ff}). When you encode Unicode characters
with @code{iso-latin-2} and decode them back with the same coding
system, you'll get Latin-2 characters.
@cindex end of line conversion
@dfn{End of line conversion} handles three different conventions used
on various systems for representing end of line in files. The Unix

View file

@ -1,3 +1,16 @@
2005-04-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
Reenable support for I18N to Lucid menus.
* xlwmenuP.h (_XlwMenu_part): Add fontSet resource.
* xlwmenu.c (string_width):
(MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto.
(display_menu_item, make_drawing_gcs, XlwMenuInitialize)
(XlwMenuSetValues): Use font if fontSet is NULL, use only
font for !HAVE_X_I18N.
(xlwMenuResources): Add fontSet resource.
2005-03-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* xlwmenuP.h: Temporary #undef HAVE_X_I18N until FontSet for UTF-8

View file

@ -131,20 +131,16 @@ xlwMenuTranslations [] =
/* FIXME: F10 should enter the menu, the first one in the menu-bar. */
/* FIXME: HAVE_X_I18N does not work yet. */
#undef HAVE_X_I18N
#define offset(field) XtOffset(XlwMenuWidget, field)
static XtResource
xlwMenuResources[] =
{
#ifdef HAVE_X_I18N
{XtNfont, XtCFont, XtRFontSet, sizeof(XFontSet),
offset(menu.font), XtRString, "XtDefaultFontSet"},
#else
{XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet),
offset(menu.fontSet), XtRFontSet, NULL},
#endif
{XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
offset(menu.font), XtRString, "XtDefaultFont"},
#endif
{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
offset(menu.foreground), XtRString, "XtDefaultForeground"},
{XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel),
@ -361,24 +357,31 @@ string_width (mw, s)
XlwMenuWidget mw;
char *s;
{
#ifdef HAVE_X_I18N
XRectangle ink, logical;
XmbTextExtents (mw->menu.font, s, strlen (s), &ink, &logical);
return logical.width;
#else
XCharStruct xcs;
int drop;
#ifdef HAVE_X_I18N
XRectangle ink, logical;
if (mw->menu.fontSet)
{
XmbTextExtents (mw->menu.fontSet, s, strlen (s), &ink, &logical);
return logical.width;
}
#endif
XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs);
return xcs.width;
#endif
}
#ifdef HAVE_X_I18N
#define MENU_FONT_HEIGHT(mw) \
((mw)->menu.font_extents->max_logical_extent.height)
((mw)->menu.fontSet != NULL \
? (mw)->menu.font_extents->max_logical_extent.height \
: (mw)->menu.font->ascent + (mw)->menu.font->descent)
#define MENU_FONT_ASCENT(mw) \
(- (mw)->menu.font_extents->max_logical_extent.y)
((mw)->menu.fontSet != NULL \
? - (mw)->menu.font_extents->max_logical_extent.y \
: (mw)->menu.font->ascent)
#else
#define MENU_FONT_HEIGHT(mw) \
((mw)->menu.font->ascent + (mw)->menu.font->descent)
@ -1053,10 +1056,14 @@ display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p,
#ifdef HAVE_X_I18N
XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font,
#else
XDrawString (XtDisplay (mw), ws->window,
if (mw->menu.fontSet)
XmbDrawString (XtDisplay (mw), ws->window, mw->menu.fontSet,
text_gc, x_offset,
y + v_spacing + shadow + font_ascent,
display_string, strlen (display_string));
else
#endif
XDrawString (XtDisplay (mw), ws->window,
text_gc, x_offset,
y + v_spacing + shadow + font_ascent,
display_string, strlen (display_string));
@ -1083,10 +1090,16 @@ display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p,
else if (val->key)
{
#ifdef HAVE_X_I18N
XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font,
#else
XDrawString (XtDisplay (mw), ws->window,
if (mw->menu.fontSet)
XmbDrawString (XtDisplay (mw), ws->window,
mw->menu.fontSet,
text_gc,
x + label_width + mw->menu.arrow_spacing,
y + v_spacing + shadow + font_ascent,
val->key, strlen (val->key));
else
#endif
XDrawString (XtDisplay (mw), ws->window,
text_gc,
x + label_width + mw->menu.arrow_spacing,
y + v_spacing + shadow + font_ascent,
@ -1493,34 +1506,25 @@ make_drawing_gcs (mw)
{
XGCValues xgcv;
float scale;
XtGCMask mask = GCForeground | GCBackground;
#ifndef HAVE_X_I18N
#ifdef HAVE_X_I18N
if (!mw->menu.fontSet)
{
xgcv.font = mw->menu.font->fid;
mask |= GCFont;
}
#else
xgcv.font = mw->menu.font->fid;
mask |= GCFont;
#endif
xgcv.foreground = mw->menu.foreground;
xgcv.background = mw->core.background_pixel;
mw->menu.foreground_gc = XtGetGC ((Widget)mw,
#ifndef HAVE_X_I18N
GCFont |
#endif
GCForeground | GCBackground,
&xgcv);
mw->menu.foreground_gc = XtGetGC ((Widget)mw, mask, &xgcv);
#ifndef HAVE_X_I18N
xgcv.font = mw->menu.font->fid;
#endif
xgcv.foreground = mw->menu.button_foreground;
xgcv.background = mw->core.background_pixel;
mw->menu.button_gc = XtGetGC ((Widget)mw,
#ifndef HAVE_X_I18N
GCFont |
#endif
GCForeground | GCBackground,
&xgcv);
mw->menu.button_gc = XtGetGC ((Widget)mw, mask, &xgcv);
#ifndef HAVE_X_I18N
xgcv.font = mw->menu.font->fid;
#endif
xgcv.background = mw->core.background_pixel;
#define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff))
@ -1545,49 +1549,26 @@ make_drawing_gcs (mw)
xgcv.foreground = mw->menu.foreground;
xgcv.fill_style = FillStippled;
xgcv.stipple = mw->menu.gray_pixmap;
mw->menu.disabled_gc = XtGetGC ((Widget)mw,
#ifndef HAVE_X_I18N
GCFont |
#endif
GCForeground | GCBackground
mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask
| GCFillStyle | GCStipple, &xgcv);
}
else
{
/* Many colors available, use disabled pixel. */
xgcv.foreground = mw->menu.disabled_foreground;
mw->menu.disabled_gc = XtGetGC ((Widget)mw,
#ifndef HAVE_X_I18N
GCFont |
#endif
GCForeground | GCBackground, &xgcv);
mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask, &xgcv);
}
#ifndef HAVE_X_I18N
xgcv.font = mw->menu.font->fid;
#endif
xgcv.foreground = mw->menu.button_foreground;
xgcv.background = mw->core.background_pixel;
xgcv.fill_style = FillStippled;
xgcv.stipple = mw->menu.gray_pixmap;
mw->menu.inactive_button_gc = XtGetGC ((Widget)mw,
#ifndef HAVE_X_I18N
GCFont |
#endif
GCForeground | GCBackground
mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, mask
| GCFillStyle | GCStipple, &xgcv);
#ifndef HAVE_X_I18N
xgcv.font = mw->menu.font->fid;
#endif
xgcv.foreground = mw->core.background_pixel;
xgcv.background = mw->menu.foreground;
mw->menu.background_gc = XtGetGC ((Widget)mw,
#ifndef HAVE_X_I18N
GCFont |
#endif
GCForeground | GCBackground,
&xgcv);
mw->menu.background_gc = XtGetGC ((Widget)mw, mask, &xgcv);
}
static void
@ -1793,14 +1774,14 @@ XlwMenuInitialize (request, mw, args, num_args)
gray_bitmap_width, gray_bitmap_height,
(unsigned long)1, (unsigned long)0, 1);
#ifndef HAVE_X_I18N
/* I don't understand why this ends up 0 sometimes,
but it does. This kludge works around it.
Can anyone find a real fix? -- rms. */
if (mw->menu.font == 0)
mw->menu.font = xlwmenu_default_font;
#else
mw->menu.font_extents = XExtentsOfFontSet (mw->menu.font);
#ifdef HAVE_X_I18N
if (mw->menu.fontSet)
mw->menu.font_extents = XExtentsOfFontSet (mw->menu.fontSet);
#endif
make_drawing_gcs (mw);
@ -1969,7 +1950,10 @@ XlwMenuSetValues (current, request, new)
if (newmw->core.background_pixel != oldmw->core.background_pixel
|| newmw->menu.foreground != oldmw->menu.foreground
#ifndef HAVE_X_I18N
#ifdef HAVE_X_I18N
|| newmw->menu.fontSet != oldmw->menu.fontSet
|| (newmw->menu.fontSet == NULL && newmw->menu.font != oldmw->menu.font)
#else
|| newmw->menu.font != oldmw->menu.font
#endif
)
@ -1999,10 +1983,10 @@ XlwMenuSetValues (current, request, new)
}
#ifdef HAVE_X_I18N
if (newmw->menu.font != oldmw->menu.font)
if (newmw->menu.fontSet != oldmw->menu.fontSet && newmw->menu.fontSet != NULL)
{
redisplay = True;
newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.font);
newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.fontSet);
}
#endif

View file

@ -24,9 +24,6 @@ Boston, MA 02111-1307, USA. */
#include "xlwmenu.h"
#include <X11/CoreP.h>
/* FIXME: HAVE_X_I18N does not work yet. */
#undef HAVE_X_I18N
/* Elements in the stack arrays. */
typedef struct _window_state
{
@ -47,11 +44,10 @@ typedef struct _XlwMenu_part
{
/* slots set by the resources */
#ifdef HAVE_X_I18N
XFontSet font;
XFontSet fontSet;
XFontSetExtents *font_extents;
#else
XFontStruct* font;
#endif
XFontStruct* font;
Pixel foreground;
Pixel disabled_foreground;
Pixel button_foreground;

View file

@ -1,3 +1,29 @@
2005-04-01 Jay Belanger <belanger@truman.edu>
* calc.texi (Troubleshooting Commands): Remove comment about
installation.
(Installation): Remove section.
(Customizable Variables): New section.
(Basic Embedded Mode, Customizing Embedded Mode, Graphics)
(Graphical Devices): Add references to Customizable Variables.
2005-04-01 Lute Kamstra <lute@gnu.org>
* maintaining.texi (Change Log): add-change-log-entry uses
add-log-mailing-address.
2005-03-31 Luc Teirlinck <teirllm@auburn.edu>
* files.texi (Reverting): Move `auto-revert-check-vc-info' to
`VC Mode Line' and put in an xref to that node.
(VC Mode Line): Move `auto-revert-check-vc-info' here and clarify
its description.
2005-03-31 Paul Eggert <eggert@cs.ucla.edu>
* calendar.texi (Calendar Systems): Say that the Persian calendar
implemented here is the arithmetical one championed by Birashk.
2005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
* programs.texi (Fortran Motion): Fix previous change.
@ -21,7 +47,7 @@
(Longlines): New node.
(Auto Fill): Don't index "word wrap" here.
(Filling): Add Longlines to menu.
2005-03-29 Richard M. Stallman <rms@gnu.org>
* xresources.texi: Minor fixes.

View file

@ -165,7 +165,7 @@ longer Info tutorial.)
* Embedded Mode:: Working with formulas embedded in a file.
* Programming:: Calc as a programmable calculator.
* Installation:: Installing Calc as a part of GNU Emacs.
* Customizable Variables:: Customizable Variables.
* Reporting Bugs:: How to report bugs and make suggestions.
* Summary:: Summary of Calc commands and functions.
@ -10613,11 +10613,6 @@ If this happens, the easiest workaround is to type @kbd{M-# L}
loaded right away. This will cause Emacs to take up a lot more
memory than it would otherwise, but it's guaranteed to fix the problem.
If you seem to run into this problem no matter what you do, or if
even the @kbd{M-# L} command crashes, Calc may have been improperly
installed. @xref{Installation}, for details of the installation
process.
@node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands
@subsection Recursion Depth
@ -12306,7 +12301,7 @@ if this file exists, and this file becomes the one that Calc will
use in the future for commands like @kbd{m m}. The default settings
file name is @file{~/.calc.el}. You can see the current file name by
giving a blank response to the @kbd{m F} prompt. See also the
discussion of the @code{calc-settings-file} variable; @pxref{Installation}.
discussion of the @code{calc-settings-file} variable; @pxref{Customizable Variables}.
If the file name you give is your user init file (typically
@file{~/.emacs}), @kbd{m F} will not automatically load the new file. This
@ -29109,7 +29104,7 @@ of the @samp{*Gnuplot Commands*} buffer.
@vindex calc-gnuplot-print-command
@vindex calc-gnuplot-print-device
@vindex calc-gnuplot-print-output
If you are installing Calc you may wish to configure the default and
You may wish to configure the default and
printer devices and output files for the whole system. The relevant
Lisp variables are @code{calc-gnuplot-default-device} and @code{-output},
and @code{calc-gnuplot-print-device} and @code{-output}. The output
@ -29122,7 +29117,8 @@ display or print the output of GNUPLOT, respectively. These may be
@code{nil} if no command is necessary, or strings which can include
@samp{%s} to signify the name of the file to be displayed or printed.
Or, these variables may contain Lisp expressions which are evaluated
to display or print the output.
to display or print the output. These variables are customizable
(@pxref{Customizable Variables}).
@kindex g x
@pindex calc-graph-display
@ -29910,7 +29906,8 @@ Similarly, Calc will use @TeX{} language for @code{tex-mode},
@code{plain-tex-mode} and @code{context-mode}, C language for
@code{c-mode} and @code{c++-mode}, FORTRAN language for
@code{fortran-mode} and @code{f90-mode}, Pascal for @code{pascal-mode},
and eqn for @code{nroff-mode}. These can be overridden with Calc's mode
and eqn for @code{nroff-mode} (@pxref{Customizable Variables}).
These can be overridden with Calc's mode
changing commands (@pxref{Mode Settings in Embedded Mode}). If no
suitable language is available, Calc will continue with its current language.
@ -30612,10 +30609,10 @@ for @code{Save} have no effect.
@noindent
You can modify Embedded mode's behavior by setting various Lisp
variables described here. Use @kbd{M-x set-variable} or
@kbd{M-x edit-options} to adjust a variable on the fly, or
put a suitable @code{setq} statement in your Calc init file (or
@file{~/.emacs}) to set a variable permanently. (Another possibility would
variables described here. These variables are customizable
(@pxref{Customizable Variables}), or you can use @kbd{M-x set-variable}
or @kbd{M-x edit-options} to adjust a variable on the fly.
(Another possibility would
be to use a file-local variable annotation at the end of the
file; @pxref{File Variables, , Local Variables in Files, emacs, the
Emacs manual}.)
@ -30760,7 +30757,7 @@ is simply a newline, @code{"\n"}. If you change this, it is a
good idea still to end with a newline so that mode annotations
will appear on lines by themselves.
@node Programming, Installation, Embedded Mode, Top
@node Programming, Customizable Variables, Embedded Mode, Top
@chapter Programming
@noindent
@ -34610,70 +34607,204 @@ used the first time, your hook should add a variable to the
list and also call @code{make-local-variable} itself.
@end defvar
@node Installation, Reporting Bugs, Programming, Top
@appendix Installation
@node Customizable Variables, Reporting Bugs, Programming, Top
@appendix Customizable Variables
@noindent
As of Calc 2.02g, Calc is integrated with GNU Emacs, and thus requires
no separate installation of its Lisp files and this manual.
GNU Calc is controlled by many variables, most of which can be reset
from within Calc. Some variables are less involved with actual
calculation, and can be set outside of Calc using Emacs's
customization facilities. These variables are listed below.
Typing @kbd{M-x customize-variable RET @var{variable-name} RET}
will bring up a buffer in which the variable's value can be redefined.
Typing @kbd{M-x customize-group RET calc RET} will bring up a buffer which
contains all of Calc's customizable variables. (These variables can
also be reset by putting the appropriate lines in your .emacs file;
@xref{Init File, ,Init File, emacs, The GNU Emacs Manual}.)
@appendixsec The GNUPLOT Program
Some of the customizable variables are regular expressions. A regular
expression is basically a pattern that Calc can search for.
See @ref{Regexp Search,, Regular Expression Search, emacs, The GNU Emacs Manual}
to see how regular expressions work.
@noindent
Calc's graphing commands use the GNUPLOT program. If you have GNUPLOT
but you must type some command other than @file{gnuplot} to get it,
you should add a command to set the Lisp variable @code{calc-gnuplot-name}
to the appropriate file name. You may also need to change the variables
@code{calc-gnuplot-plot-command} and @code{calc-gnuplot-print-command} in
order to get correct displays and hardcopies, respectively, of your
plots.
@table @code
@ifinfo
@example
@item calc-settings-file
@end example
@end ifinfo
@appendixsec Settings File
@noindent
@vindex calc-settings-file
Another variable you might want to set is @code{calc-settings-file},
which holds the file name in which commands like @kbd{m m} and @kbd{Z P}
store ``permanent'' definitions. The default value for this variable
is @code{"~/.calc.el"}. If @code{calc-settings-file} is not your user
init file (typically @file{~/.emacs}) and if the variable
@code{calc-loaded-settings-file} is @code{nil}, then Calc will
automatically load your settings file (if it exists) the first time
Calc is invoked.
The variable @code{calc-settings-file} holds the file name in
which commands like @kbd{m m} and @kbd{Z P} store ``permanent''
definitions.
If @code{calc-settings-file} is not your user init file (typically
@file{~/.emacs}) and if the variable @code{calc-loaded-settings-file} is
@code{nil}, then Calc will automatically load your settings file (if it
exists) the first time Calc is invoked.
@ifinfo
The default value for this variable is @code{"~/.calc.el"}.
@item calc-gnuplot-name
See @ref{Graphics}.@*
The variable @code{calc-gnuplot-name} should be the name of the
GNUPLOT program (a string). If you have GNUPLOT installed on your
system but Calc is unable to find it, you may need to set this
variable. (@pxref{Customizable Variables})
You may also need to set some Lisp variables to show Calc how to run
GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} . The default value
of @code{calc-gnuplot-name} is @code{"gnuplot"}.
@item calc-gnuplot-plot-command
@itemx calc-gnuplot-print-command
See @ref{Devices, ,Graphical Devices}.@*
The variables @code{calc-gnuplot-plot-command} and
@code{calc-gnuplot-print-command} represent system commands to
display and print the output of GNUPLOT, respectively. These may be
@code{nil} if no command is necessary, or strings which can include
@samp{%s} to signify the name of the file to be displayed or printed.
Or, these variables may contain Lisp expressions which are evaluated
to display or print the output.
The default value of @code{calc-gnuplot-plot-command} is @code{nil},
and the default value of @code{calc-gnuplot-print-command} is
@code{"lp %s"}.
@item calc-language-alist
See @ref{Basic Embedded Mode}.@*
The variable @code{calc-language-alist} controls the languages that
Calc will associate with major modes. When Calc embedded mode is
enabled, it will try to use the current major mode to
determine what language should be used. (This can be overridden using
Calc's mode changing commands, @xref{Mode Settings in Embedded Mode}.)
The variable @code{calc-language-alist} consists of a list of pairs of
the form @code{(@var{KEY} . @var{VALUE})}; for example,
@code{(latex-mode . latex)} is one such pair. If Calc embedded is
activated in a buffer whose major mode is @var{KEY}, it will set itself
to use the language @var{VALUE}.
The default value of @code{calc-language-alist} is
@example
((latex-mode . latex)
(tex-mode . tex)
(plain-tex-mode . tex)
(context-mode . tex)
(nroff-mode . eqn)
(pascal-mode . pascal)
(c-mode . c)
(c++-mode . c)
(fortran-mode . fortran)
(f90-mode . fortran))
@end example
@end ifinfo
@appendixsec Testing the Installation
@noindent
To test your installation of Calc, start a new Emacs and type @kbd{M-# c}
to make sure the autoloads and key bindings work. Type @kbd{M-# i}
to make sure Calc can find its Info documentation. Press @kbd{q} to
exit the Info system and @kbd{M-# c} to re-enter the Calculator.
Type @kbd{20 S} to compute the sine of 20 degrees; this will test the
autoloading of the extensions modules. The result should be
0.342020143326. Finally, press @kbd{M-# c} again to make sure the
Calculator can exit.
@item calc-embedded-announce-formula
You may also wish to test the GNUPLOT interface; to plot a sine wave,
type @kbd{' [0 ..@: 360], sin(x) @key{RET} g f}. Type @kbd{g q} when you
are done viewing the plot.
See @ref{Customizing Embedded Mode}.@*
The variable @code{calc-embedded-announce-formula} helps determine
what formulas @kbd{M-# a} will activate in a buffer. It is a
regular expression, and when activating embedded formulas with
@kbd{M-# a}, it will tell Calc that what follows is a formula to be
activated. (Calc also uses other patterns to find formulas, such as
@samp{=>} and @samp{:=}.)
Calc is now ready to use. If you wish to go through the Calc Tutorial,
press @kbd{M-# t} to begin.
@example
The default pattern is @code{"%Embed\n\\(% .*\n\\)*"}, which checks
for @samp{%Embed} followed by any number of lines beginning with
@samp{%} and a space.
@end example
@node Reporting Bugs, Summary, Installation, Top
@item calc-embedded-open-formula
@itemx calc-embedded-close-formula
See @ref{Customizing Embedded Mode}.@*
The variables @code{calc-embedded-open-formula} and
@code{calc-embedded-open-formula} control the region that Calc will
activate as a formula when Embedded mode is entered with @kbd{M-# e}.
They are regular expressions;
Calc normally scans backward and forward in the buffer for the
nearest text matching these regular expressions to be the ``formula
delimiters''.
The simplest delimiters are blank lines. Other delimiters that
Embedded mode understands by default are:
@enumerate
@item
The @TeX{} and La@TeX{} math delimiters @samp{$ $}, @samp{$$ $$},
@samp{\[ \]}, and @samp{\( \)};
@item
Lines beginning with @samp{\begin} and @samp{\end} (except matrix delimiters);
@item
Lines beginning with @samp{@@} (Texinfo delimiters).
@item
Lines beginning with @samp{.EQ} and @samp{.EN} (@dfn{eqn} delimiters);
@item
Lines containing a single @samp{%} or @samp{.\"} symbol and nothing else.
@end enumerate
@item calc-embedded-open-word
@itemx calc-embedded-close-word
See @ref{Customizing Embedded Mode}.@*
The variables @code{calc-embedded-open-word} and
@code{calc-embedded-close-word} control the region that Calc will
activate when Embedded mode is entered with @kbd{M-# w}. They are
regular expressions.
The default values of @code{calc-embedded-open-word} and
@code{calc-embedded-close-word} are @code{"^\\|[^-+0-9.eE]"} and
@code{"$\\|[^-+0-9.eE]"} respectively.
@item calc-embedded-open-plain
@itemx calc-embedded-close-plain
See @ref{Customizing Embedded Mode}.@*
The variables @code{calc-embedded-open-plain} and
@code{calc-embedded-open-plain} are used to delimit ``plain''
formulas. Note that these are actual strings, not regular
expressions, because Calc must be able to write these string into a
buffer as well as to recognize them.
The default string for @code{calc-embedded-open-plain} is
@code{"%%% "}, note the trailing space. The default string for
@code{calc-embedded-close-plain} is @code{" %%%\n"}, without
the trailing newline here, the first line of a Big mode formula
that followed might be shifted over with respect to the other lines.
@item calc-embedded-open-new-formula
@itemx calc-embedded-close-new-formula
See @ref{Customizing Embedded Mode}.@*
The variables @code{calc-embedded-open-new-formula} and
@code{calc-embedded-close-new-formula} are strings which are
inserted before and after a new formula when you type @kbd{M-# f}.
The default value of @code{calc-embedded-open-new-formula} is
@code{"\n\n"}. If this string begins with a newline character and the
@kbd{M-# f} is typed at the beginning of a line, @kbd{M-# f} will skip
this first newline to avoid introducing unnecessary blank lines in the
file. The default value of @code{calc-embedded-close-new-formula} is
also @code{"\n\n"}. The final newline is omitted by @w{@kbd{M-# f}}
if typed at the end of a line. (It follows that if @kbd{M-# f} is
typed on a blank line, both a leading opening newline and a trailing
closing newline are omitted.)
@item calc-embedded-open-mode
@itemx calc-embedded-close-mode
See @ref{Customizing Embedded Mode}.@*
The variables @code{calc-embedded-open-mode} and
@code{calc-embedded-close-mode} are strings which Calc will place before
and after any mode annotations that it inserts. Calc never scans for
these strings; Calc always looks for the annotation itself, so it is not
necessary to add them to user-written annotations.
The default value of @code{calc-embedded-open-mode} is @code{"% "}
and the default value of @code{calc-embedded-close-mode} is
@code{"\n"}.
If you change the value of @code{calc-embedded-close-mode}, it is a good
idea still to end with a newline so that mode annotations will appear on
lines by themselves.
@end table
@node Reporting Bugs, Summary, Customizable Variables, Top
@appendix Reporting Bugs
@noindent

View file

@ -691,6 +691,12 @@ Their calendar consists of twelve months of which the first six have 31
days, the next five have 30 days, and the last has 29 in ordinary years
and 30 in leap years. Leap years occur in a complicated pattern every
four or five years.
The calendar implemented here is the arithmetical Persian calendar
championed by Birashk, based on a 2,820-year cycle. It differs from
the astronomical Persian calendar, which is based on astronomical
events. As of this writing the first future discrepancy is projected
to occur on March 20, 2025. It is currently not clear what the
official calendar of Iran will be that far into the future.
@cindex Chinese calendar
The Chinese calendar is a complicated system of lunar months arranged

View file

@ -1196,8 +1196,9 @@ appear until you deiconify it.
@opindex -hb
@itemx --horizontal-scroll-bars
@opindex --horizontal-scroll-bars
@cindex horizontal scroll bars, command-line argument
Enable horizontal scroll bars.
@c @cindex horizontal scroll bars, command-line argument
Enable horizontal scroll bars. Since horizontal scroll bars
are not yet implemented, this actually does nothing.
@item -vb
@opindex -vb

View file

@ -940,14 +940,8 @@ Auto-Revert Tail mode, @kbd{M-x auto-revert-tail-mode}.
for a changed file. Since checking a remote file is too slow, these
modes do not check or revert remote files.
@vindex auto-revert-check-vc-info
Whenever Auto Revert mode reverts the buffer, it updates the version
control information, such as the version control number displayed in
the mode line. However, this information may not be properly updated
if the version control state changes outside of Emacs---for example,
if a new version is checked in from outside the current Emacs session.
If you set @code{auto-revert-check-vc-info} to @code{t}, Auto Revert
mode will update the version control status information periodically.
@xref{VC Mode Line}, for Auto Revert peculiarities in buffers that
visit files under version control.
@node Auto Save
@section Auto-Saving: Protection Against Disasters
@ -1375,6 +1369,18 @@ locking is not in use). @samp{:} indicates that the file is locked, or
that it is modified. If the file is locked by some other user (for
instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}.
@vindex auto-revert-check-vc-info
When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is
under version control, it updates the version control information in
the mode line. However, Auto Revert mode may not properly update this
information if the version control status changes without changes to
the work file, from outside the current Emacs session. If you set
@code{auto-revert-check-vc-info} to @code{t}, Auto Revert mode updates
the version control status information every
@code{auto-revert-interval} seconds, even if the work file itself is
unchanged. The resulting CPU usage depends on the version control
system, but is usually not excessive.
@node Basic VC Editing
@subsection Basic Editing under Version Control

View file

@ -1,5 +1,6 @@
@c This is part of the Emacs manual.
@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc.
@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000,
@c 2001, 2005 Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node Maintaining, Abbrevs, Building, Top
@chapter Maintaining Programs
@ -8,8 +9,8 @@
@cindex program editing
This chapter describes Emacs features for maintaining programs. The
version control features (@pxref{Version Control}) are also
particularly useful for this purpose.
version control features (@pxref{Version Control}) are also particularly
useful for this purpose.
@menu
* Change Log:: Maintaining a change history for your program.
@ -51,13 +52,13 @@ permitted provided the copyright notice and this notice are preserved.
@noindent
Of course, you should substitute the proper years and copyright holder.
A change log entry starts with a header line that contains the
current date, your name, and your email address (taken from the
variable @code{user-mail-address}). Aside from these header lines,
every line in the change log starts with a space or a tab. The bulk
of the entry consists of @dfn{items}, each of which starts with a line
starting with whitespace and a star. Here are two entries, both dated
in May 1993, each with two items:
A change log entry starts with a header line that contains the current
date, your name, and your email address (taken from the variable
@code{add-log-mailing-address}). Aside from these header lines, every
line in the change log starts with a space or a tab. The bulk of the
entry consists of @dfn{items}, each of which starts with a line starting
with whitespace and a star. Here are two entries, both dated in May
1993, each with two items:
@iftex
@medbreak

View file

@ -1,3 +1,56 @@
2005-04-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* alloc.c (allocate_string_data): Call BLOCK_INPUT before calling
mallopt.
* ralloc.c (r_alloc_init): Ditto.
2005-04-01 Kenichi Handa <handa@m17n.org>
* lisp.h (Vascii_upcase_table, Vascii_canon_table,
Vascii_eqv_table): Extern them.
* casetab.c (set_case_table): If standard is nonzero, setup
Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table.
* search.c (looking_at_1): Use current_buffer->case_canon_table,
not DOWNCASE_TABLE.
(string_match_1): Likewise.
(fast_c_string_match_ignore_case): Use Vascii_canon_table, not
Vascii_downcase_table.
(fast_string_match_ignore_case): Likewise.
(search_buffer): Fix checking of boyer-moore usability.
(boyer_moore): Calculate translate_prev_byte1/2/3 in advance. No
need of tranlating characters in PAT. Fix calculation of
simple_translate.
2005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
* xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap.
(x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it.
Use XtNtopShadowPixel and XtNbottomShadowPixel.
(x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't
really work and that breaks with some versions of Xaw3d.
2005-03-31 Kenichi Handa <handa@m17n.org>
* coding.c (syms_of_coding): Fix previous change.
2005-03-30 Stefan Monnier <monnier@iro.umontreal.ca>
* fileio.c (search_embedded_absfilename): Fix last change.
2005-03-25 Kenichi Handa <handa@m17n.org>
* coding.c (syms_of_coding): Suggest to use set-coding-category in
the docstring of coding-category-list.
2005-03-31 Kim F. Storm <storm@cua.dk>
* keyboard.c (Qmouse_fixup_help_message): New var.
(syms_of_keyboard): Intern and staticpro it.
(show_help_echo): Apply mouse-fixup-help-message to help string.
2005-03-30 Kim F. Storm <storm@cua.dk>
* xdisp.c (display_line): Allow multiple overlay arrows in window.
@ -15,7 +68,7 @@
2005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se>
* w32term.h (x_output): add focus_state.
* w32term.h (x_output): Add focus_state.
* w32term.c (x_focus_changed, w32_detect_focus_change): New functions.
(w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change.

View file

@ -1933,14 +1933,18 @@ allocate_string_data (s, nchars, nbytes)
mmap'ed data typically have an address towards the top of the
address space, which won't fit into an EMACS_INT (at least on
32-bit systems with the current tagging scheme). --fx */
BLOCK_INPUT;
mallopt (M_MMAP_MAX, 0);
UNBLOCK_INPUT;
#endif
b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
#ifdef DOUG_LEA_MALLOC
/* Back to a reasonable maximum of mmap'ed areas. */
BLOCK_INPUT;
mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
UNBLOCK_INPUT;
#endif
b->next_free = &b->first_data;

View file

@ -161,7 +161,12 @@ set_case_table (table, standard)
XCHAR_TABLE (canon)->extras[2] = eqv;
if (standard)
Vascii_downcase_table = table;
{
Vascii_downcase_table = table;
Vascii_upcase_table = up;
Vascii_canon_table = canon;
Vascii_eqv_table = eqv;
}
else
{
current_buffer->downcase_table = table;

View file

@ -9357,7 +9357,7 @@ associated with each coding-category one by one in this order. When
one algorithm agrees with a byte sequence of source text, the coding
system bound to the corresponding coding-category is selected.
Don't modify this variable directly, but use `set-coding-category'. */);
Don't modify this variable directly, but use `set-coding-priority'. */);
{
int i;

View file

@ -523,6 +523,10 @@ Lisp_Object Qmake_frame_visible;
Lisp_Object Qselect_window;
Lisp_Object Qhelp_echo;
#ifdef HAVE_MOUSE
Lisp_Object Qmouse_fixup_help_message;
#endif
/* Symbols to denote kinds of events. */
Lisp_Object Qfunction_key;
Lisp_Object Qmouse_click;
@ -2304,6 +2308,11 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
return;
}
#ifdef HAVE_MOUSE
if (!noninteractive && STRINGP (help))
help = call1 (Qmouse_fixup_help_message, help);
#endif
if (STRINGP (help) || NILP (help))
{
if (!NILP (Vshow_help_function))
@ -10873,6 +10882,11 @@ syms_of_keyboard ()
Qmenu_bar = intern ("menu-bar");
staticpro (&Qmenu_bar);
#ifdef HAVE_MOUSE
Qmouse_fixup_help_message = intern ("mouse-fixup-help-message");
staticpro (&Qmouse_fixup_help_message);
#endif
Qabove_handle = intern ("above-handle");
staticpro (&Qabove_handle);
Qhandle = intern ("handle");

View file

@ -1879,7 +1879,8 @@ extern Lisp_Object case_temp2;
NATNUMP (case_temp2)) \
? XFASTINT (case_temp2) : case_temp1)
extern Lisp_Object Vascii_downcase_table;
extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table;
extern Lisp_Object Vascii_canon_table, Vascii_eqv_table;
/* Number of bytes of structure consed since last GC. */

View file

@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */
#include <config.h>
#include "lisp.h" /* Needed for VALBITS. */
#include "blockinput.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@ -1255,7 +1256,9 @@ r_alloc_init ()
#endif
#ifdef DOUG_LEA_MALLOC
mallopt (M_TOP_PAD, 64 * 4096);
BLOCK_INPUT;
mallopt (M_TOP_PAD, 64 * 4096);
UNBLOCK_INPUT;
#else
#ifndef SYSTEM_MALLOC
/* Give GNU malloc's morecore some hysteresis

View file

@ -259,7 +259,7 @@ looking_at_1 (string, posix)
CHECK_STRING (string);
bufp = compile_pattern (string, &search_regs,
(!NILP (current_buffer->case_fold_search)
? DOWNCASE_TABLE : Qnil),
? current_buffer->case_canon_table : Qnil),
posix,
!NILP (current_buffer->enable_multibyte_characters));
@ -365,7 +365,7 @@ string_match_1 (regexp, string, start, posix)
bufp = compile_pattern (regexp, &search_regs,
(!NILP (current_buffer->case_fold_search)
? DOWNCASE_TABLE : Qnil),
? current_buffer->case_canon_table : Qnil),
posix,
STRING_MULTIBYTE (string));
immediate_quit = 1;
@ -465,7 +465,7 @@ fast_c_string_match_ignore_case (regexp, string)
regexp = string_make_unibyte (regexp);
re_match_object = Qt;
bufp = compile_pattern (regexp, 0,
Vascii_downcase_table, 0,
Vascii_canon_table, 0,
0);
immediate_quit = 1;
val = re_search (bufp, string, len, 0, len, 0);
@ -482,7 +482,7 @@ fast_string_match_ignore_case (regexp, string)
int val;
struct re_pattern_buffer *bufp;
bufp = compile_pattern (regexp, 0, Vascii_downcase_table,
bufp = compile_pattern (regexp, 0, Vascii_canon_table,
0, STRING_MULTIBYTE (string));
immediate_quit = 1;
re_match_object = string;
@ -1253,6 +1253,7 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
if (RE && *base_pat == '\\')
{
len--;
raw_pattern_size--;
base_pat++;
}
c = *base_pat++;
@ -1487,16 +1488,18 @@ simple_search (n, pat, len, len_byte, trt, pos, pos_byte, lim, lim_byte)
return n;
}
/* Do Boyer-Moore search N times for the string PAT,
/* Do Boyer-Moore search N times for the string BASE_PAT,
whose length is LEN/LEN_BYTE,
from buffer position POS/POS_BYTE until LIM/LIM_BYTE.
DIRECTION says which direction we search in.
TRT and INVERSE_TRT are translation tables.
Characters in PAT are already translated by TRT.
This kind of search works if all the characters in PAT that have
nontrivial translation are the same aside from the last byte. This
makes it possible to translate just the last byte of a character,
and do so after just a simple test of the context.
This kind of search works if all the characters in BASE_PAT that
have nontrivial translation are the same aside from the last byte.
This makes it possible to translate just the last byte of a
character, and do so after just a simple test of the context.
CHARSET_BASE is nonzero iff there is such a non-ASCII character.
If that criterion is not satisfied, do not call this function. */
@ -1523,8 +1526,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
unsigned char simple_translate[0400];
int translate_prev_byte = 0;
int translate_anteprev_byte = 0;
/* These are set to the preceding bytes of a byte to be translated
if charset_base is nonzero. As the maximum byte length of a
multibyte character is 4, we have to check at most three previous
bytes. */
int translate_prev_byte1 = 0;
int translate_prev_byte2 = 0;
int translate_prev_byte3 = 0;
#ifdef C_ALLOCA
int BM_tab_space[0400];
@ -1590,6 +1598,23 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
for (i = 0; i < 0400; i++)
simple_translate[i] = i;
if (charset_base)
{
/* Setup translate_prev_byte1/2/3 from CHARSET_BASE. Only a
byte following them are the target of translation. */
int sample_char = charset_base | 0x20;
unsigned char str[MAX_MULTIBYTE_LENGTH];
int len = CHAR_STRING (sample_char, str);
translate_prev_byte1 = str[len - 2];
if (len > 2)
{
translate_prev_byte2 = str[len - 3];
if (len > 3)
translate_prev_byte3 = str[len - 4];
}
}
i = 0;
while (i != infinity)
{
@ -1777,9 +1802,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
|| ((cursor == tail_end_ptr
|| CHAR_HEAD_P (cursor[1]))
&& (CHAR_HEAD_P (cursor[0])
|| (translate_prev_byte == cursor[-1]
&& (CHAR_HEAD_P (translate_prev_byte)
|| translate_anteprev_byte == cursor[-2])))))
/* Check if this is the last byte of
a translable character. */
|| (translate_prev_byte1 == cursor[-1]
&& (CHAR_HEAD_P (translate_prev_byte1)
|| (translate_prev_byte2 == cursor[-2]
&& (CHAR_HEAD_P (translate_prev_byte2)
|| (translate_prev_byte3 == cursor[-3]))))))))
ch = simple_translate[*cursor];
else
ch = *cursor;
@ -1857,9 +1886,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
|| ((ptr == tail_end_ptr
|| CHAR_HEAD_P (ptr[1]))
&& (CHAR_HEAD_P (ptr[0])
|| (translate_prev_byte == ptr[-1]
&& (CHAR_HEAD_P (translate_prev_byte)
|| translate_anteprev_byte == ptr[-2])))))
/* Check if this is the last byte of a
translable character. */
|| (translate_prev_byte1 == ptr[-1]
&& (CHAR_HEAD_P (translate_prev_byte1)
|| (translate_prev_byte2 == ptr[-2]
&& (CHAR_HEAD_P (translate_prev_byte2)
|| translate_prev_byte3 == ptr[-3])))))))
ch = simple_translate[*ptr];
else
ch = *ptr;

View file

@ -131,9 +131,7 @@ extern void _XEditResCheckMessages ();
#ifdef HAVE_XAW3D
#include <X11/Xaw3d/Simple.h>
#include <X11/Xaw3d/Scrollbar.h>
#define ARROW_SCROLLBAR
#define XAW_ARROW_SCROLLBARS
#include <X11/Xaw3d/ScrollbarP.h>
#include <X11/Xaw3d/ThreeD.h>
#else /* !HAVE_XAW3D */
#include <X11/Xaw/Simple.h>
#include <X11/Xaw/Scrollbar.h>
@ -4553,6 +4551,7 @@ x_create_toolkit_scroll_bar (f, bar)
f->output_data.x->scroll_bar_bottom_shadow_pixel = pixel;
}
#ifdef XtNbeNiceToColormap
/* Tell the toolkit about them. */
if (f->output_data.x->scroll_bar_top_shadow_pixel == -1
|| f->output_data.x->scroll_bar_bottom_shadow_pixel == -1)
@ -4576,16 +4575,17 @@ x_create_toolkit_scroll_bar (f, bar)
pixel = f->output_data.x->scroll_bar_top_shadow_pixel;
if (pixel != -1)
{
XtSetArg (av[ac], "topShadowPixel", pixel);
XtSetArg (av[ac], XtNtopShadowPixel, pixel);
++ac;
}
pixel = f->output_data.x->scroll_bar_bottom_shadow_pixel;
if (pixel != -1)
{
XtSetArg (av[ac], "bottomShadowPixel", pixel);
XtSetArg (av[ac], XtNbottomShadowPixel, pixel);
++ac;
}
}
#endif
widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
f->output_data.x->edit_widget, av, ac);
@ -4731,30 +4731,11 @@ x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
XawScrollbarSetThumb (widget, top, shown);
else
{
#ifdef HAVE_XAW3D
ScrollbarWidget sb = (ScrollbarWidget) widget;
int scroll_mode = 0;
/* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */
if (xaw3d_arrow_scroll)
{
/* Xaw3d stupidly ignores resize requests while dragging
so we have to make it believe it's not in dragging mode. */
scroll_mode = sb->scrollbar.scroll_mode;
if (scroll_mode == 2)
sb->scrollbar.scroll_mode = 0;
}
#endif
/* Try to make the scrolling a tad smoother. */
if (!xaw3d_pick_top)
shown = min (shown, old_shown);
XawScrollbarSetThumb (widget, top, shown);
#ifdef HAVE_XAW3D
if (xaw3d_arrow_scroll && scroll_mode == 2)
sb->scrollbar.scroll_mode = scroll_mode;
#endif
}
}
}