Function: c-indent-exp

c-indent-exp is an interactive and byte-compiled function defined in cc-cmds.el.gz.

Signature

(c-indent-exp &optional SHUTUP-P)

Documentation

Indent each line in the balanced expression following point syntactically.

If optional SHUTUP-P is non-nil, no errors are signaled if no balanced expression is found.

View in manual

Probably introduced at or before Emacs version 22.1.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/cc-cmds.el.gz
(defun c-indent-exp (&optional shutup-p)
  "Indent each line in the balanced expression following point syntactically.
If optional SHUTUP-P is non-nil, no errors are signaled if no
balanced expression is found."
  (interactive "*P")
  (c-with-string-fences
   (let ((here (point-marker))
	 end)
     (set-marker-insertion-type here t)
     (unwind-protect
	 (let ((start (save-restriction
			;; Find the closest following open paren that
			;; ends on another line.
			(narrow-to-region (point-min) (c-point 'eol))
			(let (beg (end (point)))
			  (while (and (setq beg (c-down-list-forward end))
				      (setq end (c-up-list-forward beg))))
			  (and beg
			       (eq (char-syntax (char-before beg)) ?\()
			       (1- beg))))))
	   ;; sanity check
	   (if (not start)
	       (unless shutup-p
		 (error "Cannot find start of balanced expression to indent"))
	     (goto-char start)
	     (setq end (c-safe (scan-sexps (point) 1)))
	     (if (not end)
		 (unless shutup-p
		   (error "Cannot find end of balanced expression to indent"))
	       (forward-line)
	       (if (< (point) end)
		   (c-indent-region (point) end)))))
       (goto-char here)
       (set-marker here nil)))))