legacy-dotfiles/.emacs.d/init.el

512 lines
17 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;; -*- mode: Emacs-Lisp; -*-
(load "~/.emacs.d/ryuslash-load-path")
;;-----[ Defun ]---------------------------------------------------------
(defun oni/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 oni/what-major-mode (buffer-or-string)
"Find out which major-mode is currently used"
(with-current-buffer buffer-or-string major-mode))
(defun oni/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 oni/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 oni/init-show-outline ()
(interactive)
(occur ";;-----\\[ .* \\]-+")
(other-window 1))
(defun oni/replace-occurrences (from to)
(save-excursion
(goto-char (point-min))
(while (search-forward from nil t)
(replace-match to))))
(defun oni/replace-html-special-chars ()
(oni/replace-occurrences "é" "é"))
(defun oni/before-save-hook ()
(if (eq (oni/what-major-mode (current-buffer)) 'html-mode)
(oni/replace-html-special-chars))
(if (not (eq (oni/what-major-mode (current-buffer)) 'markdown-mode))
(delete-trailing-whitespace)))
(defun oni/after-save-hook ()
(let ((fname (buffer-file-name)))
(let ((suffix (file-name-extension fname)))
(if (string-equal suffix "el")
(byte-compile-file fname)))))
(defun oni/pretty-lambdas ()
(font-lock-add-keywords
nil `(("(\\(lambda\\>\\)"
(0 (progn
(compose-region (match-beginning 1)
(match-end 1)
)))))))
;;-----[ Theme ]---------------------------------------------------------
(require 'naquadah-theme)
(eval-after-load 'naquadah-theme
(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))))
;;-----[ Autopair ]------------------------------------------------------
(require 'autopair)
(autopair-global-mode t) ; automatically add the other delimiter
(setq autopair-skip-criteria 'always
autopair-autowrap t
autopair-blink nil)
(setq-default autopair-dont-pair '(:string (?\' ?\") :comment (?\')))
;;-----[ Column marker ]-------------------------------------------------
(require 'column-marker)
(defun set-column-markers (cm1 cm2)
(column-marker-1 cm1)
(column-marker-2 cm2))
;;-----[ Prog mode ]-----------------------------------------------------
(defconst integer-regex-1
(eval-when-compile
(concat "\\b\\(0[xX][0-9a-fA-F]+[lL]?\\|[0-9]+\\.?[0-9]*\\([eE][-+]?"
"[0-9]+\\)?\\([lL]\\|[fF]\\|[dD]\\)?\\)\\b")))
(defconst integer-regex-2
(eval-when-compile
(concat "\\b\\(\\.[0-9]+\\([eE][-+]?[0-9]+\\)?\\([lL]\\|[fF]\\|[dD]"
"\\)?\\)\\b")))
(defun oni/prog-mode-hook ()
(font-lock-add-keywords
nil
`((,integer-regex-1 0 font-lock-constant-face)
(,integer-regex-2 0 font-lock-constant-face)))
(rainbow-delimiters-mode)
(oni/pretty-lambdas)
(set-column-markers 73 81))
(if (>= emacs-major-version 24)
(add-hook 'prog-mode-hook 'oni/prog-mode-hook)
(add-hook 'c-mode-common-hook 'oni/prog-mode-hook)
(add-hook 'go-mode-hook 'oni/prog-mode-hook)
(add-hook 'emacs-lisp-mode-hook 'oni/prog-mode-hook))
;;-----[ HTML mode ]-----------------------------------------------------
(defun oni/html-mode-hook ()
(set-column-markers 73 81)
(setq fill-column 73))
(eval-after-load "sgml-mode"
(progn
(font-lock-add-keywords
'html-mode
'(("{\\(\\*.*\\*\\)}" 1 font-comment-face)
("{\\/?\\(extends\\|block\\|foreach\\(else\\)?\\|if\\|else\\)"
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)))))
(add-hook 'html-mode-hook 'oni/html-mode-hook)
(add-to-list 'auto-mode-alist '("\\.tpl$" . html-mode))
;;-----[ Org mode ]------------------------------------------------------
(require 'org-crypt)
(require 'org-publish)
(defun oni/org-mode-hook ()
(turn-on-flyspell)
(turn-on-auto-fill))
(setq
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-outline-path-complete-in-steps t
org-return-follows-link t
org-log-into-drawer t
org-todo-keywords '((sequence "TODO(t)"
"IN PROGRESS(p)"
"WAITING(w@/!)"
"|"
"DONE(d!/!)"
"CANCELLED(c@/!)"))
org-refile-targets '((org-agenda-files :maxlevel . 5)
(nil :maxlevel . 5))
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)))
(add-to-list 'auto-mode-alist '("\\.commitmsg$" . org-mode))
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-ca" 'org-agenda)
(add-hook 'org-mode-hook 'oni/org-mode-hook)
(org-crypt-use-before-save-magic)
;;-----[ Rainbow delimiters ]--------------------------------------------
(require 'rainbow-delimiters)
(setq rainbow-delimiters-max-face-count 8)
;;-----[ Uniquify ]------------------------------------------------------
(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward)
;;-----[ Go mode ]-------------------------------------------------------
(defun oni/go-mode-hook ()
(turn-off-auto-fill))
(autoload 'go-mode "go-mode" "Major mode for google go" t)
(autoload 'gofmt "go-mode" "" t)
(autoload 'go-fmt-before-save "go-mode" "" t)
(add-to-list 'auto-mode-alist '("\\.go$" . go-mode))
(add-hook 'go-mode-hook 'oni/go-mode-hook)
;;-----[ Htmlize ]-------------------------------------------------------
(require 'htmlize)
(setq htmlize-output-type 'inline-css)
;;-----[ Git ]-----------------------------------------------------------
(require 'git)
;;-----[ Markdown mode ]-------------------------------------------------
(defun oni/markdown-mode-hook ()
(whitespace-mode 1)
(turn-on-auto-fill))
(autoload 'markdown-mode "markdown-mode" "Major mode for Markdown" t)
(setq whitespace-style '(face trailing)) ; For use with markdown mode
(add-to-list 'auto-mode-alist '("\\.m\\(ark\\)?do?wn$". markdown-mode))
(add-hook 'markdown-mode-hook 'oni/markdown-mode-hook)
;;-----[ Xmodmap mode ]--------------------------------------------------
(autoload 'xmodmap-mode "xmodmap-mode" "Major mode for xmodmap" t)
(add-to-list 'auto-mode-alist
'("\\.[xX]modmap\\(rc\\)?$" . xmodmap-mode))
;;-----[ Gtags ]---------------------------------------------------------
;; http://emacs-fu.blogspot.com/2009/01/navigating-through-source-code-using.html
(defun oni/gtags-create-or-update ()
"create or update the gnu global tag file"
(interactive)
(if (not (= 0 (call-process "global" nil nil nil " -p"))) ; tagfile
(let ((olddir default-directory) ; doesn't exist?
(topdir (read-directory-name
"gtags: top of source tree:" default-directory)))
(cd topdir)
(shell-command "gtags && echo 'created tagfile'")
(cd olddir)) ; restore
;; tagfile already exists; update it
(shell-command "global -u && echo 'updated tagfile'")))
(defun oni/gtags-mode-hook ()
(local-set-key "\M-," 'gtags-find-tag)
(local-set-key "\M-." 'gtags-find-rtag))
(autoload 'gtags-mode "gtags" "Minor mode for using gtags" t)
(add-hook 'gtags-mode-hook 'oni/gtags-mode-hook)
;;-----[ C mode ]--------------------------------------------------------
(defun oni/c-mode-common-hook ()
(gtags-mode t)
(oni/gtags-create-or-update))
(defun oni/c-mode-hook ()
(local-set-key [f8] 'oni/c-toggle-header-source)
(local-set-key [f9] 'compile)
(local-set-key [C-m] 'newline-and-indent)
(local-set-key [C-return] 'newline))
(add-hook 'c-mode-common-hook 'oni/c-mode-common-hook)
(add-hook 'c-mode-hook 'oni/c-mode-hook)
;;-----[ PHP mode ]------------------------------------------------------
(defconst php-outline-regex
(eval-when-compile
(concat "\\(function .*(\\|\\(public\\|private\\|protected\\)\\( "
"static\\)? \\$\\|class \\sw\\)")))
(defun oni/php-show-outline ()
(interactive)
(occur php-outline-regex))
(defun oni/php-mode-hook ()
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-close '0)
(local-set-key [f6] 'comment-line)
(local-set-key [f7] 'oni/php-show-outline)
(local-set-key [M-S-up] 'flymake-goto-prev-error)
(local-set-key [M-S-down] 'flymake-goto-next-error)
(set-column-markers 76 81)
(flymake-mode 1))
(eval-after-load "php-mode"
(progn
;; 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)))
(autoload 'php-mode "php-mode" "Major mode for PHP" t)
(setq-default php-mode-warn-if-mumamo-off nil) ; don't warn me about this
(setq php-mode-force-pear t)
(add-to-list 'auto-mode-alist '("\\.php[345]?$" . php-mode))
(add-hook 'php-mode-hook 'oni/php-mode-hook)
;;-----[ bidi ]----------------------------------------------------------
(setq-default bidi-display-reordering nil)
;;-----[ Message ]-------------------------------------------------------
(defun oni/message-mode-hook ()
(turn-on-auto-fill)
(turn-on-flyspell)
(ispell-change-dictionary (read-string "New dictionary: ")))
(add-hook 'message-mode-hook 'oni/message-mode-hook)
;;-----[ Gnus ]----------------------------------------------------------
(setq gnus-init-file "~/.emacs.d/gnus")
;;-----[ Jabber ]--------------------------------------------------------
(require 'jabber-autoloads)
(setq jabber-account-list
'(("ryuslash@gmail.com"
(:network-server . "talk.google.com")
(:connection-type . ssl))))
;;-----[ X11 ]-----------------------------------------------------------
(when window-system
(setq linum-format " %d")
(global-unset-key "\C-z"))
;;-----[ CLI ]-----------------------------------------------------------
(when (not window-system)
(setq linum-format "%d "))
;;-----[ Texinfo ]-------------------------------------------------------
(add-hook 'texinfo-mode-hook 'turn-on-auto-fill)
;;-----[ Dot ]-----------------------------------------------------------
(autoload 'graphviz-dot-mode "graphviz-dot-mode" "Major mode for dot" t)
(add-to-list 'auto-mode-alist '("\\.dot$" . graphviz-dot-mode))
;;-----[ Cmake ]---------------------------------------------------------
(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)")
(autoload 'cmake-mode "cmake-mode" "Major mode for CMake" t)
(add-to-list 'auto-mode-alist '("CMakeLists\\.txt$" . cmake-mode))
(add-to-list 'auto-mode-alist '("\\.cmake$" . cmake-mode))
;;-----[ Rainbow ]-------------------------------------------------------
(autoload 'rainbow-mode "rainbow-mode" "Minor mode for colors" t)
;;-----[ Git-commit mode ]-----------------------------------------------
(autoload 'git-commit-mode "git-commit" "" t)
(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . git-commit-mode))
(add-hook 'git-commit-mode-hook 'auto-fill-mode)
;;-----[ Ido ]-----------------------------------------------------------
(ido-mode t)
(setq ido-save-directory-list-file nil)
(setq ido-auto-merge-delay-time 2)
;;-----[ Js mode ]-------------------------------------------------------
(add-to-list 'auto-mode-alist '("\\.js\\(on\\)?$" . js-mode))
;;-----[ CSS mode ]------------------------------------------------------
(add-to-list 'auto-mode-alist '("\\.css$" . css-mode))
;;-----[ Misc ]----------------------------------------------------------
(defun oni/reload-buffer
(interactive)
(revert-buffer nil t nil))
(defvar font-lock-operator-face 'font-lock-operator-face)
(defvar font-lock-end-statement 'font-lock-end-statement)
(setq-default indent-tabs-mode nil)
(setq-default truncate-lines t)
(setq-default tab-width 4)
(setq-default require-final-newline t)
(setq inhibit-startup-message t)
(setq inhibit-default-init t)
(setq scroll-conservatively 101)
(setq browse-url-browser-function 'browse-url-generic)
(setq browse-url-generic-program (getenv "BROWSER"))
(setq uniquify-buffer-name-style 'reverse)
(setq jit-lock-defer-time 0.2)
(setq mouse-autoselect-window t)
(setq pop-up-windows nil)
(setq frame-title-format '(:eval (concat "emacs: " (buffer-name))))
(setq backup-directory-alist `((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
`((".*" ,temporary-file-directory t)))
(setq default-frame-alist
(append '((font . "DejaVu Sans Mono-11:antialias=true"))))
(setq initial-frame-alist
(append '((font . "DejaVu Sans Mono-11:antialias=true"))))
(fset 'yes-or-no-p 'y-or-n-p)
(tool-bar-mode -1)
(menu-bar-mode -1)
(line-number-mode -1)
(global-linum-mode t)
(column-number-mode t)
(global-font-lock-mode t)
(delete-selection-mode t)
(show-paren-mode t)
(add-to-list 'compilation-finish-functions 'oni/my-comp-finish-function)
(global-set-key "\C-m" 'newline-and-indent)
(global-set-key (kbd "C-x n r") 'narrow-to-region)
(global-set-key [f5] 'oni/reload-buffer)
(global-set-key [M-left] 'windmove-left)
(global-set-key [M-right] 'windmove-right)
(global-set-key [M-up] 'windmove-up)
(global-set-key [M-down] 'windmove-down)
(add-hook 'before-save-hook 'oni/before-save-hook)
(add-hook 'after-save-hook 'oni/after-save-hook)
(add-hook 'css-mode-hook 'rainbow-mode)
(define-skeleton myaethon-set-varchar-docstring
"A docstring for a varchar setter"
""
"\/* Setter for the "
(skeleton-read "name: ")
" column\n"
"\n"
'(indent-according-to-mode)
"$value: string, no longer than "
(skeleton-read "len: ")
" characters */"
'(fill-paragraph))
(define-skeleton myaethon-set-array-varchar-docstring
"A docstring for an array/varchar setter"
""
'(setq name (skeleton-read "name: "))
'(setq len (string-to-number (skeleton-read "length: ")))
'(setq size (floor (/ (- len 1) 2)))
"/* Setter for the "
name
" column\n"
"\n"
'(indent-according-to-mode)
"$value: array, with no more than "
(number-to-string size)
" elements; string, no langer than "
(number-to-string len)
" characters */"
'(fill-paragraph))
(define-skeleton myaethon-simple-entity
"A basic database entity"
""
'(setq name (skeleton-read "Name: "))
"<?php\n"
"require_once('classes/dbobject.php');\n"
"\n"
"/* Entity for the " (downcase name) " table */\n"
"class " name " extends DB_Object\n"
"{\n"
"/* Table to select data from */\n"
"protected static $tables = '" (downcase name) "';\n"
"\n"
"/* Get the name of this class\n"
"--\n"
"ret: __CLASS__ */\n"
"protected static function get_class_name()\n"
"{\n"
"return __CLASS__;\n"
"}\n"
"\n"
"public function update()\n"
"{\n"
"throw new Exception('Not Implemented.');\n"
"}\n"
"\n"
"public function insert()\n"
"{\n"
"throw new Exception('Not Implemented.');\n"
"}\n"
"}\n"
"\n"
"?>\n"
'(indent-region (point-min) (point-max)))
(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 file
(setq custom-file "~/.emacs.d/custom.el")
(if (file-exists-p custom-file)
(load custom-file))
(defvar home-file "~/wiki.info" "File to open when starting")
(if (file-exists-p home-file)
(info home-file))