Emacs. Каждый день что-нибудь новое

Сегодняшние герои - projectile и комбинация C-h.

Часто, начиная поиск в projectile при помощи C-c p f мне приходилось натыкаться на кучу хлама из каталогов tmp, log, не говоря уже про содержимое каталога контроля версий. Брр. Но чтение документации, даже изредка, приносит свои плоды. А именно, открываем файл $PROJECT_ROOT/.projectile, добавляем

1
2
3
4
5
6
7
+/app
+/lib
+/spec
-/log
-/tmp
-/.hg
-.*

и ищем нужные файлы быстро и без головной боли.

Второе. Комбинация C-h сама по себе вызывает подсказку. Разнообразную, какую только можно себе представить. Но, предположим, нам нужна подсказка по горячим клавишам projectile или perspective. Лезть в документацию, выходя из Emacs? Нееет, можно обойтись и без этого.

Например. Стандартный префикс команд в projectile - C-c p. Добавляем к нему C-h и - оп! Получаем полный список команд projectile, вызываемых с клавиатуры.

Но моё удовольствие и удивление были бы неполными, если бы точно так же, нажав C-x x C-h я бы не получил списка команд perspective. И в yasnippet та же история: C-c & C-h.

Почему Emacs?

Не помню, какой по счёту год пользования emacs, полет нормальный.

В какой-то момент, довольно протяженный во времени, уходил на sublime, привлеченный магией, которую давал поиск по C-p - действительно, потрясающая штуковина, которая в emacs до сих пор не реализована (или просто я об этом не слышал).

Чем на данный момент emacs привлекает меня больше, чем sublime?

  • Melpa - да, пакетный менеджер есть и в sublime, но когда я узнал, что он есть в emacs, это сильно сместило баланс (до этого приходилось каждый пакет скачивать и размещать ручками)
  • Projectile (поиск файла в проекте, в т.ч. fuzzy)
  • Perspective (больше не нужно держать открытыми несколько emacs-ов одновременно)
  • imenu - поиск метода в текущем файле, отвратительно ведёт себя в javascript, но хорош в coffeescript и ruby
  • Работа с системами контроля версий. Не всегда прямая и приятная, но в sublime она тоже не идеальна
  • Отсутствие напоминашек. Да, мне жалко 60 баксов на sublime.

Кто ты такой

Кто ты такой, чтобы указывать мне, учить меня, исследовать меня, игнорировать меня? Кто я такой, я сам, чтобы задавать вопросы и беспокоить кого бы то ни было? Кто мы, кем мы будем, когда смысл вопросов перестанет быть смыслом?

В чём печаль? В том, что время, отпущенное нам, конечно. Чему же тогда радоваться?

Радоваться стоит тому, что отпущенное нам время закончилось не вчера. Оно закончилось не пять минут назад, не только что. И это, само по себе, уже кое-что.

Почему Bluepill не мониторит мою задачу?

Случается страшное неприятное: падает процесс, поддерживающий работоспособность вашего приложения и перестаёт ходить почта, обновляться данные и много чего ещё. Узнаёте вы об этом из вопросов ваших пользователей, большая часть которых сводится к фразе “почему, собственно?” Это если опустить все остальные, нецензурные слова.

Но, думаете вы себе, я же всё настроил, сказал bluepill, что вот мои процессы, запускай их так-то и если процесс умер, запускай его снова? Возможно, что так оно и есть, но процесс падает и не перезапускается. Так тоже бывает.

Минутка ненависти

Внезапно обнаружил, что точка входа в ruby-объект может находиться в жо не совсем подходящем месте, а именно, в private секции:

1
2
3
4
5
6
7
8
9
class PrivateMethodMissing
  private

  def method_missing(sym, *args)
    puts "Hello, it's me, #{sym}!"
  end
end

PrivateMethodMissing.new.bar

Всех, кто при мне будет пользоваться этим “умным способом”, буду дварковать. Да-да, влендишным способом.