Mercurial > hg > xemacs-beta
diff lisp/modes/c-style.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | b82b59fe008d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/modes/c-style.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,198 @@ +;; c-style.el --- sets c-style control variables. +;; Copyright (C) 1992-1993 Free Software Foundation, Inc. + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +;; +;; LCD Archive Entry: +;; c-style|Daniel LaLiberte|liberte@cs.uiuc.edu +;; |sets c-style control variables +;; |Thu Feb 27 13:42:57 CST 1992|Version: 2.1|~/as-is/c-src-doc.el.Z +;; +;;; Synched up with: Not in FSF. + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; There are several ways to call set-c-style described below. +;;; None of these methods reindent your program - they only affect +;;; new indentation. +;;; +;;; - Just call set-c-style in your c-mode-hook. +;;; Without style argument, default-c-style will be used. +;;; With style argument, this will set the style for every +;;; c-mode buffer the same. +;;; +;;; - Call set-c-style from the Local Variables list. +;;; e.g. "eval:(set-c-style 'C++)" +;;; +;;; - Call set-c-style interactively. It prompts for the style name +;;; with completion using default-c-style. +;;; +;;; For convenience, put one of the following in your .emacs: +;;; (autoload 'set-c-style "c-style" nil t) +;;; or (load "c-style") +;;; ===================================================== + +(defvar default-c-style 'GNU + "*The default value of c-style. Set this in your .emacs.") + +;; The following predefined styles are all I know about. +;; If you learn of another style that has a "big" following, please +;; send me the parameters. + +(defvar c-style-alist + '((GNU + (c-indent-level 2) + (c-continued-statement-offset 2) + (c-brace-offset 0) + (c-argdecl-indent 5) + (c-label-offset -2)) + + (BSD + (c-indent-level 8) + (c-continued-statement-offset 8) + (c-brace-offset -8) + (c-argdecl-indent 8) + (c-label-offset -8)) + + (K&R + (c-indent-level 5) + (c-continued-statement-offset 5) + (c-brace-offset -5) + (c-argdecl-indent 0) + (c-label-offset -5)) + + (BS ; was C++ + (c-indent-level 4) + (c-continued-statement-offset 4) + (c-brace-offset -4) + (c-argdecl-indent 4) + (c-label-offset -4)) + + ;; From Lynn Slater + (LRS + (c-indent-level 4) + (c-continued-statement-offset 4) + (c-brace-offset 0) + (c-argdecl-indent 4) + (c-label-offset -2) + (c-auto-newline nil)) + + (Plauger + (c-indent-level 0) + (c-continued-statement-offset 8) + (c-continued-brace-offset -8) + (c-brace-offset 8) + (c-brace-imaginary-offset 0) + (c-argdecl-indent 0) + (c-label-offset -8) + (c-auto-newline t) + (c-tab-always-indent t)) + + ;; From Jozsef A Toth <jtoth+@pitt.edu> + ;; Is this really the Whitesmith style? + (Alman + (c-argdecl-indent 0) + (c-brace-imaginary-offset 2) ;;; ???? + (c-brace-offset 0) + (c-continued-statement-offset 2) + (c-indent-level 0) + (c-label-offset -2) + (c-auto-newline t) + (comment-column 40) + (tab-width 2) + (fill-column '79)) + + (Gould + (c-indent-level 4) + (c-continued-statement-offset 4) + (c-brace-offset -4) + (c-argdecl-indent 8) + (c-label-offset -2) + (c-brace-imaginary-offset 0)) + + ;; From Joan Eslinger <wombat@kilimanjaro.key.amdahl.com> + (WRS + (c-indent-level 0) + (c-continued-statement-offset 4) + (c-brace-offset 0) + (c-argdecl-indent 4) + (c-label-offset -2) + (c-brace-imaginary-offset 4) + (c-continued-brace-offset -4)) + )) + +(defvar c-style nil + "The buffer local c-mode indentation style.") + +;; Add style name to mode line. Assumes minor-mode-alist is not buffer local. +;; Thanks to Joan Eslinger. + +(defvar c-style-name nil + "The style name for a c-mode indentation style. +This is to be set by set-c-style, and used by the mode line.") + +(or (assq 'c-style-name minor-mode-alist) + (setq minor-mode-alist + (purecopy + (append minor-mode-alist + ;; use undocumented feature + '((c-style-name c-style-name)))))) + +(defun set-c-style (&optional style) + "Set up the c-mode style variables from STYLE if it is given, or +default-c-style otherwise. It makes the c indentation style variables +buffer local." + + (interactive) + + (let ((c-styles (mapcar 'car c-style-alist))) ; for completion + (if (interactive-p) + (setq style + (let ((style-string ; Get style name with completion. + (completing-read + (format "Set c-mode indentation style to (default %s): " + default-c-style) + (vconcat c-styles) + (function (lambda (arg) (memq arg c-styles))) + ))) + (if (string-equal "" style-string) + default-c-style + (intern style-string)) + ))) + + ;; If style is nil, use default-c-style. + (setq style (or style default-c-style)) + + (make-local-variable 'c-style) + (if (memq style c-styles) + (setq c-style style) + (error "Undefined c style: %s" style) + ) + (message "c-style: %s" c-style) + + ;; Set the c-style-name + (make-local-variable 'c-style-name) + (setq c-style-name (format " %s" c-style)) + + ;; Finally, set the indentation style variables making each one local. + (mapcar (function (lambda (c-style-pair) + (make-local-variable (car c-style-pair)) + (set (car c-style-pair) + (car (cdr c-style-pair))))) + (cdr (assq c-style c-style-alist))) + c-style + ))