dot.emacs

This is my .emacs file

Download it .emacs or preview:

;; ##############################################################################
;; Frank Meffert's .emacs file
;; 2010-10-02: Beautifying a bit
;; ##############################################################################
 
;; ------------------------------------------------------------------ (load path)
(add-to-list 'load-path "~/.emacs.d/")
 
;; ------------------------------------------------------------------- (ido mode)
(require 'ido)
(ido-mode 1)
 
;; --------------------------------------------------------------- (line numbers)
(require 'linum)
(global-linum-mode 1)
(setq linum-ncols 4)
(setq linum-format (concat "%" (number-to-string linum-ncols) "d"))
 
;; -------------------------------------------------------------------- (tab bar)
(require 'tabbar)
(tabbar-mode)
(setq tabbar-buffer-groups-function
	  (lambda ()
		(list "All")))
(global-set-key [M-left] 'tabbar-backward)
(global-set-key [M-right] 'tabbar-forward)
 
(defun cur-buf-name ()
  "Get the name of the current buffer"
  (interactive)
  (buffer-name (current-buffer)))
 
(setq buf-name-rpl
	  '(("*Completions*" . "Completions")
		("cv.html" . "curricvitae")
		("foo.h" . "_FOO_H_")))
 
(defun rename-cur-buf ()
  "Renames the current buffer, if replacement is available in local list"
  (interactive)
  (let ((rpl (cdr (assoc (cur-buf-name) buf-name-rpl))))
	(if rpl
		(rename-buffer rpl))))
(add-hook 'find-file-hook 'rename-cur-buf)
 
;; (defun initial-rename ()
;;   (mapcar #'(lambda (buf)
;; 			  ()
 
;; --------------------------------------------------------------------- (col 80)
;; marks characters beyond column 80. Seriously: I need a solid line!
;(require 'column-marker)
;(add-hook 'foo-mode-hook (lambda () (interactive) (column-marker-1 80)))
 
;; ------------------------------------------------------------ (backup behavior)
;; do not make any backup files, because they suck!
(setq make-backup-files nil)
 
;; ------------------------------------------------------------------- (Doxymacs)
(require 'doxymacs)
(add-hook 'c-mode-common-hook'doxymacs-mode)
 
(setq doxymacs-file-comment-template
 '("/**" > n
   " * " (doxymacs-doxygen-command-char) "file   "
   (if (buffer-file-name)
       (file-name-nondirectory (buffer-file-name))
       "") > n
   " * " (doxymacs-doxygen-command-char) "author " (user-full-name) (doxymacs-user-mail-address) > n
   " * " (doxymacs-doxygen-command-char) "date   " (format-time-string "%A, %B %e, %Y") > n
   " * " > n
   " * " (doxymacs-doxygen-command-char) "brief  " > n
   " * " > n
   " */" > n))
 
(defun my-javadoc-return () 
  "Advanced C-m for Javadoc multiline comments.
   Inserts `*' at the beggining of the new line if 
   unless return was pressed outside the comment"
  (interactive)
  (setq last (point))
  (setq is-inside
	(if (search-backward "*/" nil t)
	  ;; there are some comment endings - search forward
	  (if (search-forward "/*" last t)
		't
	    'nil)
	  ;; it's the only comment - search backward
	  (goto-char last)
	  (if (search-backward "/*" nil t)
	    't
	    'nil)))
  ;; go to last char position
  (goto-char last)
  ;; the point is inside some comment, insert `*'
  (if is-inside
    (progn 
	  (insert "\n* ")
	  (indent-for-tab-command))
    ;; else insert only new-line
    (insert "\n")))
 
(add-hook 'c-mode-common-hook (lambda () 
  (local-set-key "\r" 'my-javadoc-return)))
 
;; ----------------------------------------------------------------- (Smart-HOME)
(defun smart-beginning-of-line ()
  "Forces the cursor to jump to the first none whitespace char of the current line when pressing HOME"
  (interactive)
  (let ((oldpos (point)))
    (back-to-indentation)
    (and (= oldpos (point))
         (beginning-of-line))))
(put 'smart-beginning-of-line 'CUA 'move)
(global-set-key [home] 'smart-beginning-of-line)
 
;; --------------------------------------------------- (resize window to 80 cols)
(defun win-eighty ()
  "Sets the width of the window to 80 columns"
  (interactive)
  (set-frame-height (selected-frame) (/ (- (x-display-pixel-height) 100) (frame-char-height)))
  (set-frame-width (selected-frame) (+ 81 linum-ncols)))
(add-hook 'after-init-hook 'win-eighty)
 
(defun win-dual ()
  "Splits the screen horizontally and sets the widthd of each window to 80 cols"
  (interactive)
  (set-frame-width (selected-frame) 175)
  (split-window-horizontally (+ 85 linum-ncols)))
 
;; ------------------------------------------------------- (custom set variables)
(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.
 '(column-number-mode t)
 '(user-full-name "Frank Meffert")
 '(user-mail-address "frank.meffert@gmail.com")
 '(cua-mode t nil (cua-base))
 '(custom-buffer-indent 4)
 '(delete-selection-mode nil)
 '(display-time-24hr-format t)
 '(display-time-day-and-date 1)
 '(display-time-mode t)
 '(global-font-lock-mode t nil (font-lock))
 '(inhibit-startup-buffer-menu t)
 '(inhibit-startup-screen t)
 '(pc-select-meta-moves-sexps t)
 '(pc-select-selection-keys-only t)
 '(pc-selection-mode t nil (pc-select))
 '(scroll-bar-mode (quote right))
 '(show-paren-mode t)
 '(standard-indent 4)
 '(uniquify-buffer-name-style (quote forward) nil (uniquify)))
 
;; ----------------------------------------------------------------------- (misc)
(setq-default tab-width 4)
(setq-default indent-tabs-mode t)
(setq c-basic-offset 4)
(setq frame-title-format (concat "Emacs <" user-login-name "@" system-name ">: <%b> %+%+ <%f>"))
 
;; Highlighting of the current line
(global-hl-line-mode 1)
(set-face-background 'hl-line "#E8F2FE")
(tool-bar-mode -1)
 
(defalias 'yes-or-no-p 'y-or-n-p)
(display-time)
(set-language-environment "Latin-1")
(put 'scroll-left 'disabled nil)
 
;; ---------------------------------------------------------- (LaF of the cursor)
;; Change cursor color according to mode
(setq djcb-read-only-color       "gray")
;; valid values are t, nil, box, hollow, bar, (bar . WIDTH), hbar,
;; (hbar. HEIGHT); see the docs for set-cursor-type
(setq djcb-read-only-cursor-type 'hbar)
(setq djcb-overwrite-color       "red")
(setq djcb-overwrite-cursor-type 'box)
(setq djcb-normal-color          "black")
(setq djcb-normal-cursor-type    'box)
 
;; ------------------------------------------------------------------------------
;; Helper functions
;; ------------------------------------------------------------------------------
(defun djcb-set-cursor-according-to-mode ()
  "change cursor color and type according to some minor modes."
  (cond
    (buffer-read-only
      (set-cursor-color djcb-read-only-color)
      (setq cursor-type djcb-read-only-cursor-type))
    (overwrite-mode
      (set-cursor-color djcb-overwrite-color)
      (setq cursor-type djcb-overwrite-cursor-type))
    (t 
      (set-cursor-color djcb-normal-color)
      (setq cursor-type djcb-normal-cursor-type))))
(add-hook 'post-command-hook 'djcb-set-cursor-according-to-mode)
 
(defun mouse-stay-and-copy (click)
  "leaves cursor at current position, allows to drag a region which 
is yanked at cursor position"
  (interactive "e")
  (let ((selected nil)
	(win (selected-window)))
    (save-excursion
      (mouse-drag-track click)
      (if mark-active
	  (progn (kill-new (buffer-substring (region-beginning) (region-end)))
		 (setq selected 1))))
    (select-window win)
    (if selected 
	(progn 
	  (if mark-active (delete-region (region-beginning) (region-end)))
	  (yank)
	  (redraw-display)))))
 
(defun mouse-stay-and-kill (click)
  "leaves cursor at current position, allows to drag a region which 
is moved to cursor position"
  (interactive "e")
  (let ((selected nil)
	(win (selected-window)))
    (save-excursion
      (mouse-drag-track click)
      (if mark-active 
	  (progn (kill-region (region-beginning) (region-end))
		 (setq selected t))))
    (select-window win)
    (if selected 
	(progn (if mark-active (delete-region (region-beginning) (region-end)))
	       (yank)
	       (redraw-display)))))
 
(defun mouse-stay-and-swap (click)
  "leaves cursor at current position, allows to drag a region which 
is swapped with the original selection"
  (interactive "e")
  (let ((selected nil)
	(win (selected-window))
	(obuf nil)
	(olen nil)
	(opos nil))
    (save-excursion
      (mouse-drag-track click)
      (if mark-active 
	  (progn (setq olen (- (region-end) (region-beginning)))
		 (kill-region (region-beginning) (region-end))
		 (setq obuf (current-buffer))
		 (setq opos (point))
		 (setq selected t))))
    (select-window win)
    (if selected
	(progn (if (and (eq obuf (current-buffer)) (> opos (point)))
		   (setq opos (+ opos olen 
				 (if mark-active (- (region-beginning) (region-end)) 0))))
	       (if mark-active
		   (kill-region (region-beginning) (region-end))
		 (kill-region (point) (point)))
	       (rotate-yank-pointer 1) (yank)
	       (set-buffer obuf) (goto-char opos)
	       (rotate-yank-pointer -1) (yank)
	       (redraw-display)))))
 
(defun mouse-yank-and-kill (click)
  "yanks selection at mouse click and kills original"
  (interactive "e")
  (if mark-active
      (let ((beg (region-beginning))
	    (end (region-end))
	    (pos (event-start click)))
	(kill-region beg end)
	(select-window (posn-window pos))
	(goto-char (posn-point pos))
	(yank))
    (mouse-set-point click)))
 
(defun my-query-replace (str1 str2)
  (interactive
   (let ((str (read-string "Query replace: " 
			   (if mark-active 
			       (let ((h (buffer-substring (point) (mark))))
				 (if (< (mark) (point)) (exchange-point-and-mark))
				 (kill-new h)
				 h)
			     ""))))
     (setq mark-active nil)
     (list str (read-string (format "Query replace: %s with: " str)))))
  (query-replace str1 str2 current-prefix-arg))
 
(defun my-query-replace-word (str1 str2)
  (interactive
   (let ((str (read-string "Query replace word: " 
			   (if mark-active 
			       (let ((h (buffer-substring (point) (mark))))
				 (if (< (mark) (point)) (exchange-point-and-mark))
				 (kill-new h)
				 (concat "\\<" (regexp-quote h) "\\>"))
			     ""))))
     (setq mark-active nil)
     (list str (read-string (format "Query replace word: %s with: " str)))))
  (query-replace-regexp str1 str2 current-prefix-arg))
 
(defun my-query-replace-regexp (str1 str2)
  (interactive
   (let ((str (read-string "Query replace regexp: " 
			   (if mark-active 
			       (let ((h (buffer-substring (point) (mark))))
				 (if (< (mark) (point)) (exchange-point-and-mark))
				 (kill-new h)
				 (regexp-quote h))
			     ""))))
     (setq mark-active nil)
     (list str (read-string (format "Query replace regexp: %s with: " str)))))
  (query-replace-regexp str1 str2 current-prefix-arg))
 
(defun convert-to-regexp-pattern (a o)
  (interactive "r")
  (let ((h (buffer-substring a o)))
    (delete-region a o)
    (insert (cond ((string-match "^\\s-+$" h) "\\(\\s-+\\)")
		  ((string-match "^[0-9]+$" h) "\\([0-9]+\\)")
		  ((string-match "^[A-Za-z_][0-9A-Za-z_]*$" h) "\\([A-Za-z_][0-9A-Za-z_]*\\)")
		  ((string-match "^\\S-+$" h) "\\(\\S-+\\)")
		  (t "\\(.+\\)")))))
 
;; ------------------------------------------------------------------------------
;; Key bindings
;; ------------------------------------------------------------------------------
(define-key global-map '[C-right] 'forward-sexp)
(define-key global-map '[C-left] 'backward-sexp)
(define-key global-map '[s-left] 'windmove-left)
(define-key global-map '[s-right] 'windmove-right)
(define-key global-map '[s-up] 'windmove-up)
(define-key global-map '[s-down] 'windmove-down)
(define-key global-map '[S-down-mouse-1] 'mouse-stay-and-copy)
(define-key global-map '[C-M-S-down-mouse-1] 'mouse-stay-and-swap)
(define-key global-map '[S-mouse-2] 'mouse-yank-and-kill)
(define-key global-map '[C-S-down-mouse-1] 'mouse-stay-and-kill)
;; replaced with windows key, see above
;;(define-key global-map '[M-down] (lambda () (interactive) (other-window 1)))
;;(define-key global-map '[M-up] (lambda () (interactive) (other-window -1)))
(define-key global-map "*"     'my-query-replace-regexp)
(define-key global-map "%"     'my-query-replace)
(define-key global-map "+"     'my-query-replace-word)
(define-key global-map "&"     'my-replace-string)
(define-key global-map "^" 'convert-to-regexp-pattern)
(define-key global-map "\C-a" 'mark-whole-buffer)
 
;; ------------------------------------------------------------------------------
;; Compilation
;; ------------------------------------------------------------------------------
(defvar current-compilation-buffer nil)
(define-key global-map "\215" 	;; META-RET; compile
  (lambda (prefix) (interactive "P")
    (condition-case nil (kill-compilation) (error nil))
    (if prefix (setq current-compilation-buffer (current-buffer)))
    (save-excursion 
      (set-buffer
       (if (buffer-live-p current-compilation-buffer)
           current-compilation-buffer (current-buffer)))
      (call-interactively 'compile))))
(define-key minibuffer-local-map "\215" 'exit-minibuffer)
(define-key minibuffer-local-map "#" 'minibuffer-keyboard-quit)
 
(define-key ctl-x-map  "." 
  '(lambda() (interactive)
     (condition-case nil (next-error 1)
       (error (condition-case nil (next-error 0) (error (next-error nil)))))))
 
(define-key ctl-x-map  "," 'previous-error)
 
;; ------------------------------------------------------------------------------
;; Debugger
;; ------------------------------------------------------------------------------
(defun gud-break-eval-cont (cmd)
  (interactive "sEnter command:")
  (comint-interrupt-subjob)
  (gud-basic-call cmd)
  (gud-cont nil))
 
(defun gud-gdb-reload ()
  (interactive)
  (let ((nm (buffer-name)))
    (if (string-match "^\\*...-\\(.+\\)\\*$" nm)
	(progn (gud-basic-call (format "file %s" (substring nm (match-beginning 1) (match-end 1))))
	(message "reloaded debugger file")))))
 
(setq gdb-mode-hook
      '((lambda ()
          (define-key gud-mode-map "s" 'gud-step)
          (define-key gud-mode-map '[f5] 'gud-step)
          (define-key gud-mode-map '[f6] 'gud-next)
          (define-key gud-mode-map '[f7] 'gud-finish)
          (define-key gud-mode-map '[f8] 'gud-cont)
          (define-key gud-mode-map '[f9] 'gud-up)
          (define-key gud-mode-map '[f10] 'gud-down)
 
          (define-key gud-mode-map "n" 'gud-next)
          (define-key gud-mode-map "k" 'gud-cont)
          (define-key gud-mode-map "e" 'gud-break-eval-cont)
          (define-key gud-mode-map "f" 'gud-finish)
          (define-key gud-mode-map "u" 'gud-up)
          (define-key gud-mode-map "d" 'gud-down)
          (define-key gud-mode-map "r" 'gud-gdb-reload)