понедельник, 27 апреля 2015 г.

Emacs как IDE для Rust


rust_logo.png Многие слышали про такой язык программирования как Rust, это чрезвычайно, на мой взгляд, перспективный и интересный язык от Mozilla, про него сейчас часто пишут и говорят. Он пока еще очень молод (в данный момент доступна только beta версия), в связи с чем поддержки в модных и популярных IDE для него нет или она очень слабая, а попробовать и составить мнение о языке хочется. Как обычно, в таких случаях на помощь нам приходит emacs, в нем относительно легко можно настроить подсветку синтаксиса, компиляцию, автодополнение и т.п.

среда, 22 апреля 2015 г.

Emacs backspace like sublime

В sublime есть одна вещь, которой мне очень не хватало в emacs, при выравнивании текста пробелами, клавиша <backspace> удаляла не один пробел, а сразу столько, сколько входило в один "tab". Это легче показать:
backspace.gif


Emacs из коробки так к сожалению не умеет, но как всегда исправить это совсем не сложно…

суббота, 18 апреля 2015 г.

Docker vs virtual machine

Я уже относительно давно приобщился к миру контейнерной виртуализации, в частности к докеру. До этого я довольно активно пользовался виртуальными машинами, хотя впрочем и сейчас продолжаю. И для меня вполне очевидно, что контейнеры в лице Docker, уже сейчас по очень многим параметрам превзошли своего предшественника и в скором времени вытеснят его совсем. Попробую объяснить свою позицию.

понедельник, 13 апреля 2015 г.

Умное назначение горячих клавиш в Emacs

Рано или поздно пользователям Emacs приходится переназначать горячие клавиши. Даже те, кто по идеологическим причинам используют дефолтные сочетания, приходят к тому, что нужно назначить на часто-употребляемую команду более простое сочетание клавиш или повесить hotkey на свой собственный скрипт. В интернетах советуют делать это как-то так:
(global-set-key (kdb "C-a") 'mark-whole-buffer)
Это какое-то время работает, пока не находится плагин, который переопределяет выбранное сочетание на что-то свое...

пятница, 10 апреля 2015 г.

Удаление в Emacs без копирования в буфер обмена

В Emacs есть такие замечательные функции, как удалить слово после курсора (kill-word), перед курсором (backward-kill-word), а так же удалить все символы от курсора до конца строки (kill-line). Однако у них есть одна особенность, они не просто удаляют символы, а еще копируют их в буфер обмена (так называемый kill ring). Лично меня подобное поведение не устраивает, поэтому я написал свои аналоги этих функций.

среда, 8 апреля 2015 г.

Авто установка пакетов в Emacs

Все наверное знают про возможность установки плагинов в Emacs, "M-x package-list-packages" и вперед - выбираем, устанавливаем, удаляем что не нужно. Это возможно удобно, когда мы экспериментируем с плагинами, играемся с новыми. Но допустим синхронизировать подобным образом плагины на всех своих машинах - уже желания никакого нет. Хочется прописать в конфиг названия всех используемых пакетов, а Emacs, пусть сам при загрузке проверит недостающие и доставит их. К сожалению, встроенной функциональности для этого в Emacs нет, однако добавить такую возможность, как и все остальное, в Emacs не сложно...

вторник, 7 апреля 2015 г.

Настройка PageUp PageDown в Emacs

По умолчанию работа клавиш PageUp PageDown в Emacs отличается от других редакторов. Вот в такой ситуации, когда курсор находится в нескольких строчках от верхнего края документа: 
в большинстве редакторов PageUp поставит курсор на первую строчку, а Emacs - ничего делать не будет, если вся верхняя часть документа попадает на экран. Не то что бы поведение других редакторов правильное, а в Emacs - нет, просто подобное поведение ожидается уже на уровне рефлексов и когда курсор не двигается - это раздражает. Но к счастью в Emacs можно поменять поведение почти всего и PageUp/PageDown не исключение, напишем две маленькие функции: 

(defun cfg:page-up ()
  (interactive)
  (condition-case nil (scroll-down)
    (beginning-of-buffer (goto-char (point-min)))))

(defun cfg:page-down ()
  (interactive)
  (condition-case nil (scroll-up)
    (end-of-buffer (goto-char (point-max)))))

Они - пододвигают курсор в начало (или в конец для page down) документа, если встроенные функции отказались это делать. Теперь назначаем их на нужные нам клавиши: 

(global-set-key (kbd "<prior>") 'cfg:page-up)
(global-set-key (kbd "<next>") 'cfg:page-down) 
 
Все готово, можно пользоваться.