Last active
April 25, 2016 19:38
-
-
Save RaD/6371840 to your computer and use it in GitHub Desktop.
My .emacs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; | |
;; Определение операционной системы | |
;; | |
(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 "[email protected]") | |
;;(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