Emacs

Emacs (Емакс, Емакс, також Імакс) - сімейство багатофункціональних розширюваних текстових редакторів.


1. Варіанти Emacs

На сьогоднішній день найбільш поширеними є варіанти GNU Emacs та XEmacs. Обидва є вільним ПЗ, поширюваним на умовах GNU GPL. XEmacs є відгалуженням або Форк GNU Emacs. В 1991 деякі з розробників останнього вирішили "відколотися", щоб працювати над власним (XEmacs) варіантом редактора. Розкол був викликаний їх незгодою з думкою Річард Столлман - в той час головного куратора проекту - про подальший напрямок розвитку Emacs.

XEmacs відрізняється більшою спрямованістю на зовнішній вигляд, наближений до стандартних сучасним редакторам (використання панелей інструментів і т. п.). Крім того, XEmacs підтримує шрифти з нефіксованим шириною символу, зображення, впроваджувані в текст і т. п. Втім, останні версії GNU Emacs також включають більшість цих можливостей, тому різниця не така помітна. Крім того, багато Emacs-пакети працюють в обох варіантах редактора і є загальними.


2. Термінологія

Оскільки Emacs з'явився давно і спочатку працював тільки на текстових терміналах, його термінологія не зовсім співпадає з такою сучасних віконних систем. Основні специфічні терміни Emacs:

  • Буфер - об'єкт, що представляє небудь текст. Більшість буферів відповідають відкритим файлам, але в принципі буфер може містити що завгодно, наприклад результати компіляції програми або вбудовані підказки. Emacs в цьому плані дуже однорідний і практично всі спілкування з користувачем, у тому числі інтерактивне, йде через буфери.
  • Фрейм відповідає вікну в звичайному розумінні цього слова. Кожен фрейм містить область виводу і одне або декілька вікон Emacs.
  • Вікно - це просто прямокутна область фрейма, яка відображає один з буферів. Крім цього, кожне вікно має свій рядок стану ( англ. mode line ), Де виводиться назва буфера, його основний режим і т. п.
  • Область виводу (echo area) - одна або кілька (по необхідності) рядків внизу фрейма, в якій Emacs виводить різні повідомлення, а також запитує підтвердження і додаткову інформацію від користувача.
  • Мінібуфер використовується для введення додаткової інформації. Він завжди відображається в області виведення. Це такий же буфер, як і всі інші, що дає цікавий ефект: наприклад, при операції заміни тексту, можна ввести багаторядковий текст, що неможливо в більшості інших редакторів.

3. Основні особливості

Основу ідеології Emacs складають принципи "все в одному", розширюваності, настроюваності під користувача і документованості.

3.1. "Все в одному"

