liberte@B.CS.UIUC.EDU (Daniel LaLiberte) (08/26/87)
Here is a little program I wrote to make life amidst various indentation
styles easier.
----------------
; Definitions for buffer specific c-mode indentation style.
; Written by Daniel LaLiberte (liberte@a.cs.uiuc.edu)
; while at Gould. This is free.
; There are several ways to call set-c-style.
;
; 1. Set the c-style variable in the local variables list
; with "c-style: GNU" or whatever you like and
; call set-c-style without argument in c-mode-hook.
;
; 2. Call set-c-style with style argument in c-mode-hook.
; This will set the style for every c file the same.
;
; 3. Put "eval: (set-c-style 'GNU)" in the local variables list.
;
; 4. Call set-c-style interactively. It prompts for the style name.
; The default value of c-style is default-c-style.
; I put (autoload 'set-c-style "c-style.el" nil t) in my .emacs.
;;; $Header: $
;;;
;;; $Log: $
;;;
;; Predefined styles
(defvar c-styles '(K&R BSD GNU C++ Gould)
"*A list of symbols for the different c-mode styles")
(defvar c-style-alist '(
(c-indent-level . [ 5 8 2 4 4])
(c-continued-statement-offset . [ 5 8 2 4 4])
(c-brace-offset . [-5 -8 0 -4 -4])
(c-argdecl-indent . [ 0 8 5 4 8])
(c-label-offset . [-5 -8 -2 -4 -2])
)
"*An association list between c-mode style variables and
a vector of values, one for each style given in c-styles")
(defvar default-c-style 'Gould
"*The default value of c-style")
(defvar c-style default-c-style
"*The buffer specific c indentation style.
May be one of the symbols in c-styles")
(defun set-c-style (&optional style)
"Set up the c-mode style variables from the c-style variable or if
STYLE argument is given, use that. It makes the c indentation style
variables buffer local."
(interactive)
(if (interactive-p)
(setq style
(let ((style-string
(completing-read
(format "Set c mode 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))
)))
(let* ((new-c-style (or style c-style)) ; use c-style if style not given
(c-style-index (- (length c-styles)
(length (memq new-c-style c-styles))))
)
(make-local-variable 'c-style)
(if (< c-style-index (length c-styles))
(setq c-style new-c-style)
(error (concat "Bad c style: " new-c-style))
)
(message "c-style: %s" c-style)
; finally, set the style variables making each one local
(mapcar (function (lambda (c-style-pair)
(make-local-variable (car c-style-pair))
(set (car c-style-pair)
(aref (cdr c-style-pair) c-style-index))))
c-style-alist)
c-style
)
)liberte@B.CS.UIUC.EDU (Daniel LaLiberte) (08/27/87)
My last attempt probably failed. Here is c-style.el which
allows you to have named indentation styles.
Dan LaLiberte
liberte@a.cs.uiuc.edu
uiucdcs!liberte
---
; Definitions for buffer specific c-mode indentation style.
; Written by Daniel LaLiberte (liberte@a.cs.uiuc.edu)
; while at Gould. This is free.
; There are several ways to call set-c-style.
;
; 1. Set the c-style variable in the local variables list
; with "c-style: GNU" or whatever you like and
; call set-c-style without argument in c-mode-hook.
;
; 2. Call set-c-style with style argument in c-mode-hook.
; This will set the style for every c file the same.
;
; 3. Put "eval: (set-c-style 'GNU)" in the local variables list.
;
; 4. Call set-c-style interactively. It prompts for the style name.
; The default value of c-style is default-c-style.
; I put (autoload 'set-c-style "c-style.el" nil t) in my .emacs.
;;; $Header: $
;;;
;;; $Log: $
;;;
;; Predefined styles
(defvar c-styles '(K&R BSD GNU C++ Gould)
"*A list of symbols for the different c-mode styles")
(defvar c-style-alist '(
(c-indent-level . [ 5 8 2 4 4])
(c-continued-statement-offset . [ 5 8 2 4 4])
(c-brace-offset . [-5 -8 0 -4 -4])
(c-argdecl-indent . [ 0 8 5 4 8])
(c-label-offset . [-5 -8 -2 -4 -2])
)
"*An association list between c-mode style variables and
a vector of values, one for each style given in c-styles")
(defvar default-c-style 'Gould
"*The default value of c-style")
(defvar c-style default-c-style
"*The buffer specific c indentation style.
May be one of the symbols in c-styles")
(defun set-c-style (&optional style)
"Set up the c-mode style variables from the c-style variable or if
STYLE argument is given, use that. It makes the c indentation style
variables buffer local."
(interactive)
(if (interactive-p)
(setq style
(let ((style-string
(completing-read
(format "Set c mode 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))
)))
(let* ((new-c-style (or style c-style)) ; use c-style if style not given
(c-style-index (- (length c-styles)
(length (memq new-c-style c-styles))))
)
(make-local-variable 'c-style)
(if (< c-style-index (length c-styles))
(setq c-style new-c-style)
(error (concat "Bad c style: " new-c-style))
)
(message "c-style: %s" c-style)
; finally, set the style variables making each one local
(mapcar (function (lambda (c-style-pair)
(make-local-variable (car c-style-pair))
(set (car c-style-pair)
(aref (cdr c-style-pair) c-style-index))))
c-style-alist)
c-style
)
)liberte@B.CS.UIUC.EDU (Daniel LaLiberte) (08/28/87)
At Stallman's suggestion, I rewrote c-style.el
to make it easier to customize. Now you can prepend your own
style to the c-style-alist.
dan
---
; Definitions for buffer specific c-mode indentation style.
; Written by Daniel LaLiberte (liberte@a.cs.uiuc.edu)
; while at Gould. This is free.
; There are several ways to call set-c-style.
;
; 1. Set the c-style variable in the local variables list
; with "c-style: GNU" or whatever you like and
; call set-c-style without argument in c-mode-hook.
;
; 2. Call set-c-style with style argument in c-mode-hook.
; This will set the style for every c file the same.
;
; 3. Put "eval: (set-c-style 'GNU)" in the local variables list.
;
; 4. Call set-c-style interactively. It prompts for the style name.
; The default value of c-style is default-c-style.
; I put (autoload 'set-c-style "c-style.el" nil t) in my .emacs.
;;; $Header: $
;;;
;;; $Log: $
;;;
;; 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))
))
(defvar default-c-style 'GNU
"*The default value of c-style")
(defvar c-style default-c-style
"*The buffer specific c indentation style.")
(defun set-c-style (&optional style)
"Set up the c-mode style variables from the c-style variable or if
STYLE argument is given, use that. It makes the c indentation style
variables buffer local."
(interactive)
(let ((c-styles (mapcar 'car c-style-alist)))
(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))
)))
(setq style (or style c-style)) ; use c-style if style is nil
(make-local-variable 'c-style)
(if (memq style c-styles)
(setq c-style style)
(error (concat "Bad c style: " 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
)
)