[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. Заключение  
A. Функция the-the  Приложение: поиск удвоенных слов.
B. Обработка списка удалений  
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  Выражения If--then--else.
3.9 Истина и ложь в Lisp  Что в Лиспе считается истиной?.
3.10 save-excursion  Как запомнить точку, метку и текущий буфер.
3.11 Обзор  
3.12 Упражнения  

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

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

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

3.3.1 Интерактивная multiply-by-seven.  Интерактивная версия.

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  Only three lines of code.

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

4.4.1 Интерактивное выражение в append-to-buffer  Две части выражения interactive.
4.4.2 Тело append-to-buffer  Включает выражение let.
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  В теле есть or и let.
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 полностью.

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

Считаем слова  В Emacs нет команды для подсчета слов.
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  
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  
C.2.1 Обходной путь: Вычисление остатка  Остаток, функция %.
Использование % в rotate-yank-pointer  
Указатель на последний элемент  

yank

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

A Graph with Labelled Axes

Пример графика с пометками  How a finished graph should look.
C.2 The print-Y-axis Function  Print a label for the vertical axis.
C.3 The print-X-axis Function  Print a horizontal label.
C.4 Printing the Whole Graph  The function to print a complete graph.

The print-Y-axis Function

C.2.3 Создание колонки оси Y  Generate a list of Y axis labels.

The print-X-axis Function

C.3.1 X Axis Tic Marks  Create tic marks for the horizontal axis.

Printing the Whole Graph

C.4.1 Testing print-graph  Run a short test.
C.4.2 Graphing Numbers of Words and Symbols  Executing the final code.
C.4.3 The Printed Graph  The graph itself!

Graphing Numbers of Words and Symbols

A lambda Expression  How to write an anonymous function.
The mapcar Function  Apply a function to elements of a list.
Another Bug ... Most Insidious  Yet another ... of a most insidious type.



This document was generated on December, 4 2003 using texi2html