;; ------ ;; jimb customization of emacs/XEmacs/NTEmacs ;; http://www.gnu.org/software/emacs/elisp-manual ;; ------ (defvar HOME (expand-file-name "~")) (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) (setq EMACS "emacs") (cond (running-xemacs (setq EMACS "XEmacs"))) ;;(setq HOSTNAME (getenv "HOSTNAME")) (setq HOSTNAME (substring (system-name) 0 (string-match "\\." (system-name)))) (setq FULLHOSTNAME (system-name)) (setq USERNAME (getenv "USER")) ;; Inhibit splash affects emacs 22. (cond ((not running-xemacs) (setq inhibit-splash-screen t))) ;; ------ ;; Load macros. ;; ------ (load-file "~/.emacs-macros") ;; ------ ;; Redefine keys. ;; ------ ;; A good habit that works well in any emacs on most environments: ;; - Use Ctrl+A/E for beginning/end of line ;; - Use Home/End for beginning/end of buffer ;; The reason is that, on most consoles and non-X environments, ;; Ctrl+Home/End and Home/End are indistinguishable. ;; ------ (global-set-key [delete] 'delete-char) ;;(global-set-key (kbd "") 'delete-char) ;; was used temp. in Oct 2001 (global-set-key [f12] 'goto-line) (global-set-key [f9] 'jimb-mprefix) (global-set-key [f10] 'jimb-camel) ;;(global-set-key [home] 'beginning-of-buffer) ;;(global-set-key [home] 'beginning-of-line) ;;(global-set-key [end] 'end-of-buffer) ;;(global-set-key [end] 'end-of-line) ;; --- XEmacs 20.4 will stumble on these: --- ;;(global-set-key [C-home] 'beginning-of-buffer) ;;(global-set-key [C-end] 'end-of-buffer) ;;(global-set-key [S-delete] 'backward-delete-char-untabify) (setq delete-key-deletes-forward 1) ;; Make Backspace work. ;;(define-key global-map "\C-d" 'backward-delete-char) (cond ((not running-xemacs) (normal-erase-is-backspace-mode 0) )) ;; ----- ;; Tab width of most word processors is 8 or 9. ;; But most programmer's editors (eg BeOS's Eddie) use 4. ;; The following two lines are different, note the dash '-'. ;; ----- (setq default-tab-width 4) (setq-default tab-width 4) ;; ------ ;; To tell emacs to convert tabs to spaces while editing (text-mode is excluded), ;; set this to 'nil', otherwise 't'. This var is used below in the mode hooks. ;; ------ ;;(setq jimb-indent-tabs-mode 't) ;;(setq jimb-indent-tabs-mode 'nil) (if (string-match "intra.net" FULLHOSTNAME) (setq jimb-indent-tabs-mode 't) (setq jimb-indent-tabs-mode 'nil)) ;; ------ ;; Misc. ;; ------ ;;(setq bell-volume 7) ;;(setq file-name-buffer-file-type-alist '(("\\.bin$" . nil) (".*" . t))) (setq make-backup-files nil) (setq vc-handled-backends nil) ;; disable CVS mode and auto backups when you edit a file (setq column-number-mode 1) (setq line-number-mode 1) ;;(setq-default truncate-lines nil) ;; wrap lines (setq-default truncate-lines t) ;; truncate lines (setq visible-bell 1) ;; Somehow default-frame-alist prevents emacs showing colors on MacOS X. ;;(setq default-frame-alist ;; '((vertical-scroll-bars . right))) (unless (string-match "darwin" (emacs-version)) (setq default-frame-alist '((vertical-scroll-bars . right)))) (setq transient-mark-mode t) ;; so that marking a region will be hilited (standard-display-ascii ?\r "") ;; suppress emacs showing ^M at MSDOS end-of-line. ;; Turn off toolbar. (cond ((not running-xemacs) (tool-bar-mode 0) )) ;; ------ ;; Disable language modes enabled by file extensions. ;; ------ ;;(setq auto-mode-alist (cons '("\\.cpp$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.c$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.cc$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.h$" . text-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.glsl$" . c++-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.y$" . c-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.l$" . c-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.pl$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.html$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.htm$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\Makefile$" . text-mode) auto-mode-alist)) ;;(setq auto-mode-alist (cons '("\\.py$" . c-mode) auto-mode-alist)) ;; emacs html-helper-mode can auto-update time-stamp but does so ;; incompatible with xemacs, so use plain html-mode instead. ;;(setq auto-mode-alist (cons '("\\.php$" . html-mode) auto-mode-alist)) (cond ((not running-xemacs) (setq auto-mode-alist (cons '("\\.php$" . html-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.html$" . html-mode) auto-mode-alist)) )) (cond (running-xemacs (setq auto-mode-alist (cons '("\\.php$" . html-mode) auto-mode-alist)))) ;; ------ ;; Add types of files to language modes. ;; ------ (add-to-list 'auto-mode-alist '("GNUmakefile" . makefile-mode)) (add-to-list 'auto-mode-alist '("[Mm]akefile" . makefile-mode)) ;; ------ ;; Load the package that handles end-of-line translation according ;; to filesystems using the DOS drive letter convention. ;; Translated filesystems use CR/LF. Untranslated filesystems use LF. ;; ------ ;;(load-library "untranslate.el") ;;(add-untranslated-filesystem "J:") ;; ------ ;; Configure modes. ;; This enables hi-liting, disables auto-identation, ;; keeps TAB/ENTER/BACKSPACE/DELETE normal. ;; ------ (defun c-mode-jimb-star () (interactive) (insert "*")) (defun c-mode-jimb-slash () (interactive) (insert "/")) (defun c-mode-jimb-comma () (interactive) (insert ",")) (defun c-mode-jimb-colon () (interactive) (insert ":")) (defun c-mode-jimb-semicolon () (interactive) (insert ";")) (defun c-mode-jimb-paren-left () (interactive) (insert "(")) (defun c-mode-jimb-paren-right () (interactive) (insert ")")) (defun c-mode-jimb-brace-left () (interactive) (insert "{")) (defun c-mode-jimb-brace-right () (interactive) (insert "}")) (defun c-mode-jimb-angle-left () (interactive) (insert "<")) (defun c-mode-jimb-angle-right () (interactive) (insert ">")) (add-hook 'c-mode-common-hook '(lambda () (put 'c-indent-command 'disabled t) (define-key c-mode-map "\t" 'tab-to-tab-stop))) (add-hook 'c++-mode-common-hook '(lambda () (put 'c-indent-command 'disabled t) (define-key c++-mode-map "\t" 'tab-to-tab-stop))) (add-hook 'java-mode-common-hook '(lambda () (put 'c-indent-command 'disabled t) (define-key java-mode-map "\t" 'tab-to-tab-stop))) (add-hook 'perl-mode-common-hook '(lambda () (put 'perl-indent-command 'disabled t) (define-key perl-mode-map "\t" 'tab-to-tab-stop))) (add-hook 'cperl-mode-common-hook '(lambda () (put 'cperl-indent-command 'disabled t) (define-key cperl-mode-map "\t" 'tab-to-tab-stop))) ;; ------ ;; Text-mode hook. ;; ------ (defun text-mode-jimb-hook () ;; TAB stops at multiples of 4. (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) (setq indent-tabs-mode 't) ;; not jimb-indent-tabs-mode (setq default-tab-width 4) (setq-default tab-width 4) (define-key text-mode-map "\t" 'tab-to-tab-stop) (define-key text-mode-map [backspace] 'delete-backward-char) ) (add-hook 'text-mode-hook 'text-mode-jimb-hook) ;; ------ ;; C mode hook. ;; ------ (defun c-mode-jimb-hook () ;; Python: expand tabs into spaces. (cond ((string-match ".py" (buffer-name)) (setq jimb-indent-tabs-mode 'nil) )) ;; TAB stops at multiples of 4. (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) (setq indent-tabs-mode jimb-indent-tabs-mode) (setq default-tab-width 4) (setq-default tab-width 4) (define-key c-mode-map "\t" 'tab-to-tab-stop) (define-key c-mode-map [backspace] 'delete-backward-char) ;; Prevent triggering indentation when typing. (define-key c-mode-map "*" 'c-mode-jimb-star) (define-key c-mode-map "/" 'c-mode-jimb-slash) (define-key c-mode-map "," 'c-mode-jimb-comma) (define-key c-mode-map ":" 'c-mode-jimb-colon) (define-key c-mode-map ";" 'c-mode-jimb-semicolon) (define-key c-mode-map "(" 'c-mode-jimb-paren-left) (define-key c-mode-map ")" 'c-mode-jimb-paren-right) (define-key c-mode-map "{" 'c-mode-jimb-brace-left) (define-key c-mode-map "}" 'c-mode-jimb-brace-right) (define-key c-mode-map "<" 'c-mode-jimb-angle-left) (define-key c-mode-map ">" 'c-mode-jimb-angle-right) ) (add-hook 'c-mode-hook 'c-mode-jimb-hook) ;; ------ ;; C++ mode hook. ;; ------ (defun c++-mode-jimb-hook () ;; TAB stops at multiples of 4. (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) (setq indent-tabs-mode jimb-indent-tabs-mode) (setq default-tab-width 4) (setq-default tab-width 4) (define-key c++-mode-map "\t" 'tab-to-tab-stop) (define-key c++-mode-map [backspace] 'delete-backward-char) ;; Prevent triggering indentation when typing. (define-key c++-mode-map "/" 'c-mode-jimb-slash) (define-key c++-mode-map "*" 'c-mode-jimb-star) (define-key c++-mode-map "," 'c-mode-jimb-comma) (define-key c++-mode-map ":" 'c-mode-jimb-colon) (define-key c++-mode-map ";" 'c-mode-jimb-semicolon) (define-key c++-mode-map "(" 'c-mode-jimb-paren-left) (define-key c++-mode-map ")" 'c-mode-jimb-paren-right) (define-key c++-mode-map "{" 'c-mode-jimb-brace-left) (define-key c++-mode-map "}" 'c-mode-jimb-brace-right) (define-key c++-mode-map "<" 'c-mode-jimb-angle-left) (define-key c++-mode-map ">" 'c-mode-jimb-angle-right) ) (add-hook 'c++-mode-hook 'c++-mode-jimb-hook) ;; ------ ;; Java mode hook. ;; ------ (defun java-mode-jimb-hook () ;; TAB stops at multiples of 4. (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) (setq indent-tabs-mode jimb-indent-tabs-mode) (setq default-tab-width 4) (setq-default tab-width 4) (define-key java-mode-map "\t" 'tab-to-tab-stop) (define-key java-mode-map [backspace] 'delete-backward-char) ;; Prevent triggering indentation when typing. (define-key java-mode-map "/" 'c-mode-jimb-slash) (define-key java-mode-map "*" 'c-mode-jimb-star) (define-key java-mode-map "," 'c-mode-jimb-comma) (define-key java-mode-map ":" 'c-mode-jimb-colon) (define-key java-mode-map ";" 'c-mode-jimb-semicolon) (define-key java-mode-map "(" 'c-mode-jimb-paren-left) (define-key java-mode-map ")" 'c-mode-jimb-paren-right) (define-key java-mode-map "{" 'c-mode-jimb-brace-left) (define-key java-mode-map "}" 'c-mode-jimb-brace-right) (define-key java-mode-map "<" 'c-mode-jimb-angle-left) (define-key java-mode-map ">" 'c-mode-jimb-angle-right) ) (add-hook 'java-mode-hook 'java-mode-jimb-hook) ;; ------ ;; Perl mode hook. ;; ------ (defun perl-mode-jimb-hook () ;; TAB stops at multiples of 4. (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) (setq indent-tabs-mode jimb-indent-tabs-mode) (setq default-tab-width 4) (setq-default tab-width 4) (define-key perl-mode-map "\t" 'tab-to-tab-stop) (define-key perl-mode-map [backspace] 'delete-backward-char) ;; Prevent triggering indentation when typing. (define-key perl-mode-map "*" 'c-mode-jimb-star) (define-key perl-mode-map "/" 'c-mode-jimb-slash) (define-key perl-mode-map "," 'c-mode-jimb-comma) (define-key perl-mode-map ":" 'c-mode-jimb-colon) (define-key perl-mode-map ";" 'c-mode-jimb-semicolon) (define-key perl-mode-map "(" 'c-mode-jimb-paren-left) (define-key perl-mode-map ")" 'c-mode-jimb-paren-right) (define-key perl-mode-map "{" 'c-mode-jimb-brace-left) (define-key perl-mode-map "}" 'c-mode-jimb-brace-right) (define-key perl-mode-map "<" 'c-mode-jimb-angle-left) (define-key perl-mode-map ">" 'c-mode-jimb-angle-right) ) (add-hook 'perl-mode-hook 'perl-mode-jimb-hook) ;; ------ ;; XEmacs uses cperl-mode instead of perl-mode. ;; ------ (defun cperl-mode-jimb-hook () ;; TAB stops at multiples of 4. (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) (setq indent-tabs-mode jimb-indent-tabs-mode) (setq default-tab-width 4) (setq-default tab-width 4) (define-key cperl-mode-map "\t" 'tab-to-tab-stop) ;; (define-key cperl-mode-map [backspace] 'delete-backward-char) ;; Prevent triggering indentation when typing. (define-key cperl-mode-map "*" 'c-mode-jimb-star) (define-key cperl-mode-map "/" 'c-mode-jimb-slash) (define-key cperl-mode-map "," 'c-mode-jimb-comma) (define-key cperl-mode-map ":" 'c-mode-jimb-colon) (define-key cperl-mode-map ";" 'c-mode-jimb-semicolon) (define-key cperl-mode-map "(" 'c-mode-jimb-paren-left) (define-key cperl-mode-map ")" 'c-mode-jimb-paren-right) (define-key cperl-mode-map "{" 'c-mode-jimb-brace-left) (define-key cperl-mode-map "}" 'c-mode-jimb-brace-right) (define-key cperl-mode-map "<" 'c-mode-jimb-angle-left) (define-key cperl-mode-map ">" 'c-mode-jimb-angle-right) ) (add-hook 'cperl-mode-hook 'cperl-mode-jimb-hook) ;; ------ ;; FORTH ;; ------ ;; 2006/10 XEmacs complains when FORTH support isn't installed ;;(defvar GFORTH_EL (concat HOME "/misc/gforth.el")) ;;(cond ((file-readable-p GFORTH_EL) ;; (load-library GFORTH_EL) ;; (autoload 'forth-mode GFORTH_EL) ;; (setq auto-mode-alist (cons '("\\.fs\\'" . forth-mode) auto-mode-alist)) ;; (autoload 'forth-block-mode GFORTH_EL) ;; (setq auto-mode-alist (cons '("\\.fb\\'" . forth-block-mode) auto-mode-alist)) ;; (add-hook 'forth-mode-hook (function (lambda () ;; (setq forth-indent-level 4) ;; (setq forth-minor-indent-level 2) ;; (setq forth-hilight-level 3)))) ;;)) ;; ------ ;; Python ;; Write TAB as 4 spaces. ;; ------ (setq python-mode-hook '(lambda () (progn (set-variable 'py-indent-offset 4) (set-variable 'py-smart-indentation nil) (set-variable 'indent-tabs-mode nil) ))) ;; ------ ;; Lua ;; Write TAB as 4 spaces. ;; ------ (setq lua-mode-hook '(lambda () (progn (set-variable 'lua-indent-level 4)))) ;; ------ ;; Enable blinking matching parenthesis. ;; The previous changes to the mode maps disable blinking. ;; ------ (unless (string-match "darwin" (emacs-version)) (cond (running-xemacs (paren-set-mode " ") ;; paren-set-mode is a multi-way toggle, parm is irrelevant (paren-set-mode " ") ))) (unless (string-match "darwin" (emacs-version)) (cond ((not running-xemacs) (show-paren-mode 1) ))) ;; ------ ;; Colors. ;; ------ ;; emacs colors (cond ((not running-xemacs) ;; mouse selection and search match (set-face-foreground 'region "white") (set-face-background 'region "red") )) ;; XEmacs colors (2006/05) ;; This is an alternative, but ~/.xemacs is used instead. ;;(cond (running-xemacs (custom-set-faces '(default ((t (:background "grey"))) t)))) ;; ------ ;; Highlight colors. ;; ------ (cond ((fboundp 'global-font-lock-mode) ;; Customize face attributes (setq font-lock-face-attributes ;; Symbol-for-Face Foreground Background Bold Italic Underline '((font-lock-comment-face "DarkGreen") ;;(font-lock-string-face "Sienna") ;;(font-lock-keyword-face "RoyalBlue") ;;(font-lock-function-name-face "Blue") ;;(font-lock-variable-name-face "Black") ;;(font-lock-type-face "Black") ;;(font-lock-reference-face "Purple") )) ;; Load the font-lock package. (require 'font-lock) ;; Maximum colors (setq font-lock-maximum-decoration t) ;; Turn on font-lock in all modes that support it (global-font-lock-mode t))) ;; ------ ;; XEmacs. ;; ------ (cond ((string-match "XEmacs" emacs-version) ()) (t (global-set-key [C-home] 'beginning-of-buffer) (global-set-key [C-end] 'end-of-buffer) (global-set-key [S-delete] 'backward-delete-char-untabify))) ;; ------ ;; wheel mouse ;; ------ (global-set-key [mouse-4] 'scroll-down) (global-set-key [mouse-5] 'scroll-up) ;; ----- ;; Write filename into titlebar. ;; ----- ;; %f=filename %b=buffer name (setq frame-title-format `(,EMACS "["USERNAME "@" HOSTNAME "]: " (buffer-file-name "%f" (dired-directory dired-directory "%b")))) ;; 2006/10: ~/.xemacs/init.el loads this now, no longer v.v. ;; Options Menu Settings ;; ===================== ;;(cond ;; ((and (string-match "XEmacs" emacs-version) ;; (boundp 'emacs-major-version) ;; (or (and ;; (>= emacs-minor-version 14)) ;; (> emacs-major-version 19)) ;; (fboundp 'load-options-file)) ;;;; (load-options-file "~/.xemacs"))) ;; (load-options-file "~/.xemacs/init.el"))) ;; ============================ ;; End of Options Menu Settings ;; ------ ;; This was auto-added after typing N to migrate (stops nagging): ;; ------ (custom-set-variables '(load-home-init-file t t)) (custom-set-faces)