TIL on Emacs

Добрых 20 лет я пользуюсь текстовым редактором Emacs. Все это время остаюсь не более чем power userом. Желания залезть в его внутренности и переделать под себя никогда не возникало. На мой взгляд это одно из важнейших качеств инженера, но я же не настоящий инженер.

Мой init.el выглядит как сборная солянка сниппетов из интернета. Периодически я навожу там уборку, но через месяц директория конфигов разбухает еще сильнее.

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

В этот раз мне на глаза попалась http://alexott.net/ru/emacs/elisp-intro/elisp-intro-ru.html . В отличие от других диалектов LISP у ELisp есть одно главное преимущество - это язык на котором написан Emacs, а значит все знания можно использовать на практике прямо не выходя из редактора. Вопросы о мотивации отпали сами собой.

Так вот, это все было предисловие чтоб набрать классов и объема текста

На самом деле я всего лишь хотел резюмировать для себя первое важное знание которое я получил: команды set и setq делают одно и тоже - присваивают значение переменной. Разница в следущем:

(set 'symbol 'value)

(setq symbol 'value
another-symbol 'another-value)

Другими словами set может присвоить значение только одной переменной и ее имя нужно выделить апострофом ', а setq может присвоить много значений куче переменных за раз и тратить энергию на апостроф не нужно - setq это сам умеет делать.

Благодаря этому простому знанию я избавился от разбросанных по разным местам определениям переменных и расположил их в одном месте.
(setq-default это как setq, но для всех буферов)