Backspace Unindents
-
@Alan-Kilborn, @guy038 and All
Haven’t read all this thread, but in case you want to make a comparation, the
Extended Settings pluginprovides a similar feature. Works fine, by the way.Cheers.
-
the Extended Settings plugin provides a similar feature
Sure; I’m actually quite surprised no one earlier in the thread mentioned that.
If I used Extended Settings plugin, I’d like to think I would have mentioned it.
At the time the plugin came out, I already had most of its functionality, thru scripts.I even had a backspace-unindenter script (different from the one above); not realizing that Scintilla provided the function, my script did it manually and was tied to the Backspace key binding.
(In some ways I liked my earlier script better than Scintilla’s function!) -
Hello @alan-kilborn and All,
OK ! When doing tests, the
TABkey was set to write a four positionsTABcharacter and I principally did tests with leadingtabchars ! But never mind, now, I understood the whole thing :First, from the Scintilla documentation, I saw that there a similar message to
BackspaceUnindents, which isTabIndents. Note that, by default Notepad++ starts with theTabIndentsmessage activated and with theBackspaceUnindentsmessage deactivated !So, I created an other python script, called
TabIndents.py, in order to activate/deactivate theTabIndentsmessage. I get absolutely no credit because it’s just a copy/paste of the Alan’s script !from Npp import editor, notepad, NOTIFICATION class TabIndents(object): def __init__(self): self.activated = True notepad.callback(self.callback_for_bufferactivated, [NOTIFICATION.BUFFERACTIVATED]) self.callback_for_bufferactivated(None) # set it for the currently active document def callback_for_bufferactivated(self, args): # this document property won't automatically be applied to newly created tabs; adjust for that: editor.setTabIndents(self.activated) def is_activated(self): return self.activated def set_activated(self, b): self.activated = b self.callback_for_bufferactivated(None) if __name__ == '__main__': try: tab_indents except NameError: tab_indents = TabIndents() notepad.messageBox('TabIndents installed and activated') else: if tab_indents.is_activated(): tab_indents.set_activated(False) notepad.messageBox('TabIndents deactivated') else: tab_indents.set_activated(True) notepad.messageBox('TabIndents activated')
Then I played around, with a sample line of mixed
TABandSPACEchars, both, in the leading part and further on, between usual characters :-
Activating / deactivating the
TabIndents.pyand/or theBaskspaceUnindents.pymessages -
Choosing, either,
1 TABchar of4positions long OR4 SPACEchars, when you hit theTABkey, for language normal, inPreferences... > Language > Tab Settings > normal -
Moving caret within the leading blank chars OR in subsequents blanks ranges, further on, in current line
And, here is, below, a summary of my observations :
Regarding the
BACKSPACEkey behaviour :-
If caret within the
leading blankrange of chars ANDBackspaceUnindentsmessage activated [ NEW backspace behaviour ] :-
If setting TAB to
4 SPACEchars, a hit on theBACKSPACEkey :- Deletes previous char(s) to get the previous indentation level
- Normalizes all preceding blank chars, till beginning of line, to
SPACEchars - Moves the caret after the last leading
SPACEchar
-
If setting TAB to
1 TABchar of4positions long, a hit on theBACKSPACEkey :- Deletes previous char(s) to get the previous indentation level
- Normalizes all preceding blank chars, till beginning of line, to
TABchars - Moves the caret after the last leading
TABchar
-
-
If caret outside the
leading blankrange of chars ORBackspaceUnindentsmessage deactivated OR by DEFAULT, a hit on theBACKSPACEkey :- Deletes previous char to get the correct or previous indentation level
- Leave the caret at current position
Regarding the
TABkey behaviour :-
If caret outside the
leading blankrange of chars, whatever the status of theTabIndentsmessage :-
When setting TAB to
4 SPACEchars, a hit on theTABkey :- Adds up to
4 SPACEchar(s) to get the next indentation level - Leave the caret right after these added
SPACEchar(s)
- Adds up to
-
When setting TAB to a
1 TABof4positions long , a hit on theTABkey :- Adds a
TABchar to get the next indentation level - Leave the caret right after the added
TABchar
- Adds a
-
-
If caret within the
leading blankrange of chars :-
If the
TabIndentsmessage is activated OR by DEFAULT :-
When setting TAB to
4 SPACEchars, a hit on theTABkey :- Adds up to
4 SPACEchar(s) to get the next indentation level - Normalizes all preceding blank chars, till beginning of line, to
SPACEchars - Moves the caret after the last leading
SPACEchar
- Adds up to
-
When setting TAB to a
1 TABof4positions long , a hit on theTABkey :- Adds a
TABchar to get the next indentation level - Normalizes all preceding blank chars, till beginning of line, to
TABchars - Moves the caret after the last leading
TABchar
- Adds a
-
-
If the
TabIndentsmessage is deactivated [ NEW tab behaviour ] :-
When setting TAB to
4 SPACEchars, a hit on theTABkey :- Adds up to
4 SPACEchar(s) to get the next indentation level - Leave the caret right after these added
SPACEchar(s)
- Adds up to
-
When setting TAB to a
1 TABof4positions long , a hit on theTABkey :- Adds a
TABchar to get the next indentation level - Leave the caret right after the added
TABchar
- Adds a
-
-
Best Regards,
guy038
-
-
Based upon @guy038’s in-depth treatment just ABOVE, and some experimentation on my own based upon it, I decided that I think I don’t like how Scintilla’s backspace-unindents works. :-(
So I am getting rid of the script I posted above, and going back to the script I had previously (where I did things much more “manually”), which did more of what I want/expect. :-)