Backspace Unindents
-
as I understand it is a document property. Let me give it a quick try.
-
@dinkumoil
Yes, should work as it is bind to the document.
Script used to test:from Npp import editor editor.setProperty('secret_text','blablabla') print(editor.getProperty('secret_text')) -
I don’t know the Python API for Npp. The editor object represents a single text buffer? Or an instance of Scintilla?
-
editor is an scintilla instance but the property is set on document level.
-
Hmm, which document? The active one?
-
yes if editor is used. And in case editor1 or 2 is used, then the
current viewable document. -
OK, then it’s worth to try using Scintilla’s properties for a text buffer management. But as I have a working system I will not change it. But I’m interested in knowing how that approach works.
-
Never change a running system!!! :-D
-
just a quick test
from Npp import editor1, notepad def loop_files(): for file in notepad.getFiles(): notepad.activateFile(file[0]) print(f'file: {file}') print(f' secret_text:{editor1.getProperty("secret_text")}') loop_files() notepad.activateFile('new 3') editor1.setProperty('secret_text', 'blablabla') loop_files()returned
file: ('new 1', 44120304, 0, 0) secret_text: file: ('new 2', 112914256, 1, 0) secret_text: file: ('new 3', 112915984, 2, 0) secret_text: file: ('new 4', 112916416, 3, 0) secret_text: file: ('new 5', 112915552, 4, 0) secret_text: file: ('new 6', 112916848, 0, 1) secret_text: file: ('new 1', 44120304, 0, 0) secret_text: file: ('new 2', 112914256, 1, 0) secret_text: file: ('new 3', 112915984, 2, 0) secret_text:blablabla file: ('new 4', 112916416, 3, 0) secret_text: file: ('new 5', 112915552, 4, 0) secret_text: file: ('new 6', 112916848, 0, 1) secret_text:Btw. setting and reading the value takes about ~20 microseconds each for python.
-
FYI, SCI_GETPROPERTY and SCI_SETPROPERTY are put to good use by @Claudia-Frank in the File Specific word wrap (vs. global enable) discussion thread, specifically, THIS POSTING.
-
@Michael-Vincent said in Backspace Unindents:
In a previous thread I mentioned I started using backspace unindents
THIS POSTING must be that reference to a previous thread.
-
So for anybody interested, I turned the addition of the backspace-unindent capability into a PythonScript.
I put it in a
BackspaceUnindents.pyfile:from Npp import editor, notepad, NOTIFICATION class BackspaceUnindents(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.setBackSpaceUnIndents(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: backspace_unindents except NameError: backspace_unindents = BackspaceUnindents() notepad.messageBox('BackspaceUnindents installed and activated') else: if backspace_unindents.is_activated(): backspace_unindents.set_activated(False) notepad.messageBox('BackspaceUnindents deactivated') else: backspace_unindents.set_activated(True) notepad.messageBox('BackspaceUnindents activated')I set mine to run from
startup.pyas follows:import BackspaceUnindents backspace_unindents = BackspaceUnindents.BackspaceUnindents()but it can be run manually with or without that. Run it once to turn it on, run again to turn off.
-
Hi, @alan-kilborn, @ekopalypse, @michael-vincent and All,
Alan, Just tried your
BackspaceUnindents.pywith no difference seen between the two states, although the script seems to work nice ?!Did I clearly understand what’s for ? I mean, from the link below :
https://www.scintilla.org/ScintillaDoc.html#SCI_SETBACKSPACEUNINDENTS
I supposed that the Python script alternatively change the behaviour of the Backspace key :
-
By default or when the
BackspaceUnindentsprocess is deactivated, a hit on theBackspacekey deletes the previous indentation -
When the
BackspaceUnindentsprocess is activated, a hit on theBackspacekey simply moves the caret to the previous indentation location
Am I right about it ? What I miss, there ?
Best Regards
guy038
-
-
Hmmm, not sure.
For me, without the script or with it deactivated, on a line that contains only lots of space characters and the caret right before the line ending, pressing Backspace repeatedly will remove one space at a time.
With the script active, in the same situation, the Backspace key will remove 4 spaces with each press (I have my tabs setting to insert 4 spaces per tab), assuming I started with a number of spaces evenly divisible by 4.
I suppose, if one has tab set to insert tab characters, backspacing those out of existence will work the same either with the script of without it.
-
@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. :-)
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login