jed-users mailing list

[2009 Date Index] [2009 Thread Index] [Other years]
[Thread Prev] [Thread Next]      [Date Prev] [Date Next]

Re: shell-mode with indentation


On Thu, 5 Mar 2009 09:51:16 +0100
Martin Klaiber <martinkl@xxxxxxxxxxxxxxxxxx> wrote:

> Does someone know of an improved version of shmode.sl which supports
> indentation?  Or any other way to get indentation when writing shell
> scripts for unix/linux (bourne-shell-like).
> 
> TIA, Martin
> 
Hi, 

A lot of time ago (circa 2002), I wrote an extended version of
shmode.sl, just to add indentation support.

While the indentation algorithm is far from perfect, is does a good job
on most cases. I use it and I don't remember having big problems with
it, but as I wrote it, maybe is targeted at my coding style...

As there are some known cases that makes the indentation misbehave, I
just added a "backdoor" to restore the correct indentation. So, for
example:

--------
echo "$BackupPatterns" | while read i ; do
    ls -a "$1" | grep "$i" 2> /dev/null \
       | while read line ; do
          echo "$1/$line"
       done
    done # <-- Bad! Should be at 'echo "$BackupPatterns" | ...' level! 
    IFS="$SaveIFS" #  <-- and the error propagates.
--------

the mis-indentation can be fixed adding a marker, as in:

--------
echo "$BackupPatterns" | while read i ; do
        ls -a "$1" | grep "$i" 2> /dev/null \
                | while read line ; do
                        echo "$1/$line"
                done
        #!# -1 fix indentation
done # now this is ok
IFS="$SaveIFS" #  <-- and so on
--------

Note t marker '#!# -1 etc': this tells to the indentation algorithm to
correct indentation adding a '-1' indentation level. Obviously you can
use any number there.

The marker can be configured defining the variable
'SH_INDENT_FIX_MARKER', and defaults to '#!#'.

Hope this helps!

Dino

Attachment: shmode.sl
Description: Binary data

Attachment: signature.asc
Description: PGP signature


[2009 date index] [2009 thread index]
[Thread Prev] [Thread Next]      [Date Prev] [Date Next]