(setq custom-file "~/.emacs.custom.el") (package-initialize) (add-to-list 'load-path "~/.emacs.local/") (load "~/.emacs.rc/rc.el") (load "~/.emacs.rc/misc-rc.el") ;;; Appearance (add-to-list 'default-frame-alist `(font . "Iosevka-16")) (tool-bar-mode 0) (menu-bar-mode 0) (scroll-bar-mode 0) (column-number-mode 1) (show-paren-mode 1) (rc/require-theme 'gruber-darker) ;; (rc/require-theme 'zenburn) ;; (load-theme 'adwaita t) (rc/require 'all-the-icons 'all-the-icons-dired) (eval-after-load 'zenburn (set-face-attribute 'line-number nil :inherit 'default)) (defun toggle-window-split () (interactive) (if (= (count-windows) 2) (let* ((this-win-buffer (window-buffer)) (next-win-buffer (window-buffer (next-window))) (this-win-edges (window-edges (selected-window))) (next-win-edges (window-edges (next-window))) (this-win-2nd (not (and (<= (car this-win-edges) (car next-win-edges)) (<= (cadr this-win-edges) (cadr next-win-edges))))) (splitter (if (= (car this-win-edges) (car (window-edges (next-window)))) 'split-window-horizontally 'split-window-vertically))) (delete-other-windows) (let ((first-win (selected-window))) (funcall splitter) (if this-win-2nd (other-window 1)) (set-window-buffer (selected-window) this-win-buffer) (set-window-buffer (next-window) next-win-buffer) (select-window first-win) (if this-win-2nd (other-window 1)))))) (global-set-key (kbd "C-t") 'toggle-window-split) (global-set-key (kbd "C-") 'next-window-any-frame) (global-set-key (kbd "C-") 'previous-window-any-frame) ;;; ido (rc/require 'smex 'ido-completing-read+) (require 'ido-completing-read+) (ido-mode 1) (ido-everywhere 1) (ido-ubiquitous-mode 1) (setq ido-auto-merge-work-directories-length -1) (global-set-key (kbd "M-x") 'smex) (global-set-key (kbd "C-c C-c M-x") 'execute-extended-command) (setq compile-command "") ;;; comment (rc/require 'comment-dwim-2) (global-set-key (kbd "C-;") 'comment-dwim-2) ;;; c-mode (setq-default c-basic-offset 4 c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "bsd"))) (add-hook 'c-mode-hook (lambda () (interactive) (c-toggle-comment-style -1))) ;;; Paredit (rc/require 'paredit) (defun rc/turn-on-paredit () (interactive) (paredit-mode 1)) (add-hook 'emacs-lisp-mode-hook 'rc/turn-on-paredit) (add-hook 'clojure-mode-hook 'rc/turn-on-paredit) (add-hook 'lisp-mode-hook 'rc/turn-on-paredit) (add-hook 'common-lisp-mode-hook 'rc/turn-on-paredit) (add-hook 'scheme-mode-hook 'rc/turn-on-paredit) (add-hook 'racket-mode-hook 'rc/turn-on-paredit) ;;; Emacs lisp (add-hook 'emacs-lisp-mode-hook '(lambda () (local-set-key (kbd "C-c C-j") (quote eval-print-last-sexp)))) (add-to-list 'auto-mode-alist '("Cask" . emacs-lisp-mode)) ;;; uxntal-mode (rc/require 'uxntal-mode) ;;; Haskell mode (rc/require 'haskell-mode) (setq haskell-process-type 'cabal-new-repl) (setq haskell-process-log t) (add-hook 'haskell-mode-hook 'haskell-indent-mode) (add-hook 'haskell-mode-hook 'interactive-haskell-mode) (add-hook 'haskell-mode-hook 'haskell-doc-mode) (require 'fasm-mode) (add-to-list 'auto-mode-alist '("\\.asm\\'" . fasm-mode)) (require 'llvm-mode) (add-to-list 'auto-mode-alist '("\\.ll\\'" . llvm-mode)) (require 'simpc-mode) ;; (add-to-list 'auto-mode-alist '("\\.[hc]\\(pp\\)?\\'" . simpc-mode)) (setq path-to-ctags "/usr/bin/ctags") (defun create-tags (dir-name) "Create tags file." (interactive "Directory: ") (shell-command (format "%s -f TAGS -e -R %s" path-to-ctags (directory-file-name dir-name))) ) (global-set-key (kbd "M-;") 'xref-find-definitions) (rc/require 'ess) (rc/require 'polymode) (rc/require 'poly-R) ;;; Whitespace mode (defun rc/set-up-whitespace-handling () (interactive) (whitespace-mode 0) (add-to-list 'write-file-functions 'delete-trailing-whitespace)) (add-hook 'tuareg-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'c++-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'c-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'simpc-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'emacs-lisp-mode 'rc/set-up-whitespace-handling) (add-hook 'java-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'lua-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'rust-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'scala-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'markdown-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'haskell-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'python-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'erlang-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'asm-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'fasm-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'go-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'nim-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'yaml-mode-hook 'rc/set-up-whitespace-handling) (add-hook 'porth-mode-hook 'rc/set-up-whitespace-handling) ;;; display-line-numbers-mode (when (version<= "26.0.50" emacs-version) (global-display-line-numbers-mode)) (setq display-line-numbers-type 'relative) ;;; magit ;; magit requres this lib, but it is not installed automatically on ;; Windows. (rc/require 'cl-lib) (rc/require 'magit) (setq magit-auto-revert-mode nil) (global-set-key (kbd "C-c m s") 'magit-status) (global-set-key (kbd "C-c m l") 'magit-log) ;;; multiple cursors (rc/require 'multiple-cursors) (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines) (global-set-key (kbd "C-S-n") 'mc/mark-next-like-this) (global-set-key (kbd "C-S-p") 'mc/mark-previous-like-this) ;(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this) ;(global-set-key (kbd "C-\"") 'mc/skip-to-next-like-this) ;(global-set-key (kbd "C-:") 'mc/skip-to-previous-like-this) ;;; markdown (rc/require 'markdown-mode 'impatient-mode 'simple-httpd) (add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode)) (setq markdown-command "pandoc -t html5") (setq httpd-port 7070) (setq httpd-host (system-name)) (defun github-markdown-filter (buffer) (princ (with-temp-buffer (let ((tmp (buffer-name))) (set-buffer buffer) (set-buffer (markdown tmp)) (format "Markdown preview
%s
" (buffer-string)))) (current-buffer))) (defun github-markdown-preview () "Preview markdown with github style" (interactive) (unless (process-status "httpd") (httpd-start)) (impatient-mode) (imp-set-user-filter 'github-markdown-filter) (imp-visit-buffer)) ;;; dired (require 'dired-x) (setq dired-omit-files (concat dired-omit-files "\\|^\\..+$")) (setq-default dired-dwim-target t) (setq dired-listing-switches "-alh") (setq dired-mouse-drag-files t) (global-set-key (kbd "C-d") 'dired) ;;; helmn (rc/require 'helm) (global-set-key (kbd "C-c h t") 'helm-cmd-t) ;;; yasnippet (rc/require 'yasnippet) (require 'yasnippet) (setq yas/triggers-in-field nil) (setq yas-snippet-dirs '("~/.emacs.snippets/")) (yas-global-mode 1) ;;; word-wrap (defun rc/enable-word-wrap () (interactive) (toggle-word-wrap 1)) (add-hook 'markdown-mode-hook 'rc/enable-word-wrap) ;;; nxml (add-to-list 'auto-mode-alist '("\\.html\\'" . nxml-mode)) (add-to-list 'auto-mode-alist '("\\.xsd\\'" . nxml-mode)) (add-to-list 'auto-mode-alist '("\\.ant\\'" . nxml-mode)) ;;; Makefile (add-to-list 'auto-mode-alist '("\\make.config\\'" . makefile-mode)) ;;; tramp ;;; http://stackoverflow.com/questions/13794433/how-to-disable-autosave-for-tramp-buffers-in-emacs (setq tramp-auto-save-directory "/tmp") ;;; powershell (rc/require 'powershell) (add-to-list 'auto-mode-alist '("\\.ps1\\'" . powershell-mode)) (add-to-list 'auto-mode-alist '("\\.psm1\\'" . powershell-mode)) ;;; eldoc mode (defun rc/turn-on-eldoc-mode () (interactive) (eldoc-mode 1)) (add-hook 'emacs-lisp-mode-hook 'rc/turn-on-eldoc-mode) ;;; Company (rc/require 'company) (require 'company) (global-company-mode) ;; (add-hook 'tuareg-mode-hook ;; (lambda () ;; (interactive) ;; (company-mode 0))) ;;; Typescript (rc/require 'typescript-mode) (add-to-list 'auto-mode-alist '("\\.mts\\'" . typescript-mode)) ;;; Tide (rc/require 'tide) (defun rc/turn-on-tide-and-flycheck () ;Flycheck is a dependency of tide (interactive) (tide-setup) (flycheck-mode 1)) (add-hook 'typescript-mode-hook 'rc/turn-on-tide-and-flycheck) ;;; Proof general (rc/require 'proof-general) (add-hook 'coq-mode-hook '(lambda () (local-set-key (kbd "C-c C-q C-n") (quote proof-assert-until-point-interactive)))) ;;; LaTeX mode (add-hook 'tex-mode-hook (lambda () (interactive) (add-to-list 'tex-verbatim-environments "code"))) (setq font-latex-fontify-sectioning 'color) ;;; Move Text (rc/require 'move-text) (global-set-key (kbd "M-p") 'move-text-up) (global-set-key (kbd "M-n") 'move-text-down) ;;; Ebisp (add-to-list 'auto-mode-alist '("\\.ebi\\'" . lisp-mode)) ;;; Go (rc/require 'go-mode) ;(add-to-list 'compilation-error-regexp-alist 'gotest) ;(add-to-list 'compilation-error-regexp-alist-alist '(gotest "^ \\(\\([^:\n]+\\):\\([0-9]+\\)\\)" 2 3 nil nil 1)) ;(add-to-list 'compilation-error-regexp-alist 'gotraceback) ;(add-to-list 'compilation-error-regexp-alist-alist '(gotraceback "^\t\\(\\([^\n\t]+\\):\\([0-9]+\\)\\)\\( \\+0x[0-9a-f]+\\)?$" 2 3 nil (nil . 4) 1)) ;;; OCaml (rc/require 'tuareg) ;;; ASM (defun my-asm-mode-hook () (local-unset-key (vector asm-comment-char)) (setq tab-always-indent (default-value 'tab-always-indent)) (setq comment-start "//")) (add-hook 'asm-mode-hook #'my-asm-mode-hook) ;;; Clang format (rc/require 'clang-format) (global-set-key (kbd "C-o") 'clang-format-buffer) ;;; Lsp-mode (rc/require 'lsp-mode 'lsp-treemacs 'helm-lsp 'projectile 'hydra 'flycheck 'company 'avy 'which-key 'helm-xref) (which-key-mode) (setq lsp-keymap-prefix "s-i") (add-hook 'c-mode-hook 'lsp) (add-hook 'c++-mode-hook 'lsp) (add-hook 'python-mode 'lsp) ;;; zoxide (rc/require 'zoxide) (add-hook 'dired-after-readin-hook 'zoxide-add) (setq gc-cons-threshold (* 100 1024 1024) read-process-output-max (* 1024 1024) treemacs-space-between-root-nodes nil company-idle-delay 0.5 company-minimum-prefix-length 1 lsp-idle-delay 0.1) (with-eval-after-load 'lsp-mode (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration) (yas-global-mode)) ;;; Packages that don't require configuration (rc/require 'scala-mode 'd-mode 'yaml-mode 'glsl-mode 'lua-mode 'less-css-mode 'graphviz-dot-mode 'clojure-mode 'cmake-mode 'rust-mode 'csharp-mode 'nim-mode 'jinja2-mode 'purescript-mode 'nix-mode 'dockerfile-mode 'toml-mode 'nginx-mode 'kotlin-mode 'php-mode 'racket-mode 'qml-mode 'ag 'elpy 'typescript-mode 'rfc-mode 'sml-mode ) (defun astyle-buffer (&optional justify) (interactive) (let ((saved-line-number (line-number-at-pos))) (shell-command-on-region (point-min) (point-max) "astyle --style=kr" nil t) (goto-line saved-line-number))) (add-hook 'simpc-mode-hook (lambda () (interactive) (setq-local fill-paragraph-function 'astyle-buffer))) (require 'compile) ;; pascalik.pas(24,44) Error: Can't evaluate constant expression compilation-error-regexp-alist-alist (add-to-list 'compilation-error-regexp-alist '("\\([a-zA-Z0-9\\.]+\\)(\\([0-9]+\\)\\(,\\([0-9]+\\)\\)?) \\(Warning:\\)?" 1 2 (4) (5))) (load-file custom-file)