The following .emacs excerpt was mostly provided by Robert Lupton. The intent was to help coders comply with the IPP coding standards. ;; ;; Support code for the Pan-STARRS C coding standards ;; ;; The basic tool is a "panstarrs-c" mode derived from c-mode. ;; ;; To activate, add: ;; (add-to-list 'auto-mode-alist (cons "\\.[ch]$" 'panstarrs-c-mode)) ;; to your .emacs file ;; ;; You might want to copy some of these add-hook lines to your .emacs file too: ;; (add-hook 'panstarrs-c-mode-hook 'panstarrs-c99-comments) ;; (add-hook 'panstarrs-c-mode-hook 'panstarrs-set-width) ;; (add-hook 'panstarrs-c-mode-hook ;; '(lambda () ;; (set (make-variable-buffer-local 'comment-indent-function) ;; 'panstarrs-comment-indent))) ;; These respectively: ;; use C99-style comments (i.e. // to end of line) ;; have your emacs window set to 110 characters wide ;; somewhat improve (or spoil?) the handling of re-indenting comments (define-derived-mode panstarrs-c-mode c-mode "Pan-STARRS C" "Major mode for editing Pan-STARRS C source. \\{panstarrs-c-mode-map} " (let ( (our-mode-name mode-name) ) (c-mode) ; get correct font-lock behaviour (setq mode-name our-mode-name)) ; keep our desired name (setq c-default-style '((other . "k&r"))) (setq c-basic-offset 4) (setq comment-column 40) (setq fill-column 110) (add-to-list 'c-offsets-alist (cons 'statement-case-intro 2)) (add-to-list 'c-offsets-alist (cons 'statement-case-open 2)) (add-to-list 'c-offsets-alist (cons 'case-label 2))) ;; ;; Various useful commands for writing panstarrs code ;; (defun panstarrs-c99-comments () "Use C99-style // comments" (setq comment-start "// ") (setq comment-end "")) ;; (defun panstarrs-set-width () "Set frame width to fill-column + 1 ( + 1 to allow for wrap column)" (set-frame-width default-minibuffer-frame (1+ fill-column))) ;; ;; (defun panstarrs-comment-indent (&optional delete) "Make ESC; indent new comments to comment-column even if previous line has a comment indented further to the right" (interactive "p") (let ( (indent (c-comment-indent)) ) (if (> indent comment-column) (save-excursion (beginning-of-line) (if (not (looking-at (concat "^[ \t]*" comment-start))) (setq indent comment-column)))) indent)) ;; END support code for the Pan-STARRS C coding standards ;; Remove tabs from files, from http://www.jwz.org/doc/tabs-vs-spaces.html (defun panstarrs-mode-untabify () (save-excursion (goto-char (point-min)) (while (re-search-forward "[ \t]+$" nil t) (delete-region (match-beginning 0) (match-end 0))) (goto-char (point-min)) (if (search-forward "\t" nil t) (untabify (1- (point)) (point-max)))) nil) ;; Activate Pan-STARRS coding standard stuff. (add-to-list 'auto-mode-alist (cons "\\.[ch]$" 'panstarrs-c-mode)) (add-hook 'panstarrs-c-mode-hook 'panstarrs-c99-comments) (add-hook 'panstarrs-c-mode-hook 'panstarrs-set-width) (add-hook 'panstarrs-c-mode-hook '(lambda () (set (make-variable-buffer-local 'comment-indent-function) 'panstarrs-comment-indent))) (add-hook 'panstarrs-c-mode-hook '(lambda () (make-local-variable 'write-contents-hooks) (add-hook 'write-contents-hooks 'panstarrs-mode-untabify))) ;; Untabify Perl code as well. (add-hook 'perl-mode-hook '(lambda () (make-local-variable 'write-contents-hooks) (add-hook 'write-contents-hooks 'panstarrs-mode-untabify)))