From 3221a435c8c1f668fc41c6acd327d27407896e27 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Wed, 25 Jul 2018 21:54:31 +0200 Subject: Add config for stardust --- emacs-stardust | 347 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 347 insertions(+) create mode 100644 emacs-stardust diff --git a/emacs-stardust b/emacs-stardust new file mode 100644 index 0000000..1fa251e --- /dev/null +++ b/emacs-stardust @@ -0,0 +1,347 @@ +;;; .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 flycheck)) +;; use (package-install-selected-packages) to install the ones above + +;; show matching parentheses (and other characters) +(show-paren-mode t) + +;; 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")) + +;; Make man open in full frame instead of always creating half a frame +(set-variable 'Man-notify-method (quote pushy)) + +;; 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 + "#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") + '((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) +(global-set-key [?\C-x ?\t] 'toggle-selected-frame-width) + +;; flycheck +(require 'flycheck) +(global-flycheck-mode) + +;; replace ch alias fro grep with cchh alias, ie if starting with a ".h" file +;; you might still want to search in cc files +(eval-after-load "grep" + '(setf (cdr (assoc "ch" grep-files-aliases)) + (cdr (assoc "cchh" grep-files-aliases)))) + +(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))) + +(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)))) + +(make-variable-buffer-local 'flycheck-clang-definitions) +(make-variable-buffer-local 'flycheck-clang-include-path) +(make-variable-buffer-local 'flycheck-clang-language-standard) +(make-variable-buffer-local 'flycheck-clang-warnings) + +(add-hook 'c++-mode-hook + (lambda() + (setq flycheck-clang-language-standard "c++14" + flycheck-clang-definitions '("HAVE_CONFIG_H") + flycheck-clang-include-path + '("../src" "../build")) + (c-set-style "default c++") + (when (and buffer-file-name + (string-match "/source/monmon/" buffer-file-name)) + (setq flycheck-clang-include-path + '("../src" "../build" + "/usr/include/cairo" + "/usr/include/pango-1.0" + "/usr/include/pixman-1" + "/usr/include/freetype2" + "/usr/include/libpng16" + "/usr/include/harfbuzz" + "/usr/include/glib-2.0" + "/usr/lib/glib-2.0/include" + "/usr/lib/icecream/include"))) + (when (and buffer-file-name + (string-match "/source/sawmill-0.5/" buffer-file-name)) + (setq flycheck-clang-include-path + '("../src" "../build" + "/usr/include/librsvg-2.0" + "/usr/include/gdk-pixbuf-2.0" + "/usr/include/cairo" + "/usr/include/pixman-1" + "/usr/include/freetype2" + "/usr/include/libpng16" + "/usr/include/harfbuzz" + "/usr/include/glib-2.0" + "/usr/lib/glib-2.0/include" + "../subprojects/googletest-release-1.8.0/googletest/include" + "../subprojects/googletest-release-1.8.0/googlemock/include" + ))) + ;; Chromium hook + (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-include-path) + (setq flycheck-clang-language-standard "c++14" + flycheck-clang-definitions (list "OS_ANDROID") + flycheck-clang-warnings (list "no-unused-parameter") + flycheck-clang-include-path (list base + (concat base "/out_gradle/BetaArm7Debug/gen") + (concat base "/out_gradle/BetaArm7Release/gen")))) + (require 'google-c-style) + (c-add-style "Google" google-c-style t)) + ;; ofa hook + (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++14" + flycheck-clang-definitions (list "OS_ANDROID") + flycheck-clang-warnings (list "no-unused-parameter") + flycheck-clang-include-path (list base (concat base "/../../chromium/src") + (concat base "/../../chromium/src/third_party/re2/src") + (concat base "/../../chromium/src/out_gradle/BetaArm7Debug/gen") + (concat base "/../../chromium/src/out_gradle/BetaArm7Release/gen")))) + (require 'google-c-style) + (c-add-style "Google" google-c-style t)))) + +;; 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-8.0-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" + flycheck-android-java-variant + "devArm7Debug" + flycheck-android-java-skip-gen t) + (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)))) + +;;; -- cgit v1.2.3-70-g09d2