liberte@M.CS.UIUC.EDU (Daniel LaLiberte) (11/17/88)
I made a number of changes to c-style.el. It turns out that it does not work (and maybe never did?) to set the c-style in the Local Variables list because the c-mode-hook (and thus set-c-style) is called before hack-local-variables. Dan LaLiberte uiucdcs!liberte liberte@cs.uiuc.edu liberte%a.cs.uiuc.edu@uiucvmd.bitnet ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; c-style.el --- sets c-style control variables. ;; ;; Author : Daniel LaLiberte (liberte@a.cs.uiuc.edu) ;; Created On : Wed Aug 12 08:00:20 1987 ;; Last Modified By: Daniel LaLiberte ;; Last Modified On: Wed Nov 16 22:37:43 1988 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Definitions for buffer local c-mode indentation style. ;;; Put either (autoload 'set-c-style "c-style" nil t) ;;; or (load "c-style") in your .emacs. (defvar default-c-style 'GNU "*The default value of c-style. Set this in your .emacs.") ;;; ===================================================== ;;; There are several ways to call set-c-style ;;; ;;; - Just add set-c-style to 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. ;;; ===================================================== ;; Predefined styles (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)) (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) ) )) (defvar c-style nil "The buffer local c-mode indentation style.") (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 (message "Undefined c style: %s" style)) ) (message "c-style: %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) (cdr c-style-pair)))) (cdr (assq c-style c-style-alist))) c-style ))