ErgoEmacs - a way to Lisp

Якщо ви отримуєте задоволення від програмування, то, напевно, перманентно перебуваєте в стані пошуку кращих інструментів, кращих ідей, кращих рішень. І знаєте, кінцевою зупинкою особисто для мене став 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, значенням якої повинен бути адресу однойменної папки, створеної заздалегідь в корені системного розділу диска:

  • Зайдіть у властивості папки HOME у вкладку безпеки і дайте собі (як користувачу, а не як адміністратору) всі права на дії з папкою, а також зробіть себе (як користувача, а не як адміністратора) власником цієї папки:


  • Встановлюйте ErgoEmacs
  • Не запускайте. Виконайте все теж саме (права, власник) з папкою, в яку встановили редактор
  • Створіть у папці HOME файл ".emacs"
  • Запускаєте редактор, вибирає тему оформлення, вибираєте дефолтний шрифт, зберігаєте налаштування (все можна зробити через меню)
На цьому базова настройка емакса, в принципі, закінчена. Можете починати експериментувати і творити. Вкрай рекомендую почитати туторіал на сайті проекту, вивчити основні комбінації клавіш для переміщення курсору, наприклад, затисніть Alt;, а потім утримуйте J, K, L, I). В збірці, за замовчуванням, замість комбінації клавіш «M-x» передбачена комбінація клавіш «M-a (де М це Alt). Подивіться хоча б перші три (основи) лекціїподкасту Дмитра Бушенко. Також можете ознайомитися з творінням того ж Дмитра Бушенко у співавторстві з А. Оттом «Programming for Emacs 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)


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.