;;; .emacs --- Config ;;; Commentary: ;;; Code: (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (package-initialize) (setq package-selected-packages '(meson-mode groovy-mode gradle-mode flycheck)) ;; use (package-install-selected-packages) to install the ones above ;; show matching parentheses (and other characters) (show-paren-mode t) ;; hide toolbar (tool-bar-mode -1) ;; hide tooltips (tooltip-mode -1) (setq ;; skip startup message inhibit-startup-message t ;; show line and column number in mode-line line-number-mode t column-number-mode t ;; increase undo undo-limit 200000 undo-strong-limit 300000 ;; enable visible bell visible-bell t ;; enable font lockmode global-font-lock-mode t font-lock-mode t font-lock-maximum-decoration t) ;; Force more unique buffer names (require 'uniquify) (setq uniquify-buffer-name-style 'post-forward-angle-brackets) ;; Clean the buffer list at midnight (require 'midnight) ;; Set clean-buffer-list delay to 1 day (setq clean-buffer-list-delay-general 1) (if (not (boundp 'clean-buffer-list-kill-regexps)) (setq clean-buffer-list-kill-regexps '())) ;; Add preprocessed buffers to the list (add-to-list 'clean-buffer-list-kill-regexps '("\\`\\*.*-preprocessed\\*\\'")) (setq ;; create backups make-backup-files t ;; don't ask to delete backup versions delete-old-versions t ;; use version control version-control t) ;; put all backup files in their own directory (let ((backup-dir "~/.emacs.d/backups/")) (make-directory backup-dir :parents) (setq backup-directory-alist `((".*" . ,backup-dir)))) ;; show buffer in frame title (setq frame-title-format "%b %* emacs") ;; frame parameters ;; frame size (add-to-list 'default-frame-alist '(width . 80)) (add-to-list 'default-frame-alist '(height . 36)) ;; tell WM that we really want those sizes (add-to-list 'default-frame-alist '(user-size . t)) ;; frame font and color (add-to-list 'default-frame-alist '(font . "-*-inconsolata-*-*-*-*-*-120-*-*-*-*-*")) (add-to-list 'default-frame-alist '(cursor-color . "green")) (add-to-list 'default-frame-alist '(foreground-color . "grey")) (add-to-list 'default-frame-alist '(background-color . "black")) (add-to-list 'default-frame-alist '(background-mode . "dark")) ;; default styles (setq-default ;; no tabs in indentation indent-tabs-mode nil ;; tab-width 4 tab-width 4 ;; c-basic-offset c-basic-offset 4 ;; show trailing whitespace show-trailing-whitespace t) ;; enable c warnings (global-cwarn-mode t) ;; auto inserts (eval-after-load 'autoinsert '(define-auto-insert '("\\.\\(hh\\|hxx\\|hpp\\)\\'" . "C++ header") '((upcase (mapconcat 'identity (split-string (file-name-nondirectory buffer-file-name) "[^a-zA-Z0-9]+") "_")) "#ifndef " str \n "#define " str \n \n _ \n \n "#endif // " str \n))) (eval-after-load 'autoinsert '(define-auto-insert '("\\.\\(CC?\\|cc\\|cxx\\|cpp\\|c++\\)\\'" . "C++ source") '(nil "#include \"common.hh\"" \n \n (let ((base (file-name-sans-extension buffer-file-name))) (cond ((file-exists-p (concat base ".hh")) (concat "#include \"" (file-name-nondirectory (concat base ".hh")) "\"\n\n")))) > _ \n))) (eval-after-load 'autoinsert '(define-auto-insert '("\\.\\([Hh]\\)\\'" . "C header") '((upcase (mapconcat 'identity (split-string (file-name-nondirectory buffer-file-name) "[^a-zA-Z0-9]+") "_")) "#ifndef " str \n "#define " str \n \n _ \n \n "#endif /* " str " */" \n))) (eval-after-load 'autoinsert '(define-auto-insert '("\\.\\([Cc]\\)\\'" . "C source") '(nil "#include \"common.h\"" \n \n (let ((base (file-name-sans-extension buffer-file-name))) (cond ((file-exists-p (concat base ".h")) (concat "#include \"" (file-name-nondirectory (concat base ".h")) "\"\n\n")))) > _ \n))) (eval-after-load 'autoinsert '(define-auto-insert '("[Mm]akefile\\'" . "Makefile") '(nil ".PHONY: all clean" \n \n "all: " _ \n \n "clean:" \n \n))) (eval-after-load 'autoinsert '(define-auto-insert '("\\.\\(py\\)\\'" . "Python source") '(nil "#!/usr/bin/env python" \n \n _ \n))) (eval-after-load 'autoinsert '(define-auto-insert '("\\.\\(java\\)\\'" . "Java source") '((capitalize (file-name-base buffer-file-name)) "package " (mapconcat 'identity (member "com" (split-string (file-name-directory buffer-file-name) "/" t)) ".") ";" \n \n "class " str " {" \n _ \n str "() {" ?\n " " "}" ?\n ;; > should work here but it doesn't "}" \n))) (auto-insert-mode t) ;; don't ask before using auto-insert (setq-default auto-insert-query nil) ;; gpg (require 'epa-file) (epa-file-enable) ;; keys (global-set-key (kbd "C-c o") 'ff-find-other-file) ;; flycheck (require 'flycheck) (global-flycheck-mode) (c-add-style "common c" '("gnu" (c-basic-offset . 4) (c-offsets-alist . ((substatement-open . 0) (arglist-intro . ++) (innamespace . 0))))) (add-hook 'c-mode-common-hook (lambda() (c-set-style "common c"))) (c-add-style "default c++" '("common c" (c-basic-offset . 2))) (add-hook 'c++-mode-hook (lambda() (setq flycheck-clang-language-standard "c++11" flycheck-clang-definitions '("HAVE_CONFIG_H") flycheck-clang-include-path '("../src" "../build")) (c-set-style "default c++"))) ;; Opera Java hook (add-hook 'java-mode-hook (lambda() (when (and buffer-file-name (string-match "/opera/head" buffer-file-name)) (require 'flycheck-android-experimental) (setq flycheck-android-java-checkstyle-jar "../../chromium/src/third_party/checkstyle/checkstyle-6.5-all.jar" flycheck-android-java-checkstyle-path "tools/checkstyle" flycheck-android-java-checkstyle-config "checkstyle-config-android.xml" flycheck-android-java-checkstyle-properties "checkstyle.properties")))) ;;;