Skip to content

Instantly share code, notes, and snippets.

@RaD
Last active Apr 25, 2016
Embed
What would you like to do?
My .emacs
;;
;; Определение операционной системы
;;
(defun system-is-linux()
(string-equal system-type "gnu/linux"))
(defun system-is-windows()
(string-equal system-type "windows-nt"))
;;
;; Информация о пользователе
;;
(setq user-full-name "Ruslan Popov")
(setq user-mail-address "ruslan.popov@gmail.com")
;;(setq default-input-method 'russian-computer)
(setq frame-title-format `("emacs@" ,(system-name) ": %f"))
(add-to-list 'load-path "~/.emacs.d/rc")
;;
;; Поддержка UTF-8
;;
(set-language-environment 'UTF-8)
(if (system-is-linux)
(progn
(setq default-buffer-file-coding-system 'utf-8)
(setq-default coding-system-for-read 'utf-8)
(setq file-name-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8-unix)
(set-terminal-coding-system 'utf-8)
(prefer-coding-system 'utf-8))
(progn
(setq default-buffer-file-coding-system 'windows-1251)
(setq-default coding-system-for-read 'windows-1251)
(setq file-name-coding-system 'windows-1251)
(set-selection-coding-system 'windows-1251)
(set-keyboard-coding-system 'windows-1251-unix)
(set-terminal-coding-system 'windows-1251)
(prefer-coding-system 'windows-1251)))
;; тема
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(load-theme 'monokai t)
(setq-default indent-tabs-mode nil) ;; запрещаем выравнивание TAB-ами
(setq-default c-mode-indent-level 4) ;; выравниваем 4 пробелями
(setq tab-stop-list (number-sequence 4 120 4))
(setq x-select-enable-clipboard t) ;; копируем по C-w в буфер иксов
(setq redisplay-dont-pause t) ;; лучшая отрисовка буфера
(tool-bar-mode -1) ;; выключаем тулбар
(mouse-wheel-mode 1) ;; разрешаем колесо мыши
(desktop-save-mode t) ;; сохраняем буферы между запусками
(fset 'yes-or-no-p 'y-or-n-p) ;; теперь не надо набирать yes/no
(delete-selection-mode t) ;; разрешаем удалять выделенный текст вводом нового
(global-hl-line-mode 1) ;; подсвечиваем текущую строку
(set-face-background 'hl-line "#000") ;; цвет выделяемой строки #RGB
;;
;; прокрутка
;;
(scroll-bar-mode (quote right)) ;; скроллбар пусть будет справа
(setq scroll-step 1) ;; вверх-вниз по 1 строке
(setq scroll-margin 10) ;; сдвигать буфер верх/вниз когда курсор в 10 шагах от верхней/нижней границы
(setq scroll-conservatively 10000)
;;
;; завершение строк
;;
(setq require-final-newline t) ;; добавить новую пустую строку в конец файла при сохранении
(setq next-line-add-newlines nil) ;; не добавлять новую строку в конец при смещении курсора стрелками
;;
;; выделять результаты поиска
;;
(setq search-highlight t)
(setq query-replace-highlight t)
;;
;; разрешаем команды управления регистрами текста
;;
(put 'narrow-to-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'upcase-region 'disabled nil)
;; включаем нумерацию строк
(require 'linum)
(line-number-mode t) ;; показать номер строки в mode-line
(global-linum-mode t) ;; показывать номера строк во всех буферах
(column-number-mode t) ;; показывать номер столбца в mode-line
(setq linum-format " %d" ) ;; задаём формат нумерации строк
;
(fringe-mode '(8 . 0)) ;; ограничитель строки только слева
(setq-default indicate-empty-lines t) ;; отсутствие строки выделять глифами рядом с поломой с номером строки
(setq-default indicate-buffer-boundaries 'left) ;; индикация только слева
;; навигация по буферам
(global-set-key (kbd "C-,") 'previous-buffer)
(global-set-key (kbd "C-б") 'previous-buffer)
(global-set-key (kbd "C-.") 'next-buffer)
(global-set-key (kbd "C-ю") 'next-buffer)
(global-set-key (kbd "C-\\") 'other-window)
;; отмена по C-z
(global-set-key (kbd "C-z") 'undo)
(global-set-key (kbd "C-я") 'undo)
;; сортировка строк в блоке по F9
(global-set-key (kbd "<f9>") 'sort-lines)
;; переход на строку по M-g
(global-set-key (kbd "\eg") 'goto-line)
(global-set-key (kbd "\eп") 'goto-line)
;; (рас)комментирование по M-S-3
(global-set-key (kbd "M-#") 'comment-or-uncomment-region)
;; вызов спидбара (навигация по каталогам)
(global-set-key [Scroll_Lock] 'speedbar)
;;
;; реализация перехода по скобкам по M-S-%.
;;
(defun match-paren (arg)
"Go to the matching paren if on a paren; otherwise insert %."
(interactive "p")
(cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
((looking-at "\\s\)") (forward-char 1) (backward-list 1))
(t (self-insert-command (or arg 1)))))
(global-set-key (kbd "\e%") 'match-paren)
;; вставляем скобки и кавычки парами (нахрен отключил)
(electric-pair-mode 0)
;;
;; закрываем все буферы
;;
(defun nuke-all-buffers ()
"kill all buffers, leaving only limited set of buffers"
(interactive)
(let* ((keep-them-alive '("*scratch*" "*Messages*" "*Pymacs*")))
(mapcar (lambda (x)
(unless (member (buffer-name x) keep-them-alive)
(kill-buffer x)))
(buffer-list))))
;;;
;; поддержка python
;;;
(add-hook 'python-mode-hook 'flymake-mode)
(add-to-list 'load-path "~/.emacs.d/vendor/flymake")
(require 'flymake-cursor)
(when (load "flymake" t)
(defun flymake-pylint-init ()
(list "~/.emacs.d/vendor/flymake/lintrunner.sh"
(list buffer-file-name)))
(add-to-list 'flymake-allowed-file-name-masks
'("^[^\*]+\\.py$" flymake-pylint-init)))
;; (setq python-check-command "pylint-checker")
(setq python-check-command "~/.emacs.d/vendor/flymake/lintrunner.sh")
;;(add-to-list 'load-path "~/.emacs.d/vendor/pymacs-v0.25")
;;(require 'pymacs)
;;(pymacs-load "ropemacs" "rope-")
;;(setq ropemacs-enable-autoimport t)
;;
;; автодополнение в питоне
;;
(add-to-list 'load-path "~/.emacs.d/vendor/auto-complete-1.2")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/vendor/auto-complete-1.2/dict")
(ac-config-default)
;; поиск по документации
;; pylookup.py -d ~/.emacs.d/vendor/pylookup/pylookup.db -u /usr/share/doc/python-doc/html -u ~/devel/django_documentation/source/_build/html
(add-to-list 'load-path "~/.emacs.d/vendor/pylookup/")
(eval-when-compile (require 'pylookup))
(setq pylookup-program "~/bin/pylookup.py")
(setq pylookup-db-file "~/.emacs.d/vendor/pylookup/pylookup.db")
(global-set-key (kbd "<M-f9>") 'pylookup-lookup)
;; поиск по файлам
(global-set-key (kbd "<f7>") 'rgrep)
(global-set-key (kbd "<M-f7>") 'occur)
;;
;; Yasnippet (требуется системный пакет `yasnippet`)
;;
(add-to-list 'load-path "/usr/share/emacs/site-lisp/yasnippet")
(autoload 'yas/initialize "yasnippet" "Do necessary initialization.")
(autoload 'yas/load-directory "yasnippet"
"Load snippet definition from a directory hierarchy." t)
(require 'yasnippet) ;; not yasnippet-bundle
(yas/initialize)
(yas/load-directory "/usr/share/emacs/site-lisp/yasnippet/snippets/")
(yas/load-directory "~/.emacs.d/vendor/yasnippets/")
(setq hippie-expand-try-functions-list
(cons 'yas/hippie-try-expand hippie-expand-try-functions-list))
;;(global-set-key [(\t)] 'indent-for-tab-command)
(setq yas/trigger-key (kbd "M-n"))
;;
;; активируем режим фолдинга для питона
;; вешаем действие на сочетание C-=
;;
(add-hook 'python-mode-hook 'hs-minor-mode)
(global-set-key (kbd "C-=") 'hs-toggle-hiding)
;; при сохранении удаляем все висящие пробелы
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;;
;; при загрузке файла с CRLF преобразовываем его в LF
;; кому это не нравится смогут переключить буфер по C-x Enter f
;;
(defun dos-file-endings-p ()
(string-match "dos" (symbol-name buffer-file-coding-system)))
(defun find-file-check-line-endings ()
(when (dos-file-endings-p)
(set-buffer-file-coding-system 'undecided-unix)
(set-buffer-modified-p nil)))
(add-hook 'find-file-hook 'find-file-check-line-endings)
;;
;; IDO mode
;;
(require 'uniquify)
(require 'ido)
(ido-mode t)
;;
;; Режим для редактирования файлов OpenSCAD.
;;
(add-to-list 'load-path "~/.emacs.d/vendor/openscad/")
(autoload 'scad-mode "scad-mode" "Major mode for editing SCAD code." t)
(add-to-list 'auto-mode-alist '("\\.scad$" . scad-mode))
;;
;; Адаптивный перенос строк, см: http://redhotchilipython.com/en_posts/2013-05-26-emacs-visual-line.html
;; Запускаем для буфера черех M-x adaptive-wrap-prefix-mode
;;
(require 'adaptive-wrap)
(add-hook 'visual-line-mode-hook 'adaptive-wrap-prefix-mode)
(add-hook 'python-mode-hook 'adaptive-wrap-prefix-mode)
(add-hook 'html-mode-hook 'adaptive-wrap-prefix-mode)
(add-hook 'js-mode-hook 'adaptive-wrap-prefix-mode)
;;
;; запуск емакса в режиме сервера
;; альтернатива - запуск emacs --daemon
;; использование скрипта: emacsclient -n "$@"
;;
(when (system-is-linux)
(require 'server)
(unless (server-running-p)
(server-start)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment