Re: Tabs and Spaces

From:

Chris Gordon-Smith

Subject:

Re: Tabs and Spaces

Date:

27 May 2009 20:38:25 GMT

User-agent:

tin/1.9.3-20080506 ("Dalintober") (UNIX) (Linux/2.6.26-2-686 (i686))

Pascal J. Bourguignon <address@hidden> wrote:
> "Drew Adams" <address@hidden> writes:
>
>>> Since it is unlikely that the built in emacs parsing /
>>> indentation will be able to handle my modified syntax,...
>>> For the longer term, I definitely want to work out how
>>> to customise the indentation for my purposes.
>>
>> It's not hard, actually. It's just not well documented (IMO).
>>
>> See the Emacs manual, node `Lisp Indent'.
>>
>> Personally, I think the explanation given there is inadequate, and this (or
>> more) should really be in the Elisp manual (you need some Lisp code to
>> customize
>> indentation of various Lisp sexps) - there is nothing in the Lisp manual
>> about
>> it. I've just filed a doc bug about this.
>>
>> After reading that node, `grep' the Lisp source code for places where it puts
>> property `lisp-indent-function' on various function and macro symbols. Just
>> copy
>> what's done there. See also `C-h f lisp-indent-function', which describes the
>> function that uses the symbol property.
>
> Well sexp indenting is the easy special case.
>
> I would advise rather to have a look at the pascal.el source (where
> pascal-mode and pascal-indent-line are defined). This is probably
> closer to what Chris would need to implement.
>
> However, there is one thing that could be done cf. sexps, is to
> implement the forward-sexp-function hook. This is a function that
> should move the cursor forward (or backward depending on its argument)
> over a number of "sexp" that is, of expressions in the current
> language. So given a cursor before a BEGIN, it would have to move
> after the matching END, and so on for all the kinds of brackets the
> languages allows (for xml, it would have to move from before <tag> to
> after </tag>). In the case of C++ however, there are a lot of
> different brackets, so parsing and matching them is hard and
> puzzling. (And what to do of x<a<b>> (vs. x<a<b> >)).
>
> Anyways, with this hook implemented, a lot of existing functions and
> commands will start to work meaningfully in these buffers, and the
> generic indenting algorithm may be usable.
>
Thanks to you both for this. I've had a quick look at Lisp indent and
pascal.el. This will have to be a 'background' project to pick up every so
often. The reality is that while I would like to get auto indentation
working, my current manual approach works and there are a lot of other
things I need to do.
That being said, it looks like a good way to pick up Emacs Lisp on a real
problem with a real benefit at the end. At the moment though I have very
little understanding of Lisp; its as though it is a useful tool but I don't
even know which end of it to pick up!
One thought that occurred to me is that if I could get the C++ indentation
to treat BEGIN and THEN in the same way as it treats "{", I might be able
to make some headway. Ditto for ENDIF, END and "}". ELSE could be
interesting. I define it as "} else {".
Chris Gordon-Smith
www.simsoup.info