Въведение в Емакс
Table of Contents
1 Въведение
Emacs е операционна система дегизирана като текстов редактор (или обратното). Последващото е писмо, което имах навика да пращам на хора, осмелили се да проявят интерес към това чудо.
2 За какво основно го ползвам
- Текстов редактор (изненада) с огромни възможности за манипулация и изследване на текст. Много по-бързо и интуитивно могат да се извършват повтарящи се нетривиални операции, за които единствена друга алтернатива би била да се драсне програмка.
- Среда за куп езици за програмиране - въобще, относно различни, редки, популярни, нови, стари - най-вероятно някой вече е написал "мод" за него. За голям брой малко популярни езици Emacs е единственото…нещо, което дава повече от оцветяване на ключови думи. За лисп-подобни езици си е стандарт (с разширението Paredit1 манипулирането на S-изрази2 става толкова здраво (въобще и не става дума за броене на скоби), че влаченето по без-структурния текст на други езици си е жива мъка).
- Графичен интерфейс към GDB. Става почти като Visual Studio, хехе.
- Интеграция с доста GNU инструменти, особено удобен за ползване с grep и make компилиране, проверка на правопис, системи за контрол на версиите (няма значение дали става дума за git, svn, darcs, mercurial… Emacs предоставя унифициран интерфейс към основните им функционалности).
- Удобен набор от diff функционалности3.
- Терминал (няколко :D).
- Електронна поща и nntp новини, четец на feed-ове…
- В комбинация с w3m4 - много удобен текстов браузър (липсва javascript и flash, което си е feature).
- В комбинация с mpd, mplayer или vlc - систематизатор на колекции от музика и филми.
- Много удобен и функционален навигатор за файловата система.
- Това може да спада и към 2., но е отличен редактор за LaTeX5, през който се драскат pdf документи и дори презентации. Вече има поддръжка за разглеждане на pdf-и.
- Ползвам разширения за онлайн речници, разни логически игрички (освен вградените) и понякога психоаналитик :D Шегувам се, но си има реализация на Eliza6.
- Интерфейс към mldonkey7.
- Четец на man pages и info наръчници.
- Организатор в обикновен текст "на батерии" с таблици, формули, експорт към html, pdf, odf… и много повече8.
- Това е малко специфично, но с разширение има удобен интерфейс за търсене и разглеждане състоянието и описанието на Gentoo9 (и portage производни) пакети и флагове.
- Унифициран достъп до мрежови протоколи (ftp, ssh…) и файлови системи (включително su/sudo)10.
- В комбинация с biltbee11 - универсален чат-клиент (google talk, icq…skype, хаха) минаващ през Emacs IRC клиент12.
3 Още?
Има разширения за видео обработка13, споделено ползване14, аудио-управляем десктоп за хора с увредено зрение15 и какво ли още не. Всичко това (и много повече) под шапката на един от най-могъщите манипулатори на текстови структури. Отгоре на всичко Emacs върви в почти пълен блясък на всякакво "железо" - GNU/Linux, BSD-та, Winblows, Solaris, Plan 9… опасна работа!
4 Вътрешностите отвън
Отличително явление е, че Emacs16 в ядрото си е (Emacs) Lisp интерпретатор, до който има почти неограничен достъп и възможност за разглеждане, промяна в движение. Зад всяко натискане на бутон или друга активност стои Elisp функция, чиято документация и код могат да бъдат разгледани и променяни в текущия момент и това да се отрази веднага. Естествено могат да се добавят нови функции, променливи, макрота, hook-ове към съществуващи функции, клавишни комбинации и т.н.
Elisp17 е пълнокръвен Lisp, макар и малко застарял (в момента се работи над интеграция с Guile18, което би дало възможност да се пишат разширения и на Scheme, JavaScript, Lua или каквото още дойде). Специализиран е за текстообработка и има опасения, че е най-доброто, с което човечеството разполага19. Повечето платформи осигуряват някакъв половинчат начин/език за писане на разширения, което ги прави трудно използваеми и видимо по-лоши от вградените функционалности. В контраст с това, огромната (и нарастваща) част от Emacs е реализирана на Elisp. Крайният резултат е, че любопитен потребител практически разполага със същите инструменти, каквито имат и разработчиците на Emacs (това е в ДНК-то на Lisp).
Emacswiki20 е място, където може да се намери всевъзможна информация, трикове, разширения и прочие.
5 Първи стъпки
Може би е добре при пръв контакт да се направи клавишната комбинация
C-h t (C-h е нотация за <ctrl>+h, последвано от натискане на t) която запознава с примитивни начини на ползване. Стандартно инсталиран, Emacs има достъп до собствената си документация с
C-h i (това стартира info браузъра на Emacs)
m Emacs RET (натиска се m, изписва се Emacs и се натиска <enter>)
Документацията може да бъде разглеждана с
C-h i
m Elisp RET
Няколко полезни комбинации за разглеждане на информация:
C-h m (описание на текущия "мод", което е набор от клавишни комбинации, специфично оцветяване и функционалност и въобще състояние на текущия буфер)
C-h b (описание на всички активни в този момент клавишни комбинации)
C-h k (последвано от клавишна комбинация, описва интерактивната функция-команда, стояща зад тази комбинация)
C-h f (последвано от име на функция, описва функцията и дава връзка към кода и)
C-h v (последвано от име на променлива, описва променливата)
В допълнение, с
M-x (приета нотация за <alt>+x)
последвано от име на команда (с подсказки) и <enter> изпълнява командата.
M-x ielm RET
примерно стартира Elisp REPL21.
Когато сме в Elisp буфер (обикновено и scratch върши работа)
C-x C-e (това може да се изпълни по-лесно като се задържи <ctrl> и последователно се натиснат x и e)
изпълнено след последната затваряща скоба на S-израз, го изпълнява. Това може да е предефиниране или създаване на нова функция/променлива или просто някакъв блок от Elisp код. Това е основния начин за мигновени промени.
При стартиране Emacs изпълнява ~/.emacs.d/init.el или ~/.emacs файл, в който потребителят е свободен да зарежда допълнителни разширения, променя настройки, дефинира функции/макрота/променливи/клавишни комбинации и въобще изпълнява какъвто и да е Elisp код. Интернет е пълен с dot-emacs-овете на много народ и това често е удобен начин начинаещ да си открадне по някоя друга настройка за собствено ползване. Моят текущ .emacs се намира засега на https://github.com/m00natic/dot-emacs
6 Сега накъде?
Това е, има много материал за разглеждане. Както има лаф, "сигурен тест дали нещо съществува е дали има порно с него"… е същото важи и за Emacs Lisp разширенията22.
Последният да затвори скобата :)