Subject: Re: bug#13642: 24.3.50; python-nav-backward-sexp mishandles string movement

From: Andreas Röhler <[email-masked]>
Date: Wed, 15 May 2013 07:55:51 +0200

Am 07.02.2013 01:12, schrieb Daniel Colascione:
> On 2/6/2013 3:50 PM, Jorgen Schaefer wrote:
>> Hello!
>> In python-mode, I get the following behavior (with _|_ being point):
>>
>> -----
>> def foo():
>>      bar = "bar"
>>      baz = "baz"_|_
>>
>> =>
>>
>> _|_def foo():
>>      bar = "bar"
>>      baz = "baz"
>> -----
>
> That's by design. python-mode tries to emulate lisp movement as much as
> possible, so it considers point to be at the end of a "defun" and tries to skip
> over the entire "defun", back to the beginning.
>
> This functionality appears to be buggy:
>
> def foo():
>      bar = "bar"
>      baz = "baz"
>      x=x()_|_
>
> =>
>
> def foo():
>      bar = "bar"
>      baz = "baz"
>      x=x_|_()
>
> I also find the behavior more counter-intuitive than useful, and I wish
> python-mode acted more like cc-mode here.
>

[ ... ]

hmm, din't think so. In Python that point indicates the end of assignment
baz = "baz"

End of defun is reached with following dedent only.

So the OP's expection seems wrong too:

backward-sexp must reach the beginning of the assigment "baz =..."

BTW in python-mode.el we have py-beginning-of-expression for the OP's want.

Cheers,

Andreas