2009-02-18 2 views
15

Я использую Emacs уже более трех лет, но мне все еще нужны месяцы, чтобы писать небольшие функции в Lisp. Я просмотрел GNU Emacs Lisp Reference Manual, но он огромный и структурирован полностью напротив JavaDoc, а не от функций до описаний, но наоборот.Руководство по функциям Emacs Lisp?

Что сделает мою жизнь намного проще - это какой-то небольшой документ, похожий на JavaDoc, с наиболее часто используемыми внутренними функциями Emacs и их быстрое описание.

 
    (point) - returns current position in buffer 
    (save-excursion (p)) - saves current position in buffer before 
          executing (p) and restores it afterward. 

Кто-нибудь знает, где я могу найти что-то в этом роде?

+2

Проблемы с Javadoc как документация нет модуля системы, чтобы дать ему какую-либо иерархии. –

+0

Да, но его можно условно разделить. Дело в том, что я могу просмотреть довольно большое количество имен функций, чтобы найти то, что возможно. И я хочу, чтобы этот список. Хотя все функции были бы слишком большими, чтобы побеждать, так что я бы хотел только очень полезно. – vava

+2

Справочное руководство имеет [индекс] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Index.html); разве это не достаточно для вас? – huaiyuan

ответ

12

У этого сайта есть своя информация об emacs lisp, которая может быть полезна: http://xahlee.org/emacs/elisp.html.

В частности, проверить эти ссылки на этой странице: Basic Text-editing Functions, Emacs Lisp Idioms и Batch Text Processing

+2

Это были самые полезные ссылки, которые я видел здесь. Хотя фон на этих страницах просто убивает меня. – vava

+4

Xah Lee - талантливый программист, но у него есть довольно странные представления о том, что есть и не является «правильным». Просто небольшое предупреждение ... –

+5

Да, я бы не стал воспринимать все, что он сказал серьезно. Его статья о проститутках, с которыми он спал, очень хороша. – jrockway

11

ГНУ Introduction to emacs lisp, безусловно, более доступным, чем в справочном руководстве.

+0

Согласовано. OP должен сосать его и прочитать это. А потом ссылка. – jrockway

+3

Не отвечает на вопрос вообще - почему нет руководства, такого как индекс, а не чисто актуального? –

1

Если вы готовы раскошелиться на деньги за мертвого дерева, я бы рекомендовал

Learning GNU Emacs http://oreilly.com/catalog/covers/0596006489_cat.gif

+2

Мне больше нравится книга Боба Гликштейна, она ориентирована исключительно на Элис. http://www.amazon.com/gp/aw/d/B0043M56SW/ref=redir_mdp_mobile/186-0564429-8448460 – tripleee

+0

Ссылка в ответе не работает, поэтому не видно, что такое рекомендация. Обновите и добавьте простое текстовое описание. –

13

Вы пробовали строить в руководстве в Emacs? Откройте любой буфер lisp (или любой буфер в режиме lisp), переместите свою точку на любую функцию или переменную и нажмите C-h f (для функции) или C-h v (для переменной). Emacs даст вам довольно краткое описание функции/переменной.

Например, ручное содержание для (копи-экскурсии) является

save-excursion is a special form in `C source code'. 
(save-excursion &rest BODY) 

Save point, mark, and current buffer; execute BODY; restore those things. 
Executes BODY just like `progn'. 
The values of point, mark and the current buffer are restored 
even in case of abnormal exit (throw or error). 
The state of activation of the mark is also restored. 

This construct does not save `deactivate-mark', and therefore 
functions that change the buffer will still cause deactivation 
of the mark at the end of the command. To prevent that, bind 
`deactivate-mark' with `let'. 

Хорошая вещь также является встроенный в руководстве даст вам «ссылку» в исходный код функции и к другим функции, которые могут быть связаны, что облегчает просмотр.

Конечно, вы не можете научиться lisp таким образом, но для поиска документации по функциям это хороший стартер. Когда вы найдете встроенные инструкции не понятного (что иногда случается), то это время для вас, чтобы Google функцию;)

+0

Я не знаю, что искать в первую очередь, так что это не решение. – vava

+0

Я упустил из виду, что вам нужен _list_ функций. Но на самом деле, начать работу - начать читать код lisp и посмотреть, с чем вы чаще всего сталкиваетесь. Множество lisp, по-видимому, понятно, если у вас есть опыт других языков; все, что вам нужно, - это искать непонятные функции. – polyglot

+0

Попробуйте его несколько раз; вы обнаружите, что имена функций на удивление легко угадать в большинстве случаев, более того, чем то, что сразу видно из справочного руководства. У версии Info также есть отличный концептуальный указатель, кстати. – tripleee

9

