legacy-dotfiles/.emacs.d/init.el
2011-09-19 20:16:12 +02:00

503 lines
18 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; -*-
(let ((default-directory "~/.emacs.d/"))
(normal-top-level-add-subdirs-to-load-path))
;;-----[ Defun ]---------------------------------------------------------
(defun ext/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 ext/what-major-mode (buffer-or-string)
"Find out which major-mode is currently used"
(with-current-buffer buffer-or-string major-mode))
(defun ext/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 ext/pretty-lambdas ()
(font-lock-add-keywords
nil `(("(\\(lambda\\>\\)"
(0 (progn
(compose-region (match-beginning 1)
(match-end 1)
)))))))
(defun ext/x-urgency-hint (frame arg &optional source)
(let* ((wm-hints (append (x-window-property
"WM_HINTS" frame "WM_HINTS"
(if source
source
(string-to-number
(frame-parameter frame 'outer-window-id)))
nil t) nil))
(flags (car wm-hints)))
(setcar wm-hints
(if arg
(logior flags #x00000100)
(logand flags #xFFFFFEFF)))
(x-change-window-property "WM_HINTS" wm-hints frame "WM_HINTS" 32 t)))
(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 (ext/what-major-mode (current-buffer)) 'html-mode)
(oni/replace-html-special-chars))
(if (not (eq (ext/what-major-mode (current-buffer)) 'markdown-mode))
(delete-trailing-whitespace)))
(defun oni/after-save-hook ()
(let* ((fname (buffer-file-name))
(suffix (file-name-extension fname)))
(if (string-equal suffix "el")
(byte-compile-file fname))))
;;-----[ 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))
'(ac-candidate-face (:inherit 'header-line :box nil))
'(ac-selection-face (:inherit 'hl-line :box nil))))
;;-----[ 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)))
(ext/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)
(global-rainbow-delimiters-mode)
;;-----[ 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")
;;-----[ Autosmiley ]----------------------------------------------------
(require 'autosmiley)
;;-----[ Jabber ]--------------------------------------------------------
(defvar ext/jabber-activity-jids-count 0)
(defun ext/jabber-urgency-hint ()
(let ((count (length jabber-activity-jids)))
(unless (= ext/jabber-activity-jids-count count)
(if (zerop count)
(ext/x-urgency-hint (selected-frame) nil)
(ext/x-urgency-hint (selected-frame) t))
(setq ext/jabber-activity-jids-count count))))
(defun oni/jabber-chat-mode-hook ()
(autosmiley-mode)
(local-set-key [S-return] 'newline)
(local-set-key [C-return] 'newline))
(when (require 'jabber-autoloads nil 'noerror)
(setq jabber-account-list
'(("ryuslash@gmail.com"
(:network-server . "talk.google.com")
(:connection-type . ssl))))
(setq jabber-history-enabled t)
(setq jabber-use-global-history nil)
(add-hook 'jabber-chat-mode-hook 'oni/jabber-chat-mode-hook)
(add-hook 'jabber-activity-update-hook 'ext/jabber-urgency-hint))
;;-----[ 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))
(add-hook 'css-mode-hook 'rainbow-mode)
;;-----[ ELPA ]----------------------------------------------------------
(setq package-archives
'(("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")))
;;-----[ Windmove ]------------------------------------------------------
(windmove-default-keybindings 'meta)
;;-----[ Autocomplete ]--------------------------------------------------
(when (require 'auto-complete-config nil 'noerror)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(setq ac-comphist-file "~/.emacs.d/ac-comphist.dat")
(ac-config-default))
;;-----[ Ide-skel ]------------------------------------------------------
(require 'ide-skel)
(global-set-key [f10] 'ide-skel-toggle-left-view-window)
(global-set-key [f11] 'ide-skel-toggle-bottom-view-window)
(global-set-key [f12] 'ide-skel-toggle-right-view-window)
;;-----[ 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 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:pixelsize=13"))))
(setq initial-frame-alist
(append '((font . "DejaVu Sans Mono:pixelsize=13"))))
(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 'ext/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)
(add-hook 'before-save-hook 'oni/before-save-hook)
(add-hook 'after-save-hook 'oni/after-save-hook)
(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))