 	      endpos searching found)
 	 (if open-bracket-pos
 	     (progn
-	       ;; if preceding line in same structure, presumably the
-	       ;; user already has an indentation they like for this
-	       ;; structure, so just copy it
-	       (forward-line -1)
-	       (while (looking-at "[ \t]*[#\n]")
-		 (forward-line -1))	; ignore noise lines
-	       (if (eq open-bracket-pos (py-nesting-level))
-		   (current-indentation)
-		 ;; else copy the indentation of the first item (if
-		 ;; any) in this structure
-		 (goto-char startpos)
-		 (condition-case nil
-		     (progn (backward-list) (setq found t))
-		   (error nil))		; no preceding item
-		 (goto-char (1+ open-bracket-pos)) ; just beyond bracket
-		 (if found
-		     (progn
-		       (while (looking-at "[ \t]*[#\n\\\\]")
-			 (forward-line 1))
-		       (skip-chars-forward " \t")
-		       (current-column))
-		   ;; else to first real character (not whitespace or
-		   ;; comment hash) after open bracket; if none, to
-		   ;; 1 beyond the open bracket
-		   (and (looking-at "[ \t]*[^ \t\n#]")
-			(goto-char (1- (match-end 0))))
-		   (current-column))))
+	       ;; align with first item in list; else a normal
+	       ;; indent beyond the line with the open bracket
+	       (goto-char (1+ open-bracket-pos)) ; just beyond bracket
+	       ;; is the first list item on the same line?
+	       (skip-chars-forward " \t")
+	       (if (null (memq (following-char) '(?\n ?# ?\\)))
+		   ; yes, so line up with it
+		   (current-column)
+		 ;; first list item on another line, or doesn't exist yet
+		 (forward-line 1)
+		 (while (and (< (point) startpos)
+			     (looking-at "[ \t]*[#\n\\\\]")) ; skip noise
+		   (forward-line 1))
+		 (if (< (point) startpos)
+		     ;; again mimic the first list item
+		     (current-indentation)
+		   ;; else they're about to enter the first item
+		   (goto-char open-bracket-pos)
+		   (+ (current-indentation) py-indent-offset))))
 
 	   ;; else on backslash continuation line
 	   (forward-line -1)


If a line is a continuation line by virtue of being in an unclosed
paren/bracket/brace structure (`list', for short), the suggested
indentation depends on whether the current line will contain the first
item in the list.  If it is the first item, it's indented to line up with
the first non-whitespace and non-comment character following the list's
opening bracket; if no such character exists, it's indented to one column
beyond the opening bracket.  If you don't like that, change it by hand.
The remaining items in the list will mimic whatever indentation you gave
to the first item.

If a line is a continuation line because the line preceding it ends with
a backslash, the third and following lines of the statement inherit their

		       (setq searching nil) ; done searching in any case
		       (setq found
			     (not (or
				   (eq (following-char) ?=)
				   (memq (char-after (- (point) 2))
					 '(?< ?> ?!)))))))))
	     (if (or (not found)	; not an assignment
