December 6, 2009

Emacs, файлы отката и авто-сохранения

По умолчанию, для файлов которые вы редактируете, Emacs создаёт файлы отката вида filename~ и файлы авто-сохранения вида #filename#. Первые остаются после закрытия файла и зачастую портят эстетическую составляющую вашего рабочего каталога. В этом посте рассматриваются способы решения этой проблемы.

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

~/.emacs.d/general.el:

;; Stop creating backup~ and #auto-save# files
(setq make-backup-files nil)
(setq auto-save-default nil)


Если вы всё же беспокоитесь за безопасность ваших данных, то вы столкнётесь со следующей проблемой. По умолчанию Emacs создаёт резервный файл переименованием оригинального, затем создаёт новый файл с оригинальным именем копированием и открывает его. Таким образом время создания файла меняется, даже если вы не меняли содержимое. Что-бы такого не было можно поменять поведение создание резервного файла на обратное.

~/.emacs.d/general.el:

;; Copy original file when creating backup
(setq backup-by-copying t)


По умолчанию резервные файлы хранятся рядом с их оригиналами, но можно указать директорию, где Emacs должен их создавать. В таком случае если оригинальный файл "/home/gray/tmp/sub/file.txt", а директория для резервного копирования "~/.emacs.d/files-backup", то резервный файл будет именован "~/.emacs.d/files-backup/home!gray!tmp!sub!file.txt".

~/.emacs.d/general.el:

;; Set directory for backup files
(setq backup-directory-alist '(("" . "~/.emacs.d/files-backup")))


В выше приведенном случае, если вы используете длинные имена файлов или глубокие пути, может легко быть достигнут лимит длины имён файлов. Эту проблему можно решить переопределив встроенную функцию определения имени резервного файла make-backup-file-name-function своей, которая будет создавать структуру директорий, такую же как от корня до оригинального файла, в директории для резервного копирования. Для выше приведённого примера резервный файл будет "~/.emacs.d/files-backup/home/gray/tmp/sub/file.txt".

~/.emacs.d/general.el:

;; File path mirroring for backup files
(defun my-backup-file-name (fpath)
(let (backup-root bpath)
(setq backup-root "~/.emacs.d/files-backup")
(setq bpath (concat backup-root fpath "~"))
(make-directory (file-name-directory bpath) bpath)
bpath
)
)
(setq make-backup-file-name-function 'my-backup-file-name)


Есть ещё несколько вещей связанных с резервированием и касающихся версионности, но об этом в другом посте.

Начальная настройка Emacs

Решил привести в систематизированный вид конфигурацию своего Emacs. В связи с этим решил написать несколько постов с рекомендациями для начинающих "эмаксоидов" о его настройке с нуля, а так как я от выше упомянутых ещё не далеко ушел, буду очень рад комментариям и критике. Этот пост содержит самые базовые вещи, которые надо сделать сразу, что-бы избежать лишних проблем в дальнейшем.

В данный момент я использую Emacs 23.1.1 под Gentoo.

Если вы планируете использовать встроенный инструмент customize совместно с ручной настройкой, то рекомендую выделить для генерируемой им конфигурации отдельный файл.

~/.emacs:

;; Custom settings file
(setq custom-file "~/.emacs.d/custom.el")
(load custom-file)


Также вынесем в отдельный файл общие настройки, оставив для ~/.emacs роль управляющего файла.

~/.emacs:

;; General settings file
(load "~/.emacs.d/general.el")


Заставляем Emacs "общаться" с clipboard-ом X (это не нужно в MS Windows и Mac OS).

~/.emacs.d/general.el:

;; Interact with OS clipboard
(setq x-select-enable-clipboard t)


Убираем Toolbar и Scrollbar. Это конечно по желанию, но по моему они мешают основной идее Emacs.

~/.emacs.d/general.el:

;; Turn off scrollbar, toolbar and menubar
(scroll-bar-mode nil)
(tool-bar-mode nil)
(menu-bar-mode nil)


Включаем отображение номера колонки поинта (курсора).

~/.emacs.d/general.el:

;; Turn on column number mode
(column-number-mode t)


Подсветка парной скобки.

~/.emacs.d/general.el:

;; Highlight brackets
(show-paren-mode t)


Замещаем выделенный текст любым вводом.

~/.emacs.d/general.el:

;; Delete selected text when typing
(delete-selection-mode t)


И устанавливаем шрифт по умолчанию.

~/.emacs.d/general.el:

;; Font
(set-default-font "Monospace-9")


Ну, вот, теперь можно двигаться дальше.