Page 1 of 1

Treat groups of n consecutive spaces like a tab?

Posted: Thu May 25, 2006 11:34 pm
by mspacek
Hi,

I'd like to convert all of my Python code to use 4 spaces instead of tabs (this is good Python coding style). I'll probably do a find & replace on all my Python files, and then I'll set the "convert new tabs to spaces" checkbox for my Python class in Textpad. No problem.

The thing is, I like the convenience of being able to jump back and forth between different levels of indentation with just a single left or right arrow key press, or a single press of the backspace key. If I switch to spaces instead of tabs, I'll lose that convenience. What previously took a single keypress will now require 4.

Is there any way to get Textpad to treat a group of (n=4 in my case) consecutive spaces as it would a single tab? What I'd like is:

1) If the cursor is followed by n or more spaces, and I hit the right arrow key, the cursor will jump forward n columns.
2) If the cursor is preceded by n or more spaces, and I hit the left arrow key, the cursor will jump backwards n columns.
3) If the cursor is preceded by n or more spaces, and I hit the backspace key, the preceding n spaces will be deleted and the cursor will jump backwards n columns.

The fourth obvious item would be to have a tab keypress generate n spaces, but Textpad already does that.

Any tips or workarounds would be greatly appreciated.

Cheers,

Martin

Posted: Tue May 30, 2006 9:39 pm
by mmcalli
Make sure you have a Python document class. Then go to Tools -> Preferences -> Document Classes, and select the document class associated with your file extension. Within that document class, select the "Tabulation" option. Then:-

- Set default spacing to 4
- Select indent size to 4
- Check the options "convert new tabs to spaces" and "convert existing tabs to spaces when saving files."

Also, try this. Select a block of code. With the code selected, hit the tab key. Watch it be nicely indented 4 spaces (or whatever your indent size is). With the code selected, hit shift-tab .... watch the indentation be reduced. All nicely. You can also do this on a new line with now code in it - tab and shift-tab to jump in and out your default indent size.

Enjoy!

Mike

Posted: Tue May 30, 2006 10:15 pm
by talleyrand
For your movement, you can also use either Ctrl+Left/ Ctrl+B or Ctrl+Right / Ctrl+W to skip to the next word.

Posted: Tue May 30, 2006 11:10 pm
by mspacek
Thanks, but like I said, I'd like to be able to move back and forth between indentations using only the cursor keys. Also, I'd like to be able to delete only n spaces at a time. I can delete all the spaces to the left or right of the cursor using Ctrl+Backspace and Ctrl+Del, but that's not the behaviour I want.

I guess this is really more of a feature request: to have the ability to treat an arbitrary number of spaces the way a single tab character is treated, specifically via the keyboard.

Martin

Posted: Mon Jun 05, 2006 7:41 pm
by mspacek
Well, I just realized I should really be using the Increase and Reduce Indent commands. What I like about them is that you can be anywhere on the line (not necessarily before the text you want to indent/unindent), and the whole line will move forward or backward one indent. Duh. You can select multiple lines and indent/unindent them all at once. Even those that are only partially selected still get indented/unindented. This is great cuz it allows for laziness in cursor positioning and text selection, which makes it really fast.

The default key mappings for this are Ctrl-I and Ctrl-Shift-I. To make it a bit more intuitive, I've added Ctrl-. (that's lowercase >) for IndentMore and Ctrl-, (lowercase <) and Ctrl-U for IndentLess.

I'm off to convert all my Python code to use 4 spaces instead of tabs...

Cheers,

Martin

Posted: Tue Jun 06, 2006 4:03 am
by mspacek
Another note:

Let's say I'm on a blank line and I hit tab to indent. Sometimes I tab one too many times, and I want to delete the unwanted spaces back to the previous tab stop, without having to hit Backspace however many times. IndentLess doesn't seem to work for a line with only spaces on it. So, I made the following macro and assigned it to Shift-Backspace:

Shift-Tab - this gets you back to the previous tab stop
Ctrl-Shift-Right - this highlights from the previous tab stop to the end of the extraneous spaces
Del - this deletes all of the extraneous spaces

Is there a built-in command that already does this?

I'd like to have the option of getting the same behaviour just by hitting Backspace, but this'll do for now.

Cheers,

Martin