This is my current .emacs file. As you can see it’s got lots of goodies – indentation styles when editing code, jumping between parentheses/if/endif keywords, special key-mappings, custom search commands and much more 🙂
(set-frame-position (selected-frame) 100 100) (set-background-color "NavyBlue") (set-foreground-color "Wheat") ;(set-cursor-color "Red") ;(set-cursor-color "Orchid") (set-cursor-color "CadetBlue") ;(set-cursor-color "Yellow") ;; Don't refuse to fontify big files (under 1 MB) (setq font-lock-maximum-size 1000000) ;(setq which-func-maximum-size 1000000)
;; Make the region visible ;----- (setq transient-mark-mode t)
;----- (pc-selection-mode) (show-paren-mode 1) (global-font-lock-mode t)
;;make home and end work like windows editors (define-key global-map [delete] 'delete-char) (define-key global-map [home] 'beginning-of-line) (define-key global-map [end] 'end-of-line) (define-key global-map [C-home] 'beginning-of-buffer) (define-key global-map [C-end] 'end-of-buffer)
;;make a little like windows or dev studio (define-key global-map [C-tab] 'other-window)
(global-set-key [(f1)] (lambda () (interactive) (manual-entry (current-word)))) (define-key global-map [f2] 'hippie-expand) ;(define-key global-map [f3] 'delete-other-windows) (define-key global-map [S-f3] 'split-window-vertically) (define-key global-map [C-f3] 'split-window-horizontally) (define-key global-map [M-f3] 'ffap) (define-key global-map [M-f4] 'save-buffers-kill-emacs) (define-key global-map [C-f4] 'kill-buffer) (define-key global-map [f4] 'which-func-mode) (define-key global-map [f5] 'execute-extended-command) (define-key global-map [f6] 'switch-to-buffer) (define-key global-map [f7] 'compile) (define-key global-map [f8] 'show-paren-mode) (define-key global-map [C-f8] 'backward-up-list) (define-key global-map [f9] 'call-last-kbd-macro) (define-key global-map [C-f12] 'save-buffer) (define-key global-map [f11] 'previous-error) (define-key global-map [f12] 'next-error)
(define-key global-map "\C-o" 'find-file) (define-key global-map "\C-j" 'goto-line) (global-set-key "\C-f" 'isearch-forward) ;(global-set-key "\C-q" 'kill-emacs) ;(define-key global-map [C-6] 'backward-up-list)
;(global-set-key "\C-6" 'backward-up-list) ;;(define-key global-map "\C-z" 'undo) ;;(defun other-window-back () (-1 other-window)) ;;(define-key global-map [C-S-iso-lefttab] 'other-window-back)
;;custom things to make operations a little easier
;(setq compile-command '("omake -W BUILD_TYPE=DEBUG_MD -D ARAXI_PPT_VOB_ROOT=d:\\PerforceDepot\\main" . 29))
;(setq compile-command '("/usr/bin/make -k " . 29))
;(load "cc-compile")
(fset 'lp-todo [?/ ?/ ?T ?O ?D ?O ?: ?\S- ]) (define-key global-map "\C-t" 'lp-todo)
(fset 'lp-separatorline [?/ ?/ ?\S- ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?= ?=]) ;(define-key global-map "\C-l" 'lp-separatorline) ;(define-key global-map "\C-a" 'lp-separatorline)
(setq tab-width 4) ;; obsolete?? (setq default-tab-width 4) ;; www broswer stuff ;(setq load-path(cons "~/mylist" load-path))
(load "cc-mode") (cua-mode 1) ;(load "cua-mode")
(defun dos2unix (buffer) "Automate M-% C-q C-m RET C-q C-j RET" (interactive "*b") (save-excursion (goto-char (point-min)) (while (search-forward (string ?\C-m) nil t) (replace-match (string ?\C-j) nil t))))
(defun close-all-buffers () (interactive) (mapc 'kill-buffer (buffer-list)))
;; Made by Joe Casadonte (joc)
(defun joc-bounce-sexp ()
"Will bounce between matching parens just like % in vi"
(interactive)
(let ((prev-char (char-to-string (preceding-char)))
(next-char (char-to-string (following-char))))
(cond ((string-match "[[{(<]" next-char) (forward-sexp 1))
((string-match "[\]})>]" prev-char) (backward-sexp 1))
(t (error "%s" "Not on a paren, brace, or bracket")))))
;(global-set-key [(control =)] 'joc-bounce-sexp) (global-set-key "\C-]" 'joc-bounce-sexp)
(defconst my-c-style
'("MYCSTYLE"
(c-basic-offset . 4)
(c-tab-always-indent . nil)
(c-offsets-alist . (
(access-label . 0)
(defun-open . 0)
(defun-block-intro . 4)
(statement-block-intro . 4)
(substatement . +)
(substatement-open . 0)
(brace-list-open . +)
(brace-list-intro . 0)
(statement-case-open . 4)
(statement-case-intro . 4)
(case-label . 4)
(class-open . 0)
(class-close . 0)
(topmost-intro . 0)
(label . 0)
(inline-open . 0)
))
(c-cleanup-list .
(brace-else-brace
scope-operator
empty-defun-braces
defun-close-semi))
)
"My C indentation style")
(defun my-c-mode-common-hook () ;; set up for my perferred indentation style, but only do it once (let ((my-style "MYCSTYLE")) (or (assoc my-style c-style-alist) (setq c-style-alist (cons my-c-style c-style-alist))) (c-set-style my-style)) ;; offset customizations not in my-style ;;(c-set-offset 'block-open 'c-adaptive-block-open) (c-set-offset 'member-init-intro (* 2 c-basic-offset))
;; keybindings for both C and C++. We can put these in c-mode-map ;; because c++-mode-map inherits it (define-key c-mode-map "\C-m" 'newline-and-indent) )
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) (add-hook 'c-mode-common-hook 'turn-on-font-lock)
(setq font-lock-maximum-decoration '((c-mode . 3) (c++-mode . 3) (java-mode . 3) )) ; medium strength hi-liting (2)
;;Turn off some annoying keys. (global-unset-key "\e\e") (global-unset-key "\C-x\C-u") ;(global-unset-key "\C-x\C-c")
(setq hippie-expand-try-functions-list '(try-expand-all-abbrevs try-expand-list try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol))
;; Now tell emacs that HPP is a c-mode type file
(setq auto-mode-alist (cons '("\.hpp$". c++-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\.h$". c++-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\.mq4$". c++-mode) auto-mode-alist))
;(add-to-list 'auto-mode-alist '("\\.mq4\\'" . cc-mode))
;(setq auto-mode-alist (cons '("\.java$". c++-mode) auto-mode-alist))
;;(require 'crypt)
;----- ;(setq user-mail-address "noname@nowhere.com") ;(setq user-full-name "noname") ;(setq mail-default-reply-to "noname@nowhere.com") ;(setq mail-archive-file-name "~/mail/sent-mail") ;(setq mail-yank-prefix "> ") ;(load-library "message") ;(setq message-send-mail-function 'smtpmail-send-it) ;(autoload 'gnus-group-mail "gnus-msg" "Send a mail message using gnus." t) ;----- (require 'paren) (setq mail-signature t) (setq auto-save-default nil) (setq make-backup-files nil)
;;(custom-set-variables)
(add-hook 'c-mode-common-hook '(lambda () (auto-fill-mode) (set-fill-column 1000) ))
(add-hook 'HTML-mode--hook '(lambda () (auto-fill-mode) (set-fill-column 1000) ))
;; obsolete?? (setq default-fill-column 1000) ; the column beyond which do word wrap (setq fill-column 1000) ; the column beyond which do word wrap (setq sgml-indent-data t) (setq sgm-set-face t) ;;(toggle-text-mode-auto-fill) (auto-fill-mode) ;(set-fill-column 1000)
(modify-face font-lock-comment-face "SlateGrey" nil nil nil nil nil) (setq column-number-mode t)
;; DOESNT WORK FOR WinEmacs ;; (server-start)
;;(custom-set-faces ;; '(font-lock-comment-face ((((class color) (background dark)) (:foreground "Red"))))) (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. '(region ((t (:background "Blue")))) '(show-paren-match-face ((((class color)) (:foreground "NavyBlue" :background "turquoise")))))
(setq load-path (append load-path (list "~/emacs/"))) ;(load "lees-default") ;(load "cua-mode.el") ;(cua-mode t)
(setq-default truncate-lines 1)
(define-key global-map [S-tab] 'CUA-cmd-indent-region-right)
;;((setq load-path (append load-path(cons (list "/usr/local/src/w3"))
(set-scroll-bar-mode 'right) (setq scroll-step 1)
(defun my-skrol-down () (interactive) (scroll-down 5) )
(defun my-skrol-up () (interactive) (scroll-up 5) )
;(define-key global-map [mouse-4] 'scroll-down) ; scroll-down ;(define-key global-map [mouse-5] 'scroll-up) ; scroll-up
(define-key global-map [mouse-4] 'my-skrol-down) ; scroll-down (define-key global-map [mouse-5] 'my-skrol-up) ; scroll-up
;(setq load-path (append load-path (list "~/emacs/java"))) ;(load "speedbar.el") ;(load "jde.el") ;(load "java-compile") ;(load "java-font-lock-20a.el") ;(load "hack-aplvr.el") ;(setq tab-width 4)
;(setq load-path (append load-path (list "~/emacs/java"))) ;(load "java-font-lock-20a.el")
(global-set-key [(meta backspace)] 'backward-kill-word)
(global-set-key [(meta return)] 'find-file-at-point) ;; Open the file at cursor
;(setq default-frame-alist '((font . "-adobe-courier-medium-r-normal--12-120-75-75-m-70-iso10646-1") (top . 10) (left . 30)))
(custom-set-variables '(truncate-lines 1) )
(custom-set-variables ; tabs to spaces '(tab-width 4) '(indent-tabs-mode nil)) ; '(hscroll-mode-name " ") ; '(hscroll-margin 5) ; '(hscroll-snap-threshold 30) ; '(next-line-add-newlines nil) ; '(hscroll-global-mode t nil (hscroll)))
(add-hook 'c-mode-hook (lambda () (setq show-trailing-whitespace t) (make-local-hook 'before-save-hook) (add-hook 'before-save-hook 'delete-trailing-whitespace)))
(require 'blank-mode)
; ---------------- matching word pairs ------------------
; The idea here is that while emacs has built-in support for matching
; things like parentheses, I work with a variety of syntaxes that use
; balanced keyword pairs, such as "begin" and "end", or "#if" and
; "#endif". So this mechanism searches for the balanced element
; of such ad-hoc constructions.
;
; TODO: Currently, there is no support for skipping things that are
; in string literals, comments, etc. I think that would be possible
; just by having appropriate regexs for them and skipping them when
; they occur, but I haven't tried yet.
(defun find-matching-element (search-func offset open-regex close-regex)
"Search forwards or backwards (depending on `search-func') to find
the matching pair identified by `open-regex' and `close-regex'."
(let ((nesting 1) ; number of pairs we are inside
(orig-point (point)) ; original cursor loc
(orig-case-fold-search case-fold-search))
(setq case-fold-search nil) ; case-sensitive search
(goto-char (+ (point) offset)) ; skip the `open-regex' at cursor
(while (and (> nesting 0)
(funcall search-func
(concat "\\(" open-regex "\\)\\|\\(" close-regex "\\)") nil t))
(if (string-match open-regex (match-string 0))
(setq nesting (+ nesting 1))
(setq nesting (- nesting 1))
))
(setq case-fold-search orig-case-fold-search)
(if (eq nesting 0)
; found the matching word, move cursor to the beginning of the match
(goto-char (match-beginning 0))
; did not find the matching word, report the nesting depth at EOF
(progn
(goto-char orig-point)
(error (format "Did not find match; nesting at file end is %d" nesting))
)
)))
; This is what I bind to Alt-[ and Alt-].
(defun find-matching-keyword ()
"Find the matching keyword of a balanced pair."
(interactive)
(cond
; these first two come from lisp/emulation/vi.el
((looking-at "[[({]") (forward-sexp 1) (backward-char 1))
((looking-at "[])}]") (forward-char 1) (backward-sexp 1))
; C/C++ ((looking-at "#if") (find-matching-element 're-search-forward 3 "#if" "#endif")) ((looking-at "#else") (find-matching-element 're-search-forward 3 "#if" "#endif")) ((looking-at "#elif") (find-matching-element 're-search-forward 3 "#if" "#endif")) ((looking-at "#endif") (find-matching-element 're-search-backward 0 "#endif" "#if"))
; C/C++ ((looking-at "define") (find-matching-element 're-search-forward 6 "define" "endef")) ((looking-at "endef") (find-matching-element 're-search-backward 0 "endef" "define" ))
((looking-at "ifeq") (find-matching-element 're-search-forward 4 "\\(ifeq\\)\\|\\(ifneq\\)\\|\\(ifdef\\)\\|\\(ifndef\\)" "\\(endif\\)")) ((looking-at "ifneq") (find-matching-element 're-search-forward 5 "\\(ifeq\\)\\|\\(ifneq\\)\\|\\(ifdef\\)\\|\\(ifndef\\)" "\\(endif\\)")) ((looking-at "ifdef") (find-matching-element 're-search-forward 4 "\\(ifeq\\)\\|\\(ifneq\\)\\|\\(ifdef\\)\\|\\(ifndef\\)" "\\(endif\\)")) ((looking-at "ifndef") (find-matching-element 're-search-forward 4 "\\(ifeq\\)\\|\\(ifneq\\)\\|\\(ifdef\\)\\|\\(ifndef\\)" "\\(endif\\)")) ((looking-at "else") (find-matching-element 're-search-forward 4 "\\(ifeq\\)\\|\\(ifneq\\)\\|\\(ifdef\\)\\|\\(ifndef\\)" "\\(endif\\)")) ((looking-at "endif") (find-matching-element 're-search-backward 0 "\\(endif\\)" "\\(ifeq\\)\\|\\(ifneq\\)\\|\\(ifdef\\)\\|\\(ifndef\\)"))
;(t (error "Cursor is not on ASSERT nor RETRACT")) (t t) ))
(defun find-matching-keyword-prev ()
"Find the matching keyword of a balanced pair."
(interactive)
(cond
; these first two come from lisp/emulation/vi.el
((looking-at "[[({]") (forward-sexp 1) (backward-char 1))
((looking-at "[])}]") (forward-char 1) (backward-sexp 1))
; C/C++ ((looking-at "#if") (find-matching-element 're-search-forward 3 "#if" "#endif")) ((looking-at "#endif") (find-matching-element 're-search-backward 0 "#endif" "#if"))
((looking-at "ifeq") (find-matching-element 're-search-forward 4 "if[n]*eq" "endif")) ((looking-at "ifneq") (find-matching-element 're-search-forward 5 "if[n]eq" "endif")) ((looking-at "endif") (find-matching-element 're-search-backward 0 "endif" "if[n]*eq"))
;(t (error "Cursor is not on ASSERT nor RETRACT")) (t t) ))
(global-set-key [(meta ?])] 'find-matching-keyword)
;(prefer-coding-system 'unix) ; hmm this doesnt work.. can set file's coding to unix but can't prefer, why?? ;(prefer-coding-system 'utf8) ;(setq coding-system-for-read 'utf-8) ;(setq coding-system-for-write 'utf-8)
;(global-set-key [(meta return)] 'bc-set) ;; Shift-SPACE for set bookmark ;(global-set-key [(meta f10)] 'bc-list) ;; C-x M-j for the bookmark menu list ;(global-set-key [(meta f11)] 'bc-previous) ;; M-j for jump to previous ;(global-set-key [(meta f12)] 'bc-next) ;; Shift-M-j for jump to next
;; (global-set-key [(shift meta j)] 'bc-next) ;; Shift-M-j for jump to next ;; (global-set-key [(meta up)] 'bc-local-previous) ;; M-up-arrow for local previous ;; (global-set-key [(meta down)] 'bc-local-next) ;; M-down-arrow for local next ;; (global-set-key [(control c)(j)] 'bc-goto-current) ;; C-c j for jump to current bookmark
(define-key global-map [C-S-f12] 'toggle-truncate-lines) (require 'php-mode)
;;(require 'breadcrumb) (load "compile-") (load "compile+") (load "grep+") (setq grep-command "grep -nH -r --exclude-dir='svn' --include='*.h' --include='*.cpp' --include='*.c' -e SrchStr *") (setq grep-find-command "find . -type f '!' -wholename '*/.git/*' -print0 | xargs -0 -e grep -nH -e ") (setq grep-find-command "find . -type f '!' \( -wholename '*/.git/*' -o -name "*.o" \) -print0 | xargs -0 -e grep -nH -w -e ") (which-func-mode 1)