EMACS: автоустановка пакетов и хоткеи в русской раскладке
Введение
Наткнулся совершенно случайно на две отличных статьи про EMACS.
Если лень читать, то ниже приводятся готовые коды для включения в .emacs
Автоустановка пакетов
(require 'cl)
(require 'package)
;; Список пакетов для установки, на самом деле у меня их под 50 штук, но смысл
;; публиковать их здесь?
(defvar cfg-var:packages '(
anaconda-mode
company
company-anaconda
company-quickhelp
company-tern
company-web
emmet-mode
ergoemacs-mode
flycheck
powerline
py-autopep8
py-isort
web-mode
yafolding
yasnippet
))
(defun cfg:install-packages ()
(let ((pkgs (remove-if #'package-installed-p cfg-var:packages)))
(when pkgs
(message "%s" "Emacs refresh packages database...")
(package-refresh-contents)
(message "%s" " done.")
(dolist (p cfg-var:packages)
(package-install p)))))
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(package-initialize)
(cfg:install-packages)
Рабочее решение, которое гораздо лучше тех, что предложены на StackOverflow.
Хоткеи в русской раскладке
;; Это надо добавить ближе к началу .emacs
(defun cfg:reverse-input-method (input-method)
"Build the reverse mapping of single letters from INPUT-METHOD."
(interactive
(list (read-input-method-name "Use input method (default current): ")))
(if (and input-method (symbolp input-method))
(setq input-method (symbol-name input-method)))
(let ((current current-input-method)
(modifiers '(nil (control) (meta) (control meta))))
(when input-method
(activate-input-method input-method))
(when (and current-input-method quail-keyboard-layout)
(dolist (map (cdr (quail-map)))
(let* ((to (car map))
(from (quail-get-translation
(cadr map) (char-to-string to) 1)))
(when (and (characterp from) (characterp to))
(dolist (mod modifiers)
(define-key local-function-key-map
(vector (append mod (list from)))
(vector (append mod (list to)))))))))
(when input-method
(activate-input-method current))))
;; А вот эта строка должна быть в самом конце
(cfg:reverse-input-method 'russian-computer)
Сборка EMACS из исходников
Скачиваем пакет с исходным кодом с официального FTP проекта GNU:
wget ftp://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz
tar xf emacs-24.5.tar.xz
Для поиска более новой версии можно воспользоваться этой ссылкой:
Хорошо, распаковали, но EMACS'у нужна куча библиотек для успешной сборки. Можно поставить те, что нужны для сборки 24 версии, которая идёт в стандартной поставке Ubuntu 14.04:
apt-get install build-essentials -y && apt-get build-deb emacs24
После установки можно запустить .configure и make:
cd emacs-24.5/
./configure && make && make install
Процесс начнётся. Если проверка зависимостей пройдёт успешно, будет запущена компиляция проекта, а затем его установка. Однако, в главном меню не появится значка для запуска EMACS, как это происходит при установке через aptitude или apt-get install. Добавим его вручную. Всего лишь нужно создать файл формата .desktop в каталоге /usr/share/applications:
cd /usr/share/applications/
touch emacs.desktop
Теперь в этот файл нужно вписать следующие строки:
[Desktop Entry]
Version=24.5
Name=GNU Emacs
Type=Application
Comment=GNU Emacs text editor
Terminal=false
Icon=emacs
Categories=TextEditor;IDE
GenericName=GNU Text Editor
Exec=env UBUNTU_MENUPROXY=0 /usr/local/bin/emacs
После сохранения и перезапуска DE (можно выйти из системы и войти снова) ярлык появится в главном меню.