- (let ((region-of-change (list (point) (point))))
- (cl-loop for i from 1 to (or parg 1)
- with finished = nil
- while (not finished)
- do
- (condition-case err
- (let ((close-paren-movement
- (funcall adjust-function)))
- (if close-paren-movement
- (setq region-of-change
- (list (min (car region-of-change)
- (car close-paren-movement)
- (cadr close-paren-movement))
- (max (cadr region-of-change)
- (car close-paren-movement)
- (cadr close-paren-movement))))
- (setq finished t)))
- (scan-error (setq finished err))))
- (apply 'indent-region region-of-change))
- (back-to-indentation)
- t)
-
-(defun lisp-indent-adjust-parens (&optional parg)
+ (if (adjust-parens-p)
+ (let* ((parg (prefix-numeric-value raw-parg))
+ (adjust-function (if (and parg (< parg 0))
+ adjust-function-negative
+ adjust-function))
+ (region-of-change (list (point) (point))))
+ (cl-loop for i from 1 to (or (and parg (abs parg)) 1)
+ with finished = nil
+ while (not finished)
+ do
+ (condition-case err
+ (let ((close-paren-movement
+ (funcall adjust-function)))
+ (if close-paren-movement
+ (setq region-of-change
+ (list (min (car region-of-change)
+ (car close-paren-movement)
+ (cadr close-paren-movement))
+ (max (cadr region-of-change)
+ (car close-paren-movement)
+ (cadr close-paren-movement))))
+ (setq finished t)))
+ (scan-error (setq finished err))))
+ (apply 'indent-region region-of-change)
+ (back-to-indentation)
+ t)
+ (funcall fallback-function raw-parg)))
+
+(defcustom adjust-parens-fallback-indent-function 'indent-for-tab-command
+ "The function to call with prefix arg instead of
+adjust-parens-and-indent when adjust-parens-p returns false."
+ :type 'function
+ :group 'adjust-parens)
+(defun lisp-indent-adjust-parens (&optional raw-parg)