[Top] [Contents] [Index] [ ? ]

Программирование на Emacs Lisp

Это главное меню, где вначале идет краткое содержание; затем полное, где перечислены все подразделы книги.

Предисловие переводчиков  
Предисловие  
1. Обработка списков  
2. Практика вычислений  
3. Написание функций  
4. Что такое буфер  
5. Первые трудности  
6. Сужение и расширение  Ограничения своего и Emacs внимания к
                                          определенной области.                
7. car, cdr, cons: основные функции  Основные функции в Лиспе.
8. Вырезание и сохранение текста  
9. Как реализованы списки  
10. Вставка текста обратно  
11. Циклы и рекурсия  
12. Поиск с использованием регулярных выражений  
13. Подсчеты: Повторения и Регулярные выражения  
14. Считаем слова в defun  Считаем кол-во слов в функции.
15. Изготовляем график  
16. Ваш файл `.emacs'  
17. Отладка  Использование отладчиков для Emacs Lisp.
18. Заключение  Как изучать Emacs Lisp дальше?
A. Функция the-the  Поиск удвоенных слов.
B. Обработка списка удалений  Реализация списка удалений (kill ring)
C. График с координатными осями  
Index  
Об Авторе  

 -- The Detailed Node Listing ---

Предисловие

Как читать этот текст  
Для кого это написано  
Происхождение Emacs Lisp  Немного истории.
Замечание для новичков  
Благодарности  

Обработка списков

1.1 Списки в Лисп  
1.2 Запуск Программы  
1.3 Получаем сообщение об ошибке  
1.4 Имена символов и определения функций  
1.5 Интерпретатор Лиспа  
1.6 Вычисление  
1.7 Переменные  
1.8 Аргументы  
1.9 Присваиваем переменной значение  
1.10 Резюме  
1.11 Упражнения  

Списки в Лисп

1.1.1 Атомы Лиспа  
1.1.2 Пробелы в списках  
1.1.3 GNU Emacs помогает вам программировать  

Интерпретатор Лиспа

1.5.1 Байт-компиляция  

Вычисление

1.6.1 Вычисление внутренних списков  

Переменные

1.7.1 Сообщение об ошибке для пустого символа  

Аргументы

1.8.1 Типы Данных аргументов  
1.8.2 Аргумент как значение переменной или списка  
                                или списка.
1.8.3 Аргументов может быть много  
                                число аргументов.
1.8.4 А если аргумент неправильного типа  
1.8.5 Функция message  Очень полезная функция.

Присваиваем переменной значение

1.9.1 Используя set  Присваиваем значение..
1.9.2 Используя setq  Тоже самое, но удобнее.
1.9.3 Счетчик  Считаем с помощью setq.

Практика вычислений

Как вычислить  
                              C-x C-e вы заставляете интерпретатор
                              работать.
2.1 Имя буфера  
2.2 Как вернуть буфер  
2.3 Смена буфера  
2.4 Размер буфера и местоположение точки  
                              буфера.
2.5 Упражнения  

Написание функций

Немного о примитивных функциях  
3.1 Особая форма defun  
3.2 Установка определения функции  
3.3 Делаем функцию интерактивной  
3.4 Различные опции для interactive  
3.5 Устанавливаем код надолго  
3.6 let  Создание и инициализация локальных переменных.
3.7 Особая форма if  Что есть if?
3.8 Выражения if--then--else  
3.9 Истина и ложь в Lisp  Что в Лиспе считается истиной?.
3.10 save-excursion  Как запомнить точку, метку и текущий буфер.
3.11 Обзор  
3.12 Упражнения  

Установка определения функции

3.2.1 Изменяем определение функции  

Делаем функцию интерактивной

3.3.1 Интерактивная умножить-на-семь.  Интерактивная версия.

let

3.6.1 Части выражения let  
3.6.2 Пример выражения let  
3.6.3 Неинициализированные переменные в операторе let  

Особая форма if

3.7.1 Подробное рассмотрение функции type-of-animal  Пример выражения if.

save-excursion

3.10.1 Шаблон для выражения save-excursion  

Что такое буфер

4.1 Поиск дополнительной информации  
4.2 Упрощенное определение beginning-of-buffer  Объяснение goto-char,
                                    point-min, и push-mark.
4.3 Определение mark-whole-buffer  Почти тоже самое как и
                                    beginning-of-buffer.
4.4 Определение append-to-buffer  Использует save-excursion
                                    insert-buffer-substring.
4.5 Обзор  
4.6 Упражнения  

Определение mark-whole-buffer

4.3.1 Тело mark-whole-buffer  Только три строчки.

Определение append-to-buffer

4.4.1 Интерактивное выражение в append-to-buffer  Две части выражения interactive.
4.4.2 Тело append-to-buffer  
4.4.3 save-excursion в append-to-buffer  Как работает the save-excursion.

Первые трудности

5.1 Определение copy-to-buffer  С set-buffer, get-buffer-create.
5.2 Определение insert-buffer  Только-чтение, и функция or.
5.3 Полное определение beginning-of-buffer  Использование goto-char,
                                point-min, и push-mark.
5.4 Обзор  
5.5 Упражнения с &optional аргументом  

Определение insert-buffer

5.2.1 Интерактивное выражение в insert-buffer  Когда буфер только-для-чтения.
5.2.2 Тело функции insert-buffer  
5.2.3 insert-buffer с if вместо or  Используем if вместо or.
5.2.4 or в теле функции  
5.2.5 Выражение let в insert-buffer  Два выражения save-excursion.

Интерактивное выражение в insert-buffer

Буфер только-для-чтения  
`b' в интерактивном выражении  