Функціональність Emacs можна розділити на три рівні: базова, основний режим і додаткові режими. Поєднання цих трьох рівнів дозволяє виконувати величезну кількість завдань (у тому числі і не пов'язаних безпосередньо з редагуванням тексту), не виходячи з редактора.

Базова функціональність включає в себе основні операції роботи з текстом, як присутні в будь-якому редакторі, так і унікальні для Emacs. Сюди входять вставка і видалення тексту, переміщення по тексту, відкриття і збереження файлів і т. п. Унікальним для Emacs є безліч цих операцій і доступність практично всіх з них з клавіатури. Так, наприклад, за текстом можна переміщатися посимвольно, за словами, рядками, сторінкам, пропозиціям, абзаців, збалансованим списками (тобто за виразами, укладеним в дужки), функціям ...

Основний режим Emacs визначається типом редагованого файлу. Існують режими для різних мов програмування, мов розмітки тексту ( HTML, TeX і т. п.), для перегляду директорій, для читання і відправлення електронної пошти та багато інших. Основний режим визначає спосіб підсвічування синтаксису, спосіб вирівнювання коду для мов програмування, спеціальні команди для виконання часто використовуваних операцій та ін Основний режим може також перевизначати базові елементи тексту. Так, при редагуванні програм на C і подібних мовах, пропозицією вважається одна команда програми. При цьому в коментарях пропозиція має звичайний текстовий зміст.

Додаткові режими зазвичай забезпечують функціональність, не залежну або слабо залежить від формату редагованого файлу. На відміну від основного режиму, який для будь-якого буфера один, кількість активних додаткових режимів не обмежена. Наприклад, існують режими для підсвічування поточного рядка, постійного виведення імені поточної функції для текстів програм, підсвічування відповідних один одному дужок і багато інших.


3.2. Розширюваність

Emacs написаний двома мовами: C і Elisp (діалект Ліспу, від Emacs Lisp). При цьому сам редактор є інтерпретатором Elisp. По суті справи, більша частина Emacs написана на мові Elisp і її можна розглядати як розширення до основної програми.

Користувачі можуть самі створювати частини Emacs, від окремих функцій до нових основних режимів. При цьому можна перевизначати будь Elisp-функції, в тому числі і ті, що є частиною самого редактора. Так що можна легко модифікувати функціональність Emacs, просто відповідним чином "підправив" деякі функції.

Крім великої кількості розширень, орієнтованих на написання тексту або розробку програм, існують пакети для Emacs, що виконують функції повноцінних додатків для читання пошти і новин (наприклад, Gnus), організації особистого часу і обліку інформації, створення і прослуховування музики, спілкування через Jabber або IRC. Кількість створених для Emacs додатків таке, що можна з успіхом виконувати безліч завдань не виходячи з Emacs.

Крім цього, Emacs дозволяє перевизначати практично будь-які клавіші, як глобально, так і для кожного основного режиму в окремо. Тому легко можна призначити часто використовуване дію на вільне поєднання клавіш (або на зайняте, попередньо його звільнивши).


3.3. Настроюваність

Emacs написаний з урахуванням того, що різні користувачі мають різні уподобання. Різні параметри редагування можна змінювати, використовуючи Elisp-змінні. Крім того, для зручності, а також для тих, хто не знає Elisp, передбачений режим настройки, де значення параметрів можна вводити в спеціальні поля або вибирати зі списків. Emacs дозволяє встановлювати різні значення змінних-параметрів для різних буферів. Значення змінних можна також зберігати у файлах, так що можна без додаткових зусиль редагувати C-файли з базовим відступом в 2 пробілу або в 4 - це значення можна просто зберегти у файлі.

Як вже зазначалося вище, можна настроювати Emacs під свої потреби, використовуючи функції, написані на мові Elisp, в тому числі і перевизначаючи вже існуючі. Нарешті, Emacs надає дуже могутню можливість виконувати довільний набір функцій при настанні деяких умов. Такі функції додаються в так звані "пастки" ( англ. hook - Пастка, пастка, гачок). За допомогою "пасток" можна "відловлювати" (перехоплювати) певні події (наприклад, включення того чи іншого режиму). Є навіть такий потужний засіб, як можливість виконання функцій після кожної зміни буфера.


3.4. Документованість

Emacs володіє докладною документацією, включаючи і документацію по Elisp. Але особливістю Emacs є те, що кожна функція або змінна може бути забезпечена документацією при своєму визначенні. Таку документацію можна переглянути просто вказавши ім'я функції або змінною.

4. Цікаві факти

  • Emacs має режим "психотерапевта", доступний, зокрема, через пункт меню "Help → Emacs Psychotherapist" ( Mx doctor).
  • "Високий" номер версій Emacs (21, 22) пов'язаний не тільки з високою інтенсивністю розробки редактора і його поважним віком. Спочатку версії нумерувалися як 1.15, але потім було прийнято рішення відмовитися від провідної одиниці.
  • Слово "Emacs" бере початок в абревіатурі "Editor MACroS", наборі макросів для редактора TECO, написаному Столлманом та іншими в 1976. Однак існує безліч інших, почасти жартівливих розшифровок цього слова:
    • Editing MACroS
    • Eight Megabytes And Continuous Swapping [3]
    • Escape Meta Alt Control Shift
    • Eventually Malloc () s All Computer Storage
    • Emacs Makes Any Computer Slow
    • Editor for Middle-Aged Computer Scientists
    • Engine Monitoring And Control System

Примітки

  1. Emacs Timeline - www.jwz.org / doc / emacs-timeline.html
  2. Emacs 24.1 release - lists.gnu.org/archive/html/info-gnu-emacs/2012-06/msg00000.html
  3. EMACS - www.catb.org / jargon / html / E / EMACS.html