воскресенье, 29 мая 2011 г.

Конфиг к EMACS

После некоторого времени использования замечательного текстового редактора EMACS становится понятно, что его не только можно переконфигурировать, но даже более того: для удобной работы совершенно необходимо его переконфигурировать. Все пишут свои конфиги к EMACS; и я, пожалуй, также объясню свой.



Общие представления

Конфиг состоит из следующих частей:

  1. Настройка отступов
  2. Настройка прокрутки
  3. Включение повышающих продуктивность режимов
  4. Отключение некоторых элементов интерфейса
  5. Изменение горячих клавиш
  6. Ещё немного дополнительных изменений

После того, как я прочитаю монструозный полный перечень возможностей EMACS Lisp, конфиг я, пожалуй, изменю.


Во-первых, постановляем, что табуляцию мы прекращаем использовать раз и навсегда.

;;; To set the mod-2 indentation used when you hit the TAB key
(setq c-basic-offset 2)
;;; To cause the TAB file-character to be interpreted as mod-4 indentation
(setq tab-width 4)
;;; To cause TAB characters to not be used in the file for compression, and for only spaces to be used
(setq indent-tabs-mode nil) 

Во-вторых, так называемый «aggressive scrolling» лично мне только мешает, так что отключаем его.


(setq scroll-conservatively 5)
(setq scroll-margin 5)
(setq scroll-preserve-screen-position 1)

В-третьих, для меня безумно удобен viper-mode, поэтому включаем его по умолчанию везде.

(setq viper-mode t)
(require 'viper)

Также для веб-разработки включаем nXHTML-mode, который надо перед этим скачать и распаковать куда-нибудь (неважно куда, лишь бы файлы там и оставались и были доступны). Допустим, я распаковал пакет nXHTML-mode в каталог ""~/.emacs.d/nxhtml/", тогда в .emacs надо вписать:

(load "~/.emacs.d/nxhtml/autostart.el")

Теперь адский трюк: когда я хочу открыть файл через диалоговое окно, а не через минибуфер, я хочу нажать C-x M-f, а не ползать мышкой по кнопкам и менюшкам.

;;; To enable hotkeys for find-file-dialog
(defadvice find-file-read-args (around find-file-read-args-always-use-dialog-box act)
  "Simulate invoking menu item as if by the mouse; see `use-dialog-box'."
  (let ((last-nonmenu-event nil))
    ad-do-it))
(global-set-key (kbd "C-x M-f") 'menu-find-file-existing)

После этого трюка можно и отключить тулбар насовсем.

(tool-bar-mode -1)

Наконец, делаем всякие косметические улучшения. Первые установлены через меню настроек внутри EMACS, они тоже работают, но я уверен, что можно более лаконично.

(custom-set-variables
  ;; custom-set-variables was added by Custom.
 '(initial-scratch-message nil))
;;; Клёвые шрифты некрупным кеглем
(custom-set-faces
  ;; custom-set-faces was added by Custom.
 '(default ((t (:inherit nil :stipple nil :background "#ffffff" :foreground "#000000" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 87 :width normal :foundry "unknown" :family "Liberation Mono")))))

;; Column & line numbers in mode bar
(column-number-mode t)
(line-number-mode t)

;;; No startup message
(setq inhibit-startup-message t)

Пока всё, и так неплохо — прямо скажем, намного лучше, чем было. :)