summaryrefslogtreecommitdiff
path: root/emacs-stark
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@opera.com>2017-09-21 15:56:23 +0200
committerJoel Klinghed <the_jk@opera.com>2017-09-21 15:56:23 +0200
commite389fcf836b82a004aa1ffd261d8a3a473544de0 (patch)
treeb1793a03ecc000bcb4072057a2225ed410bbeeab /emacs-stark
Add .emacs for stark
Diffstat (limited to 'emacs-stark')
-rw-r--r--emacs-stark320
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))))
+