changeset 101593:84cb9ad20593

(perl-indent-line-command): Call indent-region if region is active. Use cond instead of nested ifs.
author Chong Yidong <cyd@stupidchicken.com>
date Wed, 28 Jan 2009 02:17:29 +0000
parents af8051ca04f7
children 76012a3bc99d
files lisp/progmodes/perl-mode.el
diffstat 1 files changed, 54 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/perl-mode.el	Wed Jan 28 02:16:45 2009 +0000
+++ b/lisp/progmodes/perl-mode.el	Wed Jan 28 02:17:29 2009 +0000
@@ -630,18 +630,20 @@
 ;;    (error nil)))
 
 (defun perl-indent-command (&optional arg)
-  "Indent current line as Perl code, or optionally, insert a tab character.
-
-With an argument, indent the current line, regardless of other options.
+  "Indent Perl code in the active region or current line.
+In Transient Mark mode, when the region is active, reindent the region.
+Otherwise, with a prefix argument, reindent the current line
+unconditionally.
 
-If `perl-tab-always-indent' is nil and point is not in the indentation
-area at the beginning of the line, simply insert a tab.
+Otherwise, if `perl-tab-always-indent' is nil and point is not in
+the indentation area at the beginning of the line, insert a tab.
 
-Otherwise, indent the current line.  If point was within the indentation
-area it is moved to the end of the indentation area.  If the line was
-already indented properly and point was not within the indentation area,
-and if `perl-tab-to-comment' is non-nil (the default), then do the first
-possible action from the following list:
+Otherwise, indent the current line.  If point was within the
+indentation area, it is moved to the end of the indentation area.
+If the line was already indented properly and point was not
+within the indentation area, and if `perl-tab-to-comment' is
+non-nil (the default), then do the first possible action from the
+following list:
 
   1) delete an empty comment
   2) move forward to start of comment, indenting if necessary
@@ -649,50 +651,55 @@
   4) create an empty comment
   5) move backward to start of comment, indenting if necessary."
   (interactive "P")
-  (if arg				; If arg, just indent this line
-      (perl-indent-line "\f")
-    (if (and (not perl-tab-always-indent)
-	     (> (current-column) (current-indentation)))
-	(insert-tab)
-      (let* ((oldpnt (point))
-	     (lsexp (progn (beginning-of-line) (point)))
-	     (bof (perl-beginning-of-function))
-	     (delta (progn
-		      (goto-char oldpnt)
-		      (perl-indent-line "\f\\|;?#" bof))))
-	(and perl-tab-to-comment
-	     (= oldpnt (point))		; done if point moved
-	     (if (listp delta)		; if line starts in a quoted string
-		 (setq lsexp (or (nth 2 delta) bof))
-	       (= delta 0))		; done if indenting occurred
-	     (let ((eol (progn (end-of-line) (point)))
-		   state)
-	       (if (= (char-after bof) ?=)
-		   (if (= oldpnt eol)
-		       (message "In a format statement"))
-		 (setq state (parse-partial-sexp lsexp eol))
-		 (if (nth 3 state)
-		     (if (= oldpnt eol)	; already at eol in a string
-			 (message "In a string which starts with a %c."
-				  (nth 3 state)))
-		   (if (not (nth 4 state))
-		       (if (= oldpnt eol) ; no comment, create one?
-			   (indent-for-comment))
-		     (beginning-of-line)
-		     (if (and comment-start-skip
-			      (re-search-forward comment-start-skip eol 'move))
+  (cond ((use-region-p)            ; indent the active region
+	 (indent-region (region-beginning) (region-end)))
+	(arg
+	 (perl-indent-line "\f"))  ; just indent this line
+	((and (not perl-tab-always-indent)
+	      (> (current-column) (current-indentation)))
+	 (insert-tab))
+	(t
+	 (let* ((oldpnt (point))
+		(lsexp (progn (beginning-of-line) (point)))
+		(bof (perl-beginning-of-function))
+		(delta (progn
+			 (goto-char oldpnt)
+			 (perl-indent-line "\f\\|;?#" bof))))
+	   (and perl-tab-to-comment
+		(= oldpnt (point))   ; done if point moved
+		(if (listp delta)    ; if line starts in a quoted string
+		    (setq lsexp (or (nth 2 delta) bof))
+		  (= delta 0))	     ; done if indenting occurred
+		(let ((eol (progn (end-of-line) (point)))
+		      state)
+		  (cond ((= (char-after bof) ?=)
+			 (if (= oldpnt eol)
+			     (message "In a format statement")))
+			((progn (setq state (parse-partial-sexp lsexp eol))
+				(nth 3 state))
+			 (if (= oldpnt eol) ; already at eol in a string
+			     (message "In a string which starts with a %c."
+				      (nth 3 state))))
+			((not (nth 4 state))
+			 (if (= oldpnt eol) ; no comment, create one?
+			     (indent-for-comment)))
+			((progn (beginning-of-line)
+				(and comment-start-skip
+				     (re-search-forward
+				      comment-start-skip eol 'move)))
 			 (if (eolp)
-			     (progn	; delete existing comment
+			     (progn	    ; delete existing comment
 			       (goto-char (match-beginning 0))
 			       (skip-chars-backward " \t")
 			       (delete-region (point) eol))
 			   (if (or (< oldpnt (point)) (= oldpnt eol))
 			       (indent-for-comment) ; indent existing comment
-			     (end-of-line)))
-		       (if (/= oldpnt eol)
-			   (end-of-line)
+			     (end-of-line))))
+			((/= oldpnt eol)
+			 (end-of-line))
+			(t
 			 (message "Use backslash to quote # characters.")
-			 (ding t))))))))))))
+			 (ding t)))))))))
 
 (defun perl-indent-line (&optional nochange parse-start)
   "Indent current line as Perl code.