[Из песочницы] ErgoEmacs — a way to Lisp

f95f617077854ffca191d7dc13ed1644.pngЕсли вы получаете удовольствие от программирования, то, наверняка, перманентно находитесь в состоянии поиска лучших инструментов, лучших идей, лучших решений. И знаете, конечной остановкой лично для меня стал Emacs. А точнее — его сборка под названием ErgoEmacs. Под катом будет попытка логического и последовательного рассказа об использовании данного текстового редактора в контексте знакомства с ним впервые в жизни (не вдаваясь в сильную конкретику, а скорее стараясь уловить общую идею); идеологическая пропаганда (емакса вообще и лиспа в частности); небольшая критика последней из статей на Хабре по данной тематике, а также небольшое философское заключение. Если вы хотите расширить свой кругозор, прошу под кат.ПредисловиеДанную статью я решил написать после прочтения этой потому, что если бы я не использовал Emacs, то ничего бы не понял (из статьи, на которую приведена ссылка), а если бы использовал, то понял бы, что если бы не использовал, то ничего бы не понял. Статься написана бессистемно, используя простую компиляцию (фактологического материала, ссылок на ресурсы и собственного .emacs [файла настроек]), что явно не поспособствует привлечению в наши ряды новых адептов. Попробуем исправить ситуацию.1. Предварительные сведения Итак, изначально предполагается, что вы: Пользователь Windows (я опишу некоторые подводные камни при установке Emacs именно на этой ОС). Если вы используете Linux или Mac, то, к сожалению, разбираться с возникающими сложностями при работе с редактором (если они конечно будут) вам придется самим. Свободно владеете слепым десятипальцевым методом набора текста. При невыполнении данного условия, целесообразность перехода на Emacs и его использование стремится к нулю. Любите программировать. Если программирование просто ваша работа и вы не стремитесь получить от нее удовлетворение или удовольствие, то вам нужно переосмыслить жизнь Emacs ни к чему Знаете (любите) Lisp. Это скорее пожелание, нежели требование, но, как мне кажется, любовь к Лиспу (или хотя бы его знание, или же стремление его изучить), в некотором роде, является определяющим фактором при выборе этого редактора. Хотя, это сугубо мое личное мнение и оно не является догмой (в отличии от предыдущих двух пунктов) 2. Почему Emacs? Вопрос настолько же риторический для любого емаксера, насколько и бессмысленный для любого человека, который впервые откроет этот редактор. Формальный ответ следующий — при работе с Emacs вы получаете возможность: Управлять курсором (в рабочем поле редактора) с клавиатуры (не отрывая рук и не меняя положения 8 пальцев из 10) Относительно легко (в сравнение с любыми IDE) автоматизировать, перепрограммировать, настраивать и создавать что угодно (новые пункты меню, «биндинг» клавиш, функции, макросы, автокомлит, расширения и т.д. и т.п.) Вообще говоря, это все из действительно объективных показателей полезности (кроссплатформенность, нетребовательность к аппаратным ресурсам и прочее я в расчет не беру, так как от этого мало толку, учитывая некоторую сложность при изучении программы). Но, с моей точки зрения, и исходя из моего опыта пользования редактором, двух описанных пунктов вполне достаточно, чтобы начать получать максимальное удовольствие и удобство в процессе работы (даже пусть и после некоторого потраченного времени на освоение возможностей Emacs).Дополнительные бонусы появляются, если вы программируете на Common Lisp. Устанавливая Emacs, SBCL, Slime и quicklisp вы, по сути, получаете «нативную» среду разработки. Для Emacs написано огромное количество дополнений разной степени полезности и качества, но в общем и целом для Web-разработки этого хватает с головой. Существует также прекрасный менеджер пакетов и менеджер библиотек, которые существенно облегчат вам жизнь. Есть множество прекрасных тем оформления для комфортной работы.

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

3. Подводные камни при установке ErgoEmacs на Windows Создайте перед установкой редактора системную переменную HOME, значением которой должен являться адрес одноименной папки, созданной заранее в корне системного раздела диска: 15b2da6b463242ffb867f2f822c08e2f.png

Зайдите в свойства папки HOME во вкладку безопасности и дайте себе (как пользователю, а не как администратору) все права на действия с папкой, а также сделайте себя (как пользователя, а не как администратора) владельцем этой папки: 2007cfda88b54a698dfb142e25000fcd.png

