Showing posts with label emacs. Show all posts
Showing posts with label emacs. Show all posts

June 7, 2010

Скрываем dot-файлы в Dired (Emacs)

Если пользуетесь Dired, то наверняка часто сталкивались с проблемой, когда, допустим, в вашем "хоуме" (~/) глаза разбегались от обилия dot-файлов (.filename). Действительно так очень неудобно, но есть решение - просто добавьте этот сниплет в конфигурацию:

~/.emacs.d/general.el:
;; Dired Mode extra features
(load "dired-x.el")
(setq dired-omit-files
(concat dired-omit-files "\\|^\\..+$"))
(dired-omit-mode 1)


По умолчанию он выключает отображение dot-файлов. Чтобы переключать режим отображения используйте M-o.

March 27, 2010

Опять про отступы в sql-mode Emacs

Сделал не большую правку в конфиге для sql-mode. Теперь когда просто нажимаешь "TAB" всегда делается отступ в 4 пробела, а когда нажимаешь "C-j" делается переход на новую строку с относительным отступом там где надо.

March 11, 2010

Небольшое предпочтение в sql-mode Emacs

В общем чуток кастомизации sql-mode. Я привык в SQL к отступам в 4-е пробела и мне нравится контроль над пробельными символами (мой пунктик).

В управляющем файле ставим загрузку конфигурации для разных sql:

~/.emacs:
(load "~/.emacs.d/sql.el")

В конфигурации sql:

~/.emacs.d/sql.el:
;; Minor modes
(add-hook 'sql-mode-hook 'whitespace-mode)

;; 4 spaces instead of tab
(add-hook 'sql-mode-hook
'(lambda ()
(setq indent-tabs-mode nil
tab-width 4
indent-line-function 'insert-tab)
(define-key sql-mode-map (kbd "C-j")
'(lambda()
(interactive)
(delete-horizontal-space t)
(newline)
(indent-relative-maybe)))))


Всё, теперь меня ничего не смущает, гут :)

Правка от 2010-03-26
Установил функцию общего отступа в обычную табуляцию:

indent-line-function 'insert-tab

И переопределил "C-j" с использованием относительного отступа где надо:

(define-key sql-mode-map (kbd "C-j")
'(lambda()
(interactive)
(delete-horizontal-space t)
(newline)
(indent-relative-maybe)))))

March 9, 2010

Настраиваем Emacs для работы с PostgreSQL

Да-да, в Emacs всё уже давно есть. Просто делаем M-x sql-postgres, он спрашивает базу+пользователя+хост, вводим пароль и получаем буфер-терминал *SQL*, где видим всем известный инструмент psql для работы с PostgreSQL.

Но, если получаем длинный вывод, то наблюдаем артефакты от less или more (или что у вас там по умолчанию в качестве пейджера). К тому же, если работаем напрямую из окна в sql-mode (что очень удобно, см. M-x describe-function RET sql-set-sqli-buffer RET), то наблюдаем эффект с множественными повторениями подсказки (prompt).

Как это пофиксить? Идея в том, чтобы отключить PAGER (программу, через которую psql пропускает свой вывод), и "подтюнить" подсказку (prompt) средствами самого psql с помощью переменной sql-postgres-options, предоставляемой sql-mode.

Создаём файл с настройками для PostgreSQL.

~/.emacs.d/postgresql.el:
;; In psql turn off pager usage and adjust prompts
(setq sql-postgres-options '("-P" "pager=off"
"-v" "PROMPT1=%n@%m:%> %~%R%#\n"
"-v" "PROMPT2="
"-v" "PROMPT3="))



Далее добавляем подгрузку этих настроек в .emacs и всё.

~/.emacs:
(load "~/.emacs.d/postgresql.el")

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")


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