On August 25, 2020 at 9:13 PM, "Rob McBroom" <mailinglist0@skurfer.com> wrote:

I forget the details of the behavior I didn’t like before, but I use

disableIndentCorrections = 'emptyLines'

Give that a try. Python is my primary language and it mostly does what I want.


Thanks, that did the trick! This behaviour should probably be the default for python.
 

The exceptions:

It doesn’t auto-indent after (, but that’s probably the language grammar.


I though it would be just a matter of adding ( and ) to increase/decrease indent patterns, but that doesn't seem to have any effect whatsoever. In fact, removing the part of the increase/decrease indent pattern regexes matching [{ and }] doesn't change the current behaviour, so it seems that it is handled differently. Googling, I found a thread that suggests that auto-indent of paired [] and {} is based a macro triggered by the return key when in a certain scope: 
http://textmate.1073791.n5.nabble.com/txmt-dev-Working-with-indentation-rules-td26867.html
(about half-way down the conversation)

I say we need some authoritative advice here ;)

 

After a block like

class MyClass:
    def action(self):
        pass


Hitting ⇥ at the location shown above will line up with pass and not the previous def. I guess it’s doing the thing that makes sense, even though it’s never what I want and bites me almost daily.


Yeah, I agree.  A bit ugly workaround is to add a snippet that applies when caret is in the leftmost position, e.g.:
   
`printf "%*s" ${TM_TAB_SIZE} ''`$0

and setting the scope selector to L:(source.python dyn.caret.begin.line) and key equivalent to ⇥.
This would obviously only work if you use spaces for tabs...

Cheers,
Per