Устанавливайте ErgoEmacs Не запускайте. Проделайте все тоже самое (права, владелец) с папкой, в которую установили редактор Создайте в папке HOME файл ».emacs» Запускаете редактор, выбирает тему оформления, выбираете дефолтный шрифт, сохраняете настройки (все можно сделать через меню) На этом базовая настройка емакса, в принципе, закончена. Можете начинать экспериментировать и творить. Крайне рекомендую почитать туториал на сайте проекта, выучить основные комбинации клавиш (для перемещения курсора, к примеру, зажмите Alt и нажимайте J, K, L, I). В сборке, по умолчанию, вместо комбинации клавиш «M-x» предусмотрена комбинация клавиш «M-a» (где М это Alt). Посмотрите хотя бы первые три (самые основы) лекции подкаста Дмитрия Бушенко. Также можете ознакомится с творением того же Дмитрия Бушенко в соавторстве с А. Оттом «Programming Emacs for Editting and Refactoring Code», в котором дается база программирования emacs lisp. Надумаете создать из Emacs среду разработки для Common Lisp — следующее видео в помощь. Купите эргономичную клавиатуру. И будет вам счастье.4. ErgoEmacs — a way to Lisp Собственно статья эта не об ErgoEmacs (хотя большая ее часть было именно о нем). Она о Лиспе (точнее о современном диалекте этого языка — Common Lisp). Потому как, на мой взгляд, заставить человека использовать даже ErgoEmacs (не говоря уже о базовой версии этого редактора), крайне тяжело без веской на то причины. И главной причиной был и всегда будет Lisp. Если ты любишь Lisp — ты программируешь в Emacs. И это утверждение не нуждается в доказательстве.В конечном итоге, последней инстанцией, определяющей выбор той или иной идеи (языка, концепции, теории, веры) является понятие «красоты». Нет более страшного оскорбления для физика, к примеру, чем сказать ему о том, что его теория не красива. Рефлексивность нашего мышления и не возможность абсолютного обоснования чего бы то не было (в основе любого метода лежит некоторая аксиоматическая часть, которая принимается «на веру» [бездоказательно]) «вынуждают нас видеть красоту» в симметрии и/или в самоподобии (к примеру). Лисп в этом плане, на мой взгляд, самый красивый и выразительный язык. Он отражает способ и принцип нашего мышления (что, собственно, и не удивительно, ведь создавался этот язык для исследования искусственного интеллекта).Да, Лисп потерпел рыночный крах и как язык системного программирования, и как прикладного, а Lisp-машины стали экспонатами музеев. Но вина ли в этом Лиспа? Я думаю, что нет. Не буду углубляться в историю компании Symbolics, Inc., самого крупного игрока на рынке lisp-машин, системного и прикладного программного обеспечения, написанного на Лиспе, но одним из ключевых инженеров этой компании был некто иной как Ричард Столмэн — бог современных линуксоидов и основатель Free Software Foundaion. Столмэн по идейным соображениям ненавидел идею коммерческого ПО и воровал код из Symbolics, копируя его в бесплатный продукт MIT. Когда же это вскрылось, он послал e-mail в компанию и угрожал взорвать динамитом. И смешно, и грустно. Это одна из более-менее конкретных причин краха Лиспа. Но она далеко не ключевая, на мой взгляд.

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

Тем не менее, это не умаляет мощности, красоты и выразительности языка, а так же его гомоморфности человеческому интеллекту.

P.S. Если кому-то интересен мой .emacs, то вот он…emacs (add-to-list 'load-path »~/.emacs.d/»)(add-to-list 'load-path «C:/slime»)(add-to-list 'load-path «C:/sbcl/sbcl.exe»)(add-to-list 'custom-theme-load-path »~/.emacs.d/themes»)(load (expand-file-name »~/quicklisp/slime-helper.el»));; Replace «sbcl» with the path to your implementation (setq inferior-lisp-program «C:/sbcl/sbcl.exe»)

(setq show-paren-style 'expression)(show-paren-mode 2)

(menu-bar-mode 1)(tool-bar-mode -1)

(setq make-backup-files nil); Don’t want any backup files (setq auto-save-list-file-name nil); Don’t want any .saves files (setq auto-save-default nil); Don’t want any auto saving

(set-language-environment 'UTF-8)(setq default-buffer-file-coding-system 'utf-8-unix)

(require 'slime)

(setq slime-net-coding-system 'utf-8-unix)

(slime-setup '(slime-fancy))

(setq lisp-indent-function 'common-lisp-indent-function)

;; built-in (require 'ido)(ido-mode t)(setq ido-enable-flex-matching t)

;; built-in (require 'bs)(setq bs-configurations'((«files» »^\\*scratch\\*» nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)))

(global-set-key (kbd ») 'bs-show)

(require 'sr-speedbar)(global-set-key (kbd ») 'sr-speedbar-toggle)

(when (>= emacs-major-version 24)(require 'package)(package-initialize)(add-to-list 'package-archives '(«melpa». «melpa.milkbox.net/packages/») t))

(global-set-key (kbd ») 'other-window)(global-set-key (kbd ») 'slime-eval-defun)(global-set-key (kbd ») 'slime-eval-last-expression)(global-set-key (kbd ») 'slime-compile-file)

(custom-set-variables; custom-set-variables was added by Custom.;; If you edit it by hand, you could mess it up, so be careful.;; Your init file should contain only one such instance.;; If there is more than one, they won’t work right.'(cua-mode t nil (cua-base))'(custom-enabled-themes (quote (deeper-blue)))'(show-paren-mode t)'(tool-bar-mode nil))(custom-set-faces; custom-set-faces was added by Custom.;; If you edit it by hand, you could mess it up, so be careful.;; Your init file should contain only one such instance.;; If there is more than one, they won’t work right.'(default ((t (: family «Consolas» : foundry «outline» : slant normal: weight bold: height 158: width normal))))'(completions-common-part ((t (: inherit default: foreground «red»))))'(diredp-compressed-file-suffix ((t (: foreground »#7b68ee»))))'(diredp-ignored-file-name ((t (: foreground »#aaaaaa»))))'(show-paren-match ((((class color) (background light)) (: background «azure2»)))))

(setq TeX-auto-save t)(setq TeX-parse-self t)(setq TeX-save-query nil)(setq TeX-PDF-mode t)

© Habrahabr.ru