Руководство по функциям Emacs Lisp?

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

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

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

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


person vava    schedule 18.02.2009    source источник
comment
Проблема с документацией, подобной Javadoc, заключается в том, что нет модульной системы, которая могла бы придать ей какую-либо иерархию.   -  person Chris Conway    schedule 18.02.2009
comment
Да, но это можно разделить логически. Дело в том, что я могу просмотреть довольно большое количество имен функций, чтобы понять, что возможно. И мне нужен этот список. Хотя все функции были бы слишком большими, чтобы их можно было победить, поэтому я бы хотел только самое полезное.   -  person vava    schedule 18.02.2009
comment
Справочное руководство имеет указатель; это недостаточно хорошо для вас?   -  person huaiyuan    schedule 18.02.2009
comment
@huaiyuan: Спасибо, это очень полезно   -  person vava    schedule 19.02.2009


Ответы (12)


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

В частности, обратите внимание на эти ссылки на этой странице: Базовые функции редактирования текста, Идиомы Emacs Lisp и Пакетная обработка текста

person luapyad    schedule 18.02.2009
comment
Это были самые полезные ссылки, которые я здесь видел. Хотя фон на тех страницах меня просто убивает. - person vava; 18.02.2009
comment
Кса Ли - талантливый программист, но у него есть довольно странные представления о том, что правильно, а что нет. Небольшое предупреждение ... - person Joe Casadonte; 18.02.2009
comment
Да, я бы не стал воспринимать все, что он говорит, всерьез. Однако его статья о проститутках, с которыми он спал, довольно хороша. - person jrockway; 18.02.2009
comment
Я нашел страницы Кса полезными примерно в течение первых 6 месяцев моего программирования на elisp, затем я понял, что его безумие подавляет начальную информацию. В группах новостей он постоянно уговаривает людей обновить за него вики, переписать Emacs, изменить терминологию в соответствии с его собственными глубокими исследованиями и т. Д. - person Michael Paulukonis; 18.02.2009

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

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

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 таким способом, но для поиска документации по функциям это хороший старт. Когда вы находите руководство по сборке непонятным (что иногда случается), то пора вам погуглить функцию;)

person polyglot    schedule 18.02.2009
comment
Я не знаю, что искать в первую очередь, так что это не решение - person vava; 18.02.2009
comment
Я упустил из виду, что вам нужен список функций. Но на самом деле способ начать - это начать читать код Lisp и посмотреть, с чем вы сталкиваетесь чаще всего. Очевидно, что многие шепелявые можно понять, если у вас есть опыт работы с другими языками; все, что вам нужно, это найти не требующие пояснений функции. - person polyglot; 18.02.2009
comment
Попробуйте несколько раз; вы обнаружите, что имена функций в большинстве случаев на удивление легко угадать, даже больше, чем то, что сразу видно из справочного руководства. Между прочим, его информационная версия также имеет отличный указатель концепций. - person tripleee; 05.09.2011

Введение в emacs lisp GNU, безусловно, более доступно, чем справочное руководство .

person Greg Ball    schedule 18.02.2009
comment
Согласованный. OP должен принять это и прочитать это. А потом ссылка. - person jrockway; 18.02.2009
comment
Совершенно не отвечает на вопрос - почему нет руководства типа указателя, а не сугубо тематического? - person Michael Paulukonis; 18.02.2009

Я бы добавил пару вещей:

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

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

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

  • Ознакомьтесь с вики-страницей Emacs, в которой есть уйма модулей Emacs lisp, которые вы можете просмотреть.

person Joe Casadonte    schedule 18.02.2009

Я думаю, вы ошибаетесь. Изучая язык программирования и набор библиотек (в совокупности «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* и т. Д. Все здесь, и они очень полезный.)

person jrockway    schedule 18.02.2009
comment
Хотя я согласен с таким подходом, у меня просто нет на это времени. Я хочу иметь возможность писать небольшие функции, которые помогут мне в повседневной работе, а не стать экспертом в программировании на Common Lisp. - person vava; 19.02.2009
comment
Кажется, у вас достаточно времени, чтобы тратить время на просмотр этого сайта. Отрежьте час от этого дня и вместо этого прочтите руководство по Lisp. Тогда у вас будут знания, необходимые для решения любой проблемы в Emacs Lisp, что, вероятно, сэкономит вам много времени на долгие годы. - person jrockway; 19.02.2009
comment
Нет, я не провожу здесь больше 10 минут в день. А еще есть гораздо более важные вещи, чем чтение огромного скучного руководства без картинок :) - person vava; 20.02.2009
comment
Картинок нет. Это то, что я ненавижу в man-страницах, на них нет изображений. Только некоторые диаграммы ascii и никаких таблиц. - person Yoo; 10.08.2009
comment
M-x elisp-index-search, C-h F, C-h V, C-h K. Они также полезны вместе со знаменитыми C-h v и C-h f. - person Yoo; 10.08.2009
comment
+1 хотя я не согласен с повсеместностью и целесообразностью cl - если все, что вам нужно, это Элисп, оставайтесь с Элиспом. - person tripleee; 05.09.2011

Хорошие предложения от других - справочная система Emacs - ваш друг. Кроме того:

person Drew    schedule 05.09.2011

Чтобы понять, что происходит, довольно часто бывает полезно взглянуть на исходный код.

http://repo.or.cz/w/elbb.git/blob/HEAD:/code/Go-to-Emacs-Lisp-Definition.el

person Andreas Röhler    schedule 16.08.2012

Вы пробовали <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, Emacs имеет интегрированный инструмент документации!

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

M-x find-library RET ‹имя библиотеки› - это все, что вам действительно нужно

person ahearhaer    schedule 16.12.2016

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

Изучение GNU Emacs
(источник: oreilly. ru)

person Alan    schedule 18.02.2009
comment
Мне больше нравится книга Боба Гликштейна, она посвящена исключительно Elisp. amazon.com/gp/aw/d/B0043M56SW/ref= redir_mdp_mobile / - person tripleee; 05.09.2011
comment
Ссылка в ответе не работает, поэтому рекомендации не видны. Обновите и добавьте описание в виде обычного текста. - person Andrew Swann; 03.01.2017

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

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

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

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

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

Вы можете использовать страницы ИНФОРМАЦИИ (в меню), чтобы просматривать их в более тематическом порядке и получать ту же информацию об использовании.

person skm    schedule 31.05.2012

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

grep -r DEFUN *

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

person std    schedule 17.05.2016