diff options
Diffstat (limited to 'emacs-stark')
| -rw-r--r-- | emacs-stark | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/emacs-stark b/emacs-stark new file mode 100644 index 0000000..c2a47b9 --- /dev/null +++ b/emacs-stark @@ -0,0 +1,320 @@ +;;; .emacs --- Config + +;;; Commentary: + +;;; Code: + +;; support local packages +(add-to-list 'load-path "~/.emacs.d/site-lisp/") + +(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 . "-*-proggycleantt-medium-*-*-*-*-120-*-*-*-*-iso8859-1")) +(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")) + +;; Toggle frame width +(defun toggle-frame-width (frame) + "Toggle FRAME width between 100 and 80." + (when window-system + (let ((width (frame-width frame))) + (cond ((eq width 80) + (set-frame-width frame 100)) + (t + (set-frame-width frame 80)))))) + +(defun toggle-selected-frame-width () + "Toggle selected frame width between 100 and 80." + (interactive) + (toggle-frame-width (selected-frame))) + +;; 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 + "// -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-" \n + "//" \n + "// Copyright (C) 2017 Opera Software AS. All rights reserved." \n + "//" \n + "// This file is an original work developed by Opera Software." \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]+") "_")) + "// -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-" \n + "//" \n + "// Copyright (C) 2017 Opera Software AS. All rights reserved." \n + "//" \n + "// This file is an original work developed by Opera Software." \n + \n + "#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") + '((file-name-base buffer-file-name) + "// -*- Mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-" \n + "//" \n + "// Copyright (C) 2017 Opera Software AS. All rights reserved." \n + "//" \n + "// This file is an original work developed by Opera Software." \n + \n + "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) +(global-set-key [?\C-x ?\t] 'toggle-selected-frame-width) + +;; 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() + (make-local-variable 'flycheck-clang-language-standard) + (setq flycheck-clang-language-standard "c++11") + (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") + (require 'google-c-style) + (google-set-c-style) + (setq c-file-style "Google") + (c-set-offset 'arglist-intro '++) + (c-set-offset 'arglist-cont nil) + (c-set-offset 'arglist-cont-nonempty '++) + (setq indent-tabs-mode nil) + (setq c-basic-offset 4)))) + +(defun get-base-dir (path needle) + "Get base directory for PATH using NEEDLE to cut." + (let ((parts (split-string path "/" t))) + (let ((index (cl-position needle parts :from-end t :test 'equal))) + (if index + (concat "/" (mapconcat 'identity (seq-take parts (+ index 1)) "/")) + path)))) + +;; Chromium hook +(add-hook 'c++-mode-hook + (lambda() + (when (and buffer-file-name + (string-match "/chromium/src/" buffer-file-name)) + (let ((base (get-base-dir (file-name-directory buffer-file-name) "src"))) + (make-local-variable 'flycheck-clang-language-standard) + (make-local-variable 'flycheck-clang-definitions) + (make-local-variable 'flycheck-clang-include-path) + (setq flycheck-clang-language-standard "c++11" + flycheck-clang-definitions (list "OS_ANDROID") + flycheck-clang-include-path (list base + (concat base "/out_wam_armv7/Debug/gen") + (concat base "/out_wam_armv7/Release/gen")))) + (require 'google-c-style) + (c-add-style "Google" google-c-style t)))) + +;; ofa hook +(add-hook 'c++-mode-hook + (lambda() + (when (and buffer-file-name + (string-match "/mobile/mobile/" buffer-file-name)) + (let ((base (get-base-dir (file-name-directory buffer-file-name) "mobile"))) + (make-local-variable 'flycheck-clang-language-standard) + (make-local-variable 'flycheck-clang-definitions) + (make-local-variable 'flycheck-clang-include-path) + (setq flycheck-clang-language-standard "c++11" + flycheck-clang-definitions (list "OS_ANDROID") + flycheck-clang-include-path (list base (concat base "/../../chromium/src") + (concat base "/../../chromium/src/out_wam_armv7/Debug/gen") + (concat base "/../../chromium/src/out_wam_armv7/Release/gen")))) + (require 'google-c-style) + (c-add-style "Google" google-c-style t)))) + |
