Mercurial > emacs
changeset 4419:e7348af6762b
(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.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 02 Aug 1993 07:44:36 +0000 |
parents | fdbbde0d4f24 |
children | 8113d9ba472e |
files | lisp/progmodes/c-mode.el |
diffstat | 1 files changed, 32 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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)