[Geany] Problem: about tabs and indentation.
Nick Treleaven
nick.treleaven at xxxxx
Fri Jul 18 11:51:44 UTC 2008
On Wed, 16 Jul 2008 08:04:42 +0200
Joerg Desch <jd.vvd at web.de> wrote:
> As I could read in the Scintilla docs (your link), Scintilla supports
> both, real tab-width and indentation-with.
>
> The difference is (or should be), that tabs are some kind of
> "compression". Tabs are normally used without a special file type in
> mind.
>
> Indentation is a more logical thing. The indentation depends on the
> file type and the logical content (surrounding the cursor). So
> indentation uses whitespaces (and so tabs) to indent the line to this
> logical position.
>
> For example: Writing a simple C-function, the indentation is a
> multiple of 4.
>
> void foo ( int i )
> {
> if ( i>0 )
> [next_command]
OK, I think I understand. So if tab width is set to 8, then in the
example above it would use 4 spaces for the if command, but for the
next command it would use a tab instead of 8 spaces.
This seems to be what the GTK code does (e.g. gtkfilechooserdefault.c),
it looks like their indent width is 2 spaces, and tabs are equivalent
to 8 spaces (but sometimes they don't bother with tabs even though
there are >8 spaces).
> Another example is Emacs. It uses indentation for "hanging arguments"
> too.
>
> void foo ( int i )
> {
> if ( i>0 )
> some_function_call(long_parameter_name_as_example,
> second_long_parameter);
>
>
> Pressing "indent" in Emacs at "second_long_parameter" indents the line
> according to the first parameter. This is not a multiple of 4. Thats
> what I mean with "logical thing".
>
> When tabs are enabled, most editors I know uses tabs within
> whitespaces to realise the indentation. In the above example, the
> indentation would be done with three tabs and three spaces.
Geany allows a mixture of tabs and spaces when tabs are enabled.
> > > To obtain tabs (if enabled) it would be good if 8 (or x) spaces
> > > are replaced with a tab right after the indentation (Ctrl-I).
> > > What is the right way to do this? Can you point me to an
> > > file/function which should be patched?
> >
> > I don't know what you mean, I'm not sure why we need to replace
> > spaces/tabs.
>
> It's just for consistency reasons. If tabs are enabled, they should
> be used.
This is the point that confused me before, Geany's tab Indent Type
setting makes tabs = indentation. You would want a different setting
which applies when the space Indent Type is enabled - something like
'Compress spaces to tabs'.
> To resume this thread:
>
> Geany currently configures tabs with SCI_SETTABWIDTH. To separate tabs
> and indentation, the configuration dialog should ask for the
> indentation width and set SCI_SETINDENT with this value.
It might not be this simple, Geany's codebase expects tabs to mean
indentation width. But I think this is worth implementing. I'll add a
TODO item.
> There must
> be a hook to change SCI_SETINDENT for each filetype.
This could be implemented, a filetype-based indent width.
> would be nice, if the configuration dialog would support
> SCI_SETTABINDENTS(bool) too.
Why?
> Thanks for your answers. I think I'll have a look at this as soon as I
> have some spare time.
Thanks for explaining this, I didn't understand it before ;-)
Regards,
Nick
More information about the Users
mailing list