# HG changeset patch # User Richard M. Stallman # Date 744277476 0 # Node ID e7348af6762b336cddaaf6d1c396655410eb5e59 # Parent fdbbde0d4f24ddb50ffda3b6b864c1f89733511c (indent-c-exp): Don't document ENDPOS. (c-indent-region): Rewrite to use indent-c-exp on one sexp at a time, then use c-indent-line on the next line, etc. diff -r fdbbde0d4f24 -r e7348af6762b lisp/progmodes/c-mode.el --- a/lisp/progmodes/c-mode.el Mon Aug 02 07:43:59 1993 +0000 +++ b/lisp/progmodes/c-mode.el Mon Aug 02 07:44:36 1993 +0000 @@ -957,10 +957,10 @@ (beginning-of-defun) (backward-paragraph)) +;; Idea of ENDPOS is, indent each line, stopping when +;; ENDPOS is encountered. But it's too much of a pain to make that work. (defun indent-c-exp (&optional endpos) - "Indent each line of the C grouping following point. -If optional arg ENDPOS is given, indent each line, stopping when -ENDPOS is encountered." + "Indent each line of the C grouping following point." (interactive) (let* ((indent-stack (list nil)) (opoint (point)) ;; May be altered below. @@ -1184,10 +1184,35 @@ (defun c-indent-region (start end) (save-excursion (goto-char start) - (let ((endmark (copy-marker end))) - (and (bolp) (not (eolp)) - (c-indent-line)) - (indent-c-exp endmark) + (let ((endmark (copy-marker end)) + (c-tab-always-indent t)) + (while (and (bolp) (not (eolp))) + ;; Indent one line as with TAB. + (let ((shift-amt (c-indent-line)) + nextline sexpend) + (save-excursion + ;; Find beginning of following line. + (save-excursion + (forward-line 1) (setq nextline (point))) + ;; Find first beginning-of-sexp for sexp extending past this line. + (beginning-of-line) + (while (< (point) nextline) + (condition-case nil + (progn + (forward-sexp 1) + (setq sexpend (point-marker))) + (error (setq sexpend nil) + (goto-char nextline))) + (skip-chars-forward " \t\n"))) + ;; If that sexp ends within the region, + ;; indent it all at once, fast. + (if (and sexpend (> sexpend nextline) (<= sexpend endmark)) + (progn + (indent-c-exp) + (goto-char sexpend))) + ;; Move to following line and try again. + (and sexpend (set-marker sexpend nil)) + (forward-line 1))) (set-marker endmark nil)))) (defun set-c-style (style &optional global)