Я хотел бы добавить несколько вещей:

  • M-x apropos - поиск функции и переменные для любой строки, указанной вами (например, каталог). Обратите внимание, что это немного отличается от C-h a, который находит только интерактивные функции

  • Найдите аналогичный код и скопируйте его - вы можете много узнать о том, как это сделать, взглянув на то, что уже сделано. Если у вас есть определенная функция, которую вы хотите увидеть в примерах, один хороший способ - посетить основной исходный каталог lisp в dired (например, d:/product/emacs/lisp или/usr/share/lib/emacs/lisp) и сделать % g, который будет grep через все файлы, которые ищут любую строку, которую вы вводите. Откройте этот файл и посмотрите, что с ним сделали другие люди.

  • C-h f и C-h v - как упоминалось выше, вы можете открыть источник, указать точку над функцией или переменной, а затем получить на ней документацию.

  • Просмотрите номер Emacs wiki, в котором содержится информация о модулях Emacs lisp для ознакомления.

8

Я думаю, вы принимаете неправильный подход. Изучая язык программирования и набор библиотек (совместно, «Emacs Lisp»), вам необходимо подойти к нему как по микро, так и по макромасштабированию. Прежде чем вы сможете начать писать программное обеспечение, вам необходимо знать, какие у вас есть инструменты . Это то, что руководство Emacs Lisp имеет целью обучить вас . Вам действительно нужно сесть и прочитать все это. То, что вы знаете, какие функции предоставляет Emacs, это .

После этого вам потребуется информация об «микроуровне». Есть ряд источников, которые предоставляют это. Если у вас есть общее представление о , что вам нужно сделать («работа с буферами»), тогда ссылка Lisp - хорошее место, чтобы выяснить, что вам нужно знать. Если вы знаете, что есть функция, которая делает то, что вы хотите, но не совсем помните имя , тогда M-x apropos (C-u C-h a) поможет вам найти документацию . Если вы знаете, какую функцию вы хотите использовать, но не помните, как это работает, тогда M-x describe-function (C-h f) будет сортировать это для вас.

Так или иначе, ключ должен изучить Emacs Lisp, а затем позволить Emacs помочь вам с подробностями. Список функций не собирается вас многому научить.

(О, еще одна вещь - вы должны ознакомиться с Common Lisp библиотеки Большинство Emacs использовать cl, которые являются полезными CL функции, реализованные в Emacs Lisp loop, destructuring-bind, defun*, и так далее.. все там, и они очень полезны.)

+2

Хотя я согласен с этим подходом, у меня просто нет времени на это. Я хочу, чтобы иметь возможность писать небольшие функции, чтобы помочь мне с моей повседневной работой, а не стать экспертом в программировании Common Lisp. – vava

+1

У вас, похоже, много времени, чтобы тратить время на просмотр этого сайта. Отрежьте час в тот же день и прочитайте руководство Lisp. Тогда у вас будет знания, необходимые для решения любых проблем в Emacs Lisp, которые , вероятно, сэкономят много вашего времени на протяжении многих лет. – jrockway

+1

Нет, я не трачу больше 10 минут в день здесь. И тогда есть гораздо больше важных вещей, чем чтение огромного скучного руководства без фотографий :) – vava

1

Пробовали ли вы <f1> f? Он связан с describe-function. Пример с point:

point is a built-in function in C source code. 
(point) 

Return value of point, as an integer. 
Beginning of buffer is position (point-min). 

[back] 

Как и большинство Lisp Systeme, Emacs имеет встроенный инструмент документации!

  • Любая функция или переменная Lisp может объявлять необязательную строку документа.
  • Почти вся стандартная команда или функция объявляют полезную строку doc.
  • Emacs (как и большинство систем Lisp) позволяет вам отображать строку документа любой функции или переменной (<f1> f и <f1> v) в любое время.
  • При отображении строка документа доступна для просмотра, что означает, что вы можете щелкнуть по символам, чтобы увидеть их строку документа, или перейти к источнику соответствующей функции или переменной.
  • Как только вы оцениваете какие-либо или defvar, его колонка док-кода доступна через describe-function или describe-variable: этот документ жив!
0

В XEmacs, и я верю в Emacs, а также, нажав Ch п, то вкладка ключ для завершения табуляции, который в этот момент равен все функции, даст вам список функций, о которых знает редактор.

Вы просто используете клавиши курсора и прокрутите список до одного, о котором хотите узнать, и нажмите «Ввод», чтобы просмотреть детали.

Если список функций, имеющих дополнительную информацию, является тем, что вы хотите, что даст вам это.

Этот список всех доступных в настоящее время функций, поэтому, если у вас установлены пакеты lisp, он показывает функции, предоставляемые этими пакетами, а также собственные функции. В моей копии XEmacs сегодня у меня есть 6 586 функций в списке. Emacs будет похож.

Проблема заключается в том, что не все функции имеют имена, которые делают их контекстно-значимой (т.е. не все переменное меню/функции имеют меню слов в них, так что вы будете пропускать некоторые вещи, если вы идете по именам только.

Вы можете использовать страницы INFO (в меню), чтобы просмотреть их более локально, и получить одну и ту же информацию об использовании.

0

Загрузить исходный код для Emacs. Перейти к Src/папку и введите:

Grep -r DEFUN *

Вы получите список всех примитивных Лисп функций Emacs.

0

M-х найти библиотеку RET < имени библиотеки > все, что вам действительно нужно