;; -*- mode: Emacs-Lisp; -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LOAD-PATHS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'load-path "~/.emacs.d/elisp") (add-to-list 'load-path "~/.emacs.d/naquadah-theme") (add-to-list 'load-path "~/.emacs.d/elisp/markdown-mode") (add-to-list 'load-path "~/.emacs.d/elisp/git-commit-mode") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; REQUIRES ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'naquadah-theme) (require 'autopair) (require 'column-marker) (require 'git-commit) (require 'org-crypt) (require 'rainbow-delimiters) (require 'uniquify) (require 'server) (require 'org-publish) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AUTOLOADS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (autoload 'vala-mode "vala-mode" "A Major mode for editing Vala files" t) (autoload 'csharp-mode "csharp-mode" "A Major mode for editing C# files" t) (autoload 'javascript-mode "javascript" "A Major mode for editing JavaScript files" t) (autoload 'sqlplus-mode "sqlplus" "A Major mode for communicating with Oracle" t) (autoload 'batch-mode "batch-mode" "A Major mode for editing Batch files" t) (autoload 'lua-mode "lua-mode" "A Major mode for editing Lua files" t) (autoload 'php-mode "php-mode-improved" "A Major mode for editing PHP files" t) (autoload 'graphviz-dot-mode "graphviz-dot-mode" "A Major mode for editing graphviz dot files" t) (autoload 'cmake-mode "cmake-mode" "A major-mode for editing CMake sources" t) (autoload 'markdown-mode "markdown-mode" "Major mode for editing Markdown files" t) (autoload 'rainbow-mode "rainbow-mode" "A Minor mode for showing colors inline" t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; DEFUNS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun what-face (pos) "Find out which face the current position uses" (interactive "d") (let ((face (or (get-char-property (point) 'read-face-name) (get-char-property (point) 'face)))) (if face (message "Face: %s" face) (message "No face at %d" pos)))) (defun my-comp-finish-function (buf str) "Don't show compilation window if everything went ok" (if (string-match "exited abnormally" str) ;; there were errors (message "compilation errors, press C-x ` to visit") ;; no errors, make the compilation window go away in 0.5 seconds (run-at-time 0.5 nil 'delete-windows-on buf) (message "NO COMPILATION ERRORS!"))) (defun fullscreen () "Fill the entire screen with emacs" (interactive) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0)) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))) (defun c-toggle-header-source () "Toggle between a C source and header file" (interactive) (let ((ext (file-name-extension (buffer-file-name))) (noext (file-name-sans-extension (buffer-file-name)))) (if (string= (substring ext 0 1) "c") (find-file (concat noext ".h")) (find-file (concat noext ".c"))))) (defun browse-to-current-file () "Show current file in browser" (interactive) (browse-url buffer-file-name)) (defun comment-line () "Toggle comment on a line" (interactive) (save-excursion (beginning-of-line) (insert "//"))) (defun add-php-keywords () "Designed for c and c-style languages Currently adds | & ! . + = - / % * , < > ? : ->" ;; Add ! at the beginning of font lock (font-lock-add-keywords 'php-mode '(("\\([!]\\|\\=>\\)" 1 font-lock-operator-face))) ;; Add the rest at the end of font lock (font-lock-add-keywords 'php-mode '(("\\(->\\|[|.+=&/%*,:?<>-]\\)" 1 font-lock-operator-face) ("\\(;\\)" 1 font-lock-end-statement)) 1)) (defun add-html-keywords () "Designed for html, show some smarty tags" (font-lock-add-keywords 'html-mode '(("{\\(\\*.*\\*\\)}" 1 font-comment-face) ("{\\/?\\(extends\\|block\\|foreach\\|if\\)" 1 font-lock-builtin-face) ("\\$\\(\\(?:\\sw\\|\\s_\\)+\\)\\(?:|\\(\\(?:\\sw\\|\\s_\\)+\\):\\)" (1 font-lock-variable-name-face) (2 font-lock-function-name-face)) ("\\$\\(\\(?:\\sw\\|\\s_\\)+\\)" 1 font-lock-variable-name-face) ("{\\(\\(?:\\sw\\|\\s_\\)+\\).*}" 1 font-lock-function-name-face)))) (defun buffer-major-mode (buffer-or-string) "Find out which major-mode is currently used" (with-current-buffer buffer-or-string major-mode)) (defun set-column-marker () "Default column markers" (column-marker-1 73) (column-marker-2 81)) (defun setup-system-frame-colours (&rest frame) (let ((f (if (car frame) (car frame) (selected-frame)))) (progn (set-frame-font "-*-tamsyn-medium-*-*-*-15-*-*-*-*-80-*-*")))) (defun show-init-sections () (interactive) (occur ";;\s +.*\s +;;") (other-window 1)) (defun list-functions () (interactive) (occur "\(?:\(?:private\|protected\|public\) \)?function \(?:\sw\)+(\sw*)")) (defun insert-init-title (title width) (interactive "stitle: \nnwidth: ") (insert-char ?\; width) (insert "\n;;") (insert-char ?\s (floor (/ (- (- width 4.0) (length title)) 2))) (insert title) (insert-char ?\s (ceiling (/ (- (- width 4.0) (length title)) 2))) (insert ";;\n") (insert-char ?\; width)) (defun x-init () "Start ide-skel and set some keys") (defun cli-init () "Add a space to the linum column" (setq linum-format "%d ")) (defun on-before-save () (if (not (eq (buffer-major-mode (current-buffer)) 'markdown-mode)) (delete-trailing-whitespace))) (defun on-after-save () (let ((fname (buffer-file-name))) (let ((suffix (file-name-extension fname))) (if (string-equal suffix "el") (byte-compile-file fname))))) (defun on-c-mode () (local-set-key [f8] 'c-toggle-header-source) (local-set-key [f9] 'compile) (local-set-key [C-m] 'newline-and-indent) (local-set-key [C-return] 'newline) (set-column-marker) (rainbow-delimiters-mode)) (defun on-emacs-lisp-mode () (set-column-marker) (rainbow-delimiters-mode)) (defun on-html-mode () (local-set-key [f9] 'browse-to-current-file) (auto-fill-mode) (set-column-marker)) (defun on-markdown-mode () (whitespace-mode) (auto-fill-mode)) (defun on-org-mode () (flyspell-mode 1) (auto-fill-mode 1)) (defun on-php-mode () (defvar php-warn-if-mumamo-off nil) (setq case-fold-search t) (c-set-offset 'arglist-intro '+) (c-set-offset 'arglist-close '0) (column-marker-1 76) (column-marker-2 81) (local-set-key [f6] 'comment-line)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; VARIABLES ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar font-lock-operator-face 'font-lock-operator-face) (defvar font-lock-end-statement 'font-lock-end-statement) (defadvice server-create-window-system-frame (after set-system-frame-colours ()) "Set custom frame colours when creating the first frame on a display" (message "Running after frame-initialize") (setup-system-frame-colours)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; FILE ASSOCIATIONS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'auto-mode-alist '("\\.vala$" . vala-mode)) (add-to-list 'auto-mode-alist '("\\.vapi$" . vala-mode)) (add-to-list 'auto-mode-alist '("\\.cs$" . csharp-mode)) (add-to-list 'auto-mode-alist '("\\.bat$" . batch-mode)) (add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode)) (add-to-list 'auto-mode-alist '("\\.php[345]?$" . php-mode)) (add-to-list 'auto-mode-alist '("\\.js\\(on\\)?$" . javascript-mode)) (add-to-list 'auto-mode-alist '("\\.m\\(ark\\)?do?wn$". markdown-mode)) (add-to-list 'auto-mode-alist '("CMakeLists\\.txt$" . cmake-mode)) (add-to-list 'auto-mode-alist '("\\.cmake$" . cmake-mode)) (add-to-list 'auto-mode-alist '("\\.css$" . css-mode)) (add-to-list 'auto-mode-alist '("mutt-cloud-" . message-mode)) (add-to-list 'file-coding-system-alist '("\\.vala$" . utf-8)) (add-to-list 'file-coding-system-alist '("\\.vapi$" . utf-8)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; KEYBINDS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (global-set-key "\C-m" 'newline-and-indent) (global-set-key (kbd "C-x n r") 'narrow-to-region) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-cc" 'org-capture) (global-set-key "\C-ca" 'org-agenda) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; THEME SETTINGS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (naquadah-theme-set-faces 'naquadah ;; markdown-mode '(markdown-link-face (:inherit 'link)) '(markdown-header-face-1 (:inherit 'org-level-1)) '(markdown-header-face-2 (:inherit 'org-level-2)) '(markdown-header-face-3 (:inherit 'org-level-3)) '(markdown-header-face-4 (:inherit 'org-level-4)) '(markdown-header-face-5 (:inherit 'org-level-5)) '(markdown-header-face-6 (:inherit 'org-level-6))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; SETTINGS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq-default indent-tabs-mode nil) ; spaces, no tabs (setq inhibit-startup-message t require-final-newline t inhibit-default-init t scroll-conservatively 101 ; scroll only one line browse-url-browser-function 'browse-url-generic browse-url-generic-program "conkeror" whitespace-style '(face trailing) uniquify-buffer-name-style 'reverse org-confirm-babel-evaluate nil org-tags-exclude-from-inheritance '("crypt") org-crypt-key "33E8CC1CC4" org-use-fast-todo-selection t org-default-notes-file (concat org-directory "/notes.org") org-ditaa-jar-path "/usr/share/java/ditaa/ditaa-0_9.jar" jit-lock-defer-time 0.2 frame-title-format '(:eval (concat "emacs: " (buffer-name))) backup-directory-alist ; backup file location `((".*" . ,temporary-file-directory)) auto-save-file-name-transforms ; autosave file location `((".*" ,temporary-file-directory t)) default-frame-alist ; default frame settings (append '((font . "DejaVu Sans Mono-10:antialias=true"))) org-todo-keywords '((sequence "TODO(t)" "IN PROGRESS(p)" "WAITING(w@/!)" "|" "DONE(d!/!)" "CANCELLED(c@/!)")) org-babel-load-languages '((ditaa . t)) org-refile-targets '((org-agenda-files :maxlevel . 5) (nil :maxlevel . 5)) org-outline-path-complete-in-steps t org-todo-keyword-faces '(("TODO" :foreground "red" :weight bold) ("IN PROGRESS" :foreground "yellow" :weight bold) ("DONE" :foreground "forest green" :weight bold) ("WAITING" :foreground "orange" :weight bold) ("CANCELLED" :foreground "orangered" :weight bold)) org-publish-project-alist '(("lxcoding-docs" :base-directory "~/devel/lxcoding-docs/" :base-extension "org" :publishing-directory "~/lxcoding-docs-test/" :recursive t :publishing-function org-publish-org-to-html :headline-levels :auto-preamble t :auto-sitemap t :sitemap-filename "sitemap.org" :sitemap-title "docs sitemap"))) (if window-system (x-init) (cli-init)) (fset 'yes-or-no-p 'y-or-n-p) ; switch yes or no to y or n (tool-bar-mode -1) ; no toolbar (menu-bar-mode -1) ; no menubar (scroll-bar-mode -1) ; no scrollbars (line-number-mode -1) ; don't show line number in splitter (global-linum-mode t) ; Show line numbers in gutter (column-number-mode t) ; show column number in splitter (global-font-lock-mode t) ; show syntax highlighting, old (delete-selection-mode t) ; delete selection upon typing (show-paren-mode t) ; show the opposite paren (autopair-global-mode) ; automatically add the other ; delimiter (add-to-list 'compilation-finish-functions 'my-comp-finish-function) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; HOOKS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-hook 'before-save-hook 'on-before-save) (add-hook 'after-save-hook 'on-after-save) (add-hook 'c-mode-hook 'on-c-mode) (add-hook 'emacs-lisp-mode-hook 'on-emacs-lisp-mode) (add-hook 'html-mode-hook 'on-html-mode) (add-hook 'markdown-mode-hook 'on-markdown-mode) (add-hook 'org-mode-hook 'on-org-mode) (add-hook 'php-mode-hook 'on-php-mode) (add-hook 'git-commit-mode-hook 'auto-fill-mode) (add-hook 'emacs-startup-hook 'fullscreen) (add-hook 'css-mode-hook 'rainbow-mode) (add-hook 'javascript-mode-hook 'rainbow-delimiters-mode) (add-hook 'python-mode-hook 'rainbow-delimiters-mode) (add-hook 'after-make-frame-functions 'setup-system-frame-colours t) (add-hook 'lisp-mode-hook 'rainbow-delimiters-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; SKELETONS ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-skeleton cmake-project-skeleton "A cmake project template file" "Name: " "cmake_minimum_required(VERSION 2.6)\n" "project(" str ")\n" "\n" "set(" str "_VERSION_MAJOR 0)\n" "set(" str "_VERSION_MINOR 0)\n" "set(" str "_VERSION_PATCH 0)\n" "\n" "set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR})\n" "add_subdirectory(src)") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; AUTORUN ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (org-crypt-use-before-save-magic) (ad-activate 'server-create-window-system-frame) (add-php-keywords) (add-html-keywords) (make-face 'font-lock-operator-face) (make-face 'font-lock-end-statement) (set-face-foreground 'font-lock-operator-face "#EDD400") (set-face-foreground 'font-lock-end-statement "#888A85") (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(org-agenda-files (quote ("~/documents/org/main.org"))) '(safe-local-variable-values (quote ((Mode . shell-script) (ispell-local-dictionary . nl))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) (put 'narrow-to-region 'disabled nil)