Полное определение beginning-of-buffer

5.3.1 Необязательные аргументы  
5.3.2 beginning-of-buffer с аргументом  Пример с необязательным аргументом.
5.3.3 Полный текст beginning-of-buffer  

beginning-of-buffer с аргументом

Что происходит в больших буферах  
Что происходит в маленьких буферах  

Сужение и расширение

Преимущества сужения  
6.1 Особая форма save-restriction  
6.2 what-line  Номер строки на которой находиться курсор.
6.3 Упражнения на сужение  

carcdrcons: основные функции

Необычные имена  
7.1 car и cdr  Функции для извлечения частей списка.
7.2 cons  Создание списка.
7.3 nthcdr  Повторный вызов cdr.
7.4 setcar  Изменяем первый элемент списка.
7.5 setcdr  Изменяем остаток списка.
7.6 Упражнения  

cons

7.2.1 Найти длину списка: length  Как найти длину списка.

Вырезание и сохранение текста

Сохранение текста в списке  
8.1 zap-to-char  Как вырезать текст до символа.
8.2 kill-region  
8.3 delete-region: Погружение в язык Си  Погружение в Си.
8.4 Инициализация переменной с defvar  Как переменной присвоить первоначальное
                                значение.
8.5 copy-region-as-kill  Определение для копирования текста.
8.6 Обзор  
8.7 Упражнения с поиском  

zap-to-char

8.1.1 Выражение interactive  
8.1.2 Тело zap-to-char  Краткий обзор.
8.1.3 Функция search-forward  Как найти строку.
8.1.4 Функция progn  
8.1.5 Резюме zap-to-char  Используем point, search-forward.
8.1.6 Реализация для 18 Версии Emacs  Реализация для 18 версии.

Реализация для 18 Версии Emacs

Тело выражения progn  

copy-region-as-kill

8.5.1 Тело copy-region-as-kill  

Тело  copy-region-as-kill

Функция kill-append  
Else-часть copy-region-as-kill  

Как реализованы списки

9.1 Упражнения  

Вставка текста обратно

10.1 Обзор списка уничтожений  
10.2 Переменная kill-ring-yank-pointer  
10.3 Упражнения с yank и nthcdr  

Циклы и рекурсия

11.1 while  Заставляем код повторяться.
11.2 Рекурсия  
11.3 Упражнения с циклами  

while

11.1.1 Цикл while и список  
11.1.2 Пример: print-elements-of-list  Uses while, car, cdr.
11.1.3 Цикл с увеличивающимся счетчиком  
11.1.4 Цикл с уменьшающимся счетчиком  

Цикл с увеличивающимся счетчиком

Пример с увеличивающимся счетчиком  
Части определения функции  
Составляем определение функции  

Цикл с уменьшающимся счетчиком

Пример с уменьшением счетчика  
Части определения функции   
Составляем определение функции   

Рекурсия

11.2.1 Рекурсия на списке  
11.2.2 Рекурсия на месте счетчика  Меняем цикл while на рекурсию.
11.2.3 Пример рекурсии с использованием cond  Пример рекурсии с другим условием.

Рекурсия на месте счетчика

Аргумент 3  

Поиск с использованием регулярных выражений

