;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Файл конфигурации .emacs
;; проверен для Emacs версии 25.1.1 под Windows 7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;выводим в буфер сообщений
(message "start .emacs loading")
;засекаем время начала загрузки
(setq emacs-load-start-time (current-time))
;;используем Common Lisp
(require 'cl)
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;настройка кодировки
;;Используем UTF-8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(set-language-environment 'UTF-8)
(set-buffer-file-coding-system 'utf-8-dos)
(set-default-coding-systems 'utf-8-dos)
(set-terminal-coding-system 'utf-8-dos)
;следующая строка не нужна для надежной работы с другими редакторами
;(set-selection-coding-system 'utf-8-dos)
(message "set encoding done")
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настройка поведения редактора "как в Windows"
;;Установка режима CUA
;;поддержка Ctr-c,v,x,z как в windows
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(cua-mode t)
;;Don't tabify after rectangle commands
(setq cua-auto-tabify-rectangles nil)
;;Standard Windows behaviour
(setq cua-keep-region-after-copy t)
;;highlight active region (active region = text selection) ON by default v23+
;(transient-mark-mode 1)
(setq shift-select-mode t)
;;stops active region automatically setting primary selection
(setq select-active-regions nil)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Установка окружения, меню
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Начинаем работу в домашнем каталоге, указанном в переменной окружения HOME
(cd "~/")
(setq my-author-name (getenv "USERNAME"))
(setq user-full-name (getenv "USERNAME"))
;;Shut off message buffer.
;(setq message-log-max nil)
;(kill-buffer "*Messages*")
;;Clear Scratch buffer
(setq initial-scratch-message nil)
;;Recent files in menu
(recentf-mode 1)
;;имя файла в заголовке окна
(setq frame-title-format '(buffer-file-name "%f" ("%b")))
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настройка резервного копирования (backup)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;бэкап копированием
(setq backup-by-copying t)
;;бэкап хранится в подкаталоге backup домашнего каталога
(setq backup-directory-alist `(("." . "~/backup")))
;;нумерованный бэкап, сохраняются 2 первые и 2 последние версии
;;остальные удаляются
(setq delete-old-versions t
      kept-new-versions 2
      kept-old-versions 2
      version-control t)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Режимы работы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;загружается молча
(setq inhibit-startup-message t)
;;на запросы отвечаем коротко
(defalias 'yes-or-no-p 'y-or-n-p)
;;по умолчанию -- текстовый режим
(setq default-major-mode 'text-mode)
;;выравнивание текста (wrap mode)
(global-visual-line-mode t)
;если выравнивать надо только в текстовом режиме -- раскомментировать
;(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
;;удаляем в корзину
(setq delete-by-moving-to-trash t)
;;добавлять пустую строку в конец файла при сохранении
(setq require-final-newline t)
;;игонорируем клавишу Scroll Lock под Windows
(setq w32-scroll-lock-modifier 'ignore)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;настройки скроллинга
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;строк за один щелчок колеса мышки
(setq mouse-wheel-scroll-amount '(2 ((shift) . 1)))
;;строк за одно нажатие клавиши
(setq scroll-step 1)
;;без ускорения
(setq mouse-wheel-progressive-speed nil)
;;следить за мышкой
(setq mouse-wheel-follow-mouse 't)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;мышь
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Scroll Bar перетаскивается кнопкой mouse-1
(global-set-key [vertical-scroll-bar down-mouse-1] 'scroll-bar-drag)
;;Fix so button 2 pastes at cursor, not Point
;(setq mouse-yank-at-point t)
;;используем колесо мышки
(mouse-wheel-mode 1)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Внешний вид, Оформление
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;курсор не мигает
(blink-cursor-mode 0)
;;устанавливаем значение табулятора
(setq-default tab-width 4)
;;автоматически отображаем линейку
(add-hook 'window-configuration-change-hook (lambda () (ruler-mode 1)))
;;установка размеров экрана
(set-frame-height (selected-frame) 55)
(set-frame-width (selected-frame) 100)
;;установка левого верхнего угла фрейма
(set-frame-position (selected-frame) 60 0)
;;в строке состояния показываем номера строки, колонки, размер файла
(setq column-number-mode t)
(setq line-number-mode t)
(size-indication-mode t)
;;нумеровать строки в левой части окна
(global-linum-mode 1)
;;показать пробелы
(global-whitespace-mode 1)
(global-whitespace-newline-mode 1)
;; make whitespace-mode use just basic coloring
(setq whitespace-style (quote (spaces tabs newline space-mark tab-mark newline-mark)))
;;способ  отображение пробела (「·」), символа новой строки (「¶」) и табуляции (「▷」)
;;все числа - десятичный юникод.
(setq whitespace-display-mappings
      '(
        (space-mark 32 [183] [46]) ; 32 SPACE, 183 MIDDLE DOT 「·」, 46 FULL STOP 「.」
        (newline-mark 10 [182 10]) ; 10 LINE FEED
        (tab-mark 9 [8658 9] [92 9]) ; 9 TAB, 9655 WHITE RIGHT-POINTING TRIANGLE 「▷」
        ))
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Устанавливаем цвета редактора
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(load-theme 'deeper-blue)
;;корректируем цвет выделенного текста
(set-face-attribute 'region nil :background "gray38" :foreground "white")
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Устанавливаем основной шрифт
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(set-frame-font "Lucida Console-12")
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Подсветка синтаксиса
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;показывать помеченный текст
;(setq transient-mark-mode '1);ON by default v23+
(setq font-lock-maximum-decoration t)
;;подсветка синтаксиса всегда
(global-font-lock-mode t)
;;Выделение парных скобок
(show-paren-mode 1)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Проверка орфографии
;;используем установленный hunspell
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq ispell-program-name (executable-find "hunspell"))
;;выбор словаря по умолчанию
;;в windows эта строка обязательна
(setenv "LANG" "ru_RU_yo")
;;выбор словаря заменяет предыдущий выбор
(setq ispell-local-dictionary "ru_RU_yo")
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Формат даты и времени
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; hour format
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time)
(setq calendar-date-display-form (quote ((format "%04s-%02d-%02d" year (string-to-int month) (string-to-int day)))))
(setq calendar-time-display-form (quote (24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")"))))
(setq calendar-week-start-day 1)
(setq european-calendar-style t)
(setq display-time-world-list '(("Europe/Moscow" "Moscow")
                                ("Asia/Yekaterinburg" "Chelyabinsk")
                                ("Asia/Yekaterinburg" "Ufa")
                                ("Asia/Israel" "Ashdod")))
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Назначение клавиш
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [home] 'beginning-of-line)
(global-set-key [end] 'end-of-line)
(global-set-key [\C-home] 'beginning-of-buffer)
(global-set-key [\C-end] 'end-of-buffer)
;;
;;удаляет ОТ позиции курсора до конца строки
;(setq kill-whole-line t)
;;удаляем строку целиком
(global-set-key [(control y)]
  '(lambda ()
     (interactive)
     (beginning-of-line)
     (kill-line)))
;;
;; setting some f[1-12] keys
;;
(global-set-key [f1]    'help)
(global-set-key [f2]    'save-buffer)
(global-set-key [M-f4]  'save-buffers-kill-emacs)
;;Экспорт текущего буфера в xHTML
;;в файле htmlfontify.el в функции hfy-default-header добавить строку
;;<meta charset=\"UTF-8\">
;;между <head> и <title>
(global-set-key  [f7]  'htmlfontify-buffer)
(global-set-key  [f8 f8]  'markdown-toc/generate-toc)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настройка печати
;;печатаем на принтер по умолчанию через notepad.exe
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Use Notepad to print plain text files to the default Windows printer
(setq lpr-command "notepad")
(setq lpr-headers-switches '("/p"))    ; \ mis-use these
(setq lpr-switches nil)                ; / two variables
(setq printer-name nil); notepad takes the default
(setq lpr-printer-switch "/P") ;; run notepad as batch printer
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настраиваем вызов компилятора (Compile)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq compile-command "compile.bat")
(setq compilation-read-command nil)
(setq compilation-scroll-output t)
(setq compile-auto-highlight t)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настраиваем режимы markdown и pandoc
;;требуется установленный pandoc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(autoload 'markdown-mode "markdown-mode")
;;устанавливаем этот режим для файлов *.md
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
;;параметры командной строки для преобразования в HTML
(setq markdown-command "pandoc -s -S --self-contained --mathml -c %HOME%/md.css -f markdown -t html5")
;;добавляем режим pandoc
(load "pandoc-mode")
(add-hook 'markdown-mode-hook 'pandoc-mode)
;;добавляем поддержку создания оглавлений: M-x markdown-toc/generate-toc
;;обновление имеющегося: C-u M-x markdown-toc/generate-toc
(load "markdown-toc")
(setq *markdown-toc/header-toc-title* "**Содержание**")
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настройки AUCTeX
;;Работаем с установленным MiKTeX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;MiKTeX
(require 'tex-mik)
;;Вывод в PDF
(setq TeX-PDF-mode t)
;;
;;Настройки Preview
;;Под Windows не понимает PNG, меняем тип картинок
(setq preview-image-type 'pnm)
;;Установлен Ghostscript 64bit. Автоматически его AucTeX не находит.
;;Указываем местоположение явно
(setq preview-gs-command "c:\\Program Files\\gs\\gs9.14\\bin\\gswin64c.exe")
;;Увеличиваем размер картинок до желаемого
(set-default 'preview-scale-function 2.5)
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Настройки Bib(La)TeX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; в режиме bibtex отключаем табулятор
(add-hook 'bibtex-mode-hook
              (lambda () (setq indent-tabs-mode nil)
              (setq fill-column 80))
              )
;;настройки форматирования для команд Fill и Reformat
;;отступ до названия поля
(setq bibtex-field-indentation 0)
;;отступ до значения поля
(setq bibtex-text-indentation 15)
;;отступ для перенесенных строк
(setq bibtex-contline-indentation 16)
;;выравниваем знаки "="
(setq bibtex-align-at-equal-sign 1)
;;обший отступ для всех строк
(setq bibtex-entry-offset 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Автозамена (prettify mode, 25+)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;определяем список для автозамены
(defconst prettify-symbols-alist
  '(("lambda"  . ?λ)
    ("alpha"  . ?α)
    ("beta"  . ?β)
    ("gamma"  . ?γ)
    ("->"  . 8594)
    ("\\par"  . ?§)
))
;;
(defun refresh-pretty ()
    (prettify-symbols-mode -1)
    (prettify-symbols-mode +1)
)
;; устанавливаем автозамену для текстового режима
(add-hook 'text-mode-hook 'refresh-pretty)
;; если навести курсор на преобразованный символ, показывается исходник
(setq prettify-symbols-unprettify-at-point 'right-edge)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(message ".emacs loaded OK.")
(message "Emacs startup time: %g seconds." (float-time (time-since emacs-load-start-time)))
;; end of .emacs