diff options
author | Barry Warsaw <barry@python.org> | 1998-01-20 22:52:56 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1998-01-20 22:52:56 (GMT) |
commit | c210e69981f2fbacfe72d04df4a3b8f2306b8f33 (patch) | |
tree | bc85d4143082eb0255e740185d8a4e553b6f7054 /Misc | |
parent | c0ecb53194c5835bf355e5ddfc17524bd477e476 (diff) | |
download | cpython-c210e69981f2fbacfe72d04df4a3b8f2306b8f33.zip cpython-c210e69981f2fbacfe72d04df4a3b8f2306b8f33.tar.gz cpython-c210e69981f2fbacfe72d04df4a3b8f2306b8f33.tar.bz2 |
(py-compute-indentation): In the most common case, where indentation
is based on the line above, watch out for landing inside a triple
quoted string. In this case, use iterative search +
parse-partial-sexp backwards to find the beginning of the string.
Note this does affect performance, but very little in the common cases
(I hope). It could be made *much* faster by adding Emacs and XEmacs
dependent code -- different code naturally. :-(
Fixes the following reported bug:
if len(sys.argv) >= 6:
# More lines here
fptr = open('/etc/hosts', 'w')
fptr.write("""# /etc/hosts -- autocreated by /etc/ppp/ip-up
#
# Address from pppd
%-15s %s
# For loopbacking
127.0.0.1 localhost
255.255.255.255 broadcast
""" % (ipaddr, ipname) )
os.chmod('/etc/hosts', 0644)
Diffstat (limited to 'Misc')
-rw-r--r-- | Misc/python-mode.el | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Misc/python-mode.el b/Misc/python-mode.el index 4dd1de6..a209f5b 100644 --- a/Misc/python-mode.el +++ b/Misc/python-mode.el @@ -1579,6 +1579,11 @@ the new line indented." ;; if we landed inside a string, go to the beginning of that ;; string. this handles triple quoted, multi-line spanning ;; strings. + (let ((skip (nth 3 (parse-partial-sexp bod (point))))) + (while skip + (py-safe (search-backward (make-string 1 skip))) + (setq skip (nth 3 (parse-partial-sexp bod (point)))))) + ;; now skip backward over continued lines (py-goto-initial-line) (+ (current-indentation) (if (py-statement-opens-block-p) @@ -2527,8 +2532,11 @@ local bindings to py-newline-and-indent.")) ;; blocks, whether of the backslash or open-bracket varieties, or a ;; mix of the two. The following manages to do that in the usual ;; cases. +;; +;; Also, if we're sitting inside a triple quoted string, this will +;; drop us at the line that begins the string. (defun py-goto-initial-line () - (let ( open-bracket-pos ) + (let (open-bracket-pos state strchr bod done) (while (py-continuation-line-p) (beginning-of-line) (if (py-backslash-continuation-line-p) |