12.1 Регулярное выражение для sentence-end  
12.2 Функция re-search-forward  Похожа на search-forward.
12.3 forward-sentence  Простой пример поиска regexp.
12.4 forward-paragraph: сокровищница функций  Давайте усложним задачу.
12.5 Создание своего собственного файла `TAGS'  
12.6 Заключение  
12.7 Упражнения с re-search-forward  

forward-sentence

Циклы while  
Поиск по регулярному выражению  

forward-paragraph: сокровищница функций

Выражение let*  
Цикл while движения вперед  
Между параграфами  
Внутри параграфа  
Без префикса заполнения  
С префиксом заполнения  
Итог  forward-paragraph полностью.

Подсчеты: Повторения и Регулярные выражения

Считаем слова  
13.1 Функция count-words-region  Используем regexp, но появляется проблема.
13.2 Рекурсивный подсчет слов  
13.3 Упражнения: Сколько знаков пунктуации  

Функция count-words-region 

13.1.1 Ошибка в count-words-region  

Считаем слова в defun

Разделяй и властвуй  
14.1 Что считать?  
14.2 Что входит в состав слов или символов?  
14.3 Функция count-words-in-defun  Очень похожа на count-words.
14.4 Обработка нескольких функций в одном файле  
14.5 Открытие файла  
14.6 Подробности о lengths-list-file  Список длин многих функций.
14.7 Считаем слова в функциях из нескольких файлов  
14.8 Рекурсивная обработка нескольких файлов  
14.9 Подготовка данных для вывода в виде графика  

Считаем слова в функциях из нескольких файлов

14.7.1 Функция append  Добавление одного списка к другому.

Подготовка данных для вывода в виде графика

14.9.1 Сортировка списков  
14.9.2 Создание списка файлов  

Изготовляем график

Отображение колонок графика  
15.1 Функция graph-body-print  How to print the body of a graph.
15.2 Функция recursive-graph-body-print  
15.3 Need for Printed Axes  
15.4 Упражнения  

Ваш файл `.emacs'

Настройка Emacs по умолчанию  
16.1 Общесистемные файлы инициализации  
16.2 Установка переменных для одной сессии  
16.3 Начало файла `.emacs'  
16.4 Режимы Text и Auto Fill  
16.5 Почтовые алиасы  
16.6 Режим отступа по табуляции (Indent Tabs)  
16.7 Некоторые привязки клавиш  
16.8 Загрузка файлов  
16.9 Автозагрузка  
16.10 Простое расширение: line-to-top-of-window  Создаем функции; связываем ее с клавишей.
16.11 Таблицы ключей  
16.12 Цвета X11  Цвета в версии 19 для системы X Window.
16.13 Разное для версии 19  Автоматически изменяем размер минибуфера...
16.14 Измененная строка режима  

Отладка

17.1 debug  Использование встроенного отладчика.
17.2 debug-on-entry  Запуск отладчика при вызове функции.
17.3 debug-on-quit и (debug)  Запуск отладчика при аварийном выходе C-g.
17.4 Отладчик на уровне исходного кода edebug  Использование Edebug, более сложного отладчика.
17.5 Упражнения по отладке  

Обработка списка удалений

B.1 Функция rotate-yank-pointer  Перемещает указатель по списку.
B.2 yank  
B.3 yank-pop  

Функция rotate-yank-pointer

B.1.1 Тело функции rotate-yank-pointer  

Тело функции rotate-yank-pointer

else-часть выражения if  
Функция вычисления остатка %  
Использование % в rotate-yank-pointer  
Указатель на последний элемент  

yank

Передача аргумента  Передаем аргумент в rotate-yank-pointer.
Передаем отрицательный аргумент  

График с координатными осями

Пример графика с координатными осями  
C.1 Список переменных print-graph  
C.2 Функция print-Y-axis  Градуируем вертикальную ось.
C.3 Функция print-X-axis  Печатаем горизонтальную ось.
C.4 Печать полного графика  

Функция print-Y-axis 

C.2.1 Обходной путь: Вычисление остатка  
C.2.2 Создание элементов оси Y  
C.2.3 Создание колонки оси Y  
C.2.4 Окончательная версия print-Y-axis  Печать веритикальной оси.

Функция print-X-axis 

C.3.1 Маркеры оси X  Создаем метки для горизонтальной оси.

Печать полного графика

C.4.1 Проверка функции print-graph  Быстрая проверка.
C.4.2 График количества слов в функциях  
C.4.3 Окончательная печать графика  

График количества слов в функциях

Выражение lambda  Создание безымянной функции.
Функция mapcar  Запуск функции для каждого элемента списка.
Последняя ошибка ... самая коварная  Последняя ошибка обычно самая коварная.



This document was generated on March, 10 2004 using texi2html