all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Richard Riley <rileyrgdev@googlemail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: Tabs and Spaces
Date: Mon, 25 May 2009 17:36:27 +0200	[thread overview]
Message-ID: <gvedts$93b$1@news.eternal-september.org> (raw)
In-Reply-To: 7cmy919puo.fsf@pbourguignon.anevia.com

pjb@informatimago.com (Pascal J. Bourguignon) writes:

> use.address@my.homepage.invalid (Chris Gordon-Smith) writes:
>
>> Pascal J. Bourguignon <pjb@informatimago.com> wrote:
>>> use.address@my.homepage.invalid (Chris Gordon-Smith) writes:
>>> 
>>>> Pascal J. Bourguignon <pjb@informatimago.com> wrote:
>>>>> use.address@my.homepage.invalid (Chris Gordon-Smith) writes:
>>>>> 
>>>>>> Hello All
>>>>>>
>>>>>> I have recenly started using emacs for programming, after years using 
>>>>>> KDevelop. One problem I have is indenting code. I have my own indentation 
>>>>>> style. and ideally I would like to setup emacs to support it automatically. 
>>>>>> However, in the short term I'll settle for having emacs convert a TAB 
>>>>>> keypress into the correct number of spaces to fill whitespace up to the 
>>>>>> next tabstop.
>>>>>>
>>>>>> At the moment I have
>>>>>>
>>>>>> (global-set-key (kbd "TAB") 'self-insert-command) 
>>>>>>
>>>>>> in my .emacs to force insertion of a tab, but I have to keep invoking 
>>>>>> untabify manually (otherwise my code looks misaligned when I upload it to 
>>>>>> Google Code).
>>>>>>
>>>>>> Can anyone help.
>>>>> 
>>>>> You shouldn't insert TAB, this is very bad.  At the very least, you
>>>>> may compute the number of spaces you need to insert and insert them
>>>>> rather.
>>>> Yes, that's what I would like to do. Can you suggest how to do this. Do I 
>>>> need to put something in my .emacs file. What would it look like?
>>>>
>>>>> 
>>>>> But depending on the language you use, a different mode will be used
>>>>> to edit your source and each mode may provide its own indenting rules.
>>>>> 
>>>>> In the case of Lisp, you may add a indent-function property to the
>>>>> plist of the operator name.
>>>>> 
>>>>> In the case of C, you may customize the variable: c-offsets-alist. See
>>>>> also: c-style-alist ; perhaps there's already a style defined that
>>>>> you'll like.
>>> 
>>> 
>>> In my post, there was a subliminal question, but it didn't reach your
>>> consciousness, I'm sorry.  Here it is:
>>
>> It wasn't really a question, and the fact that you had mentioned that the 
>> solution to the problem might be language dependent did register with me.
>>
>> I think its a pity that you chose to answer in what appears to be a rather 
>> rude manner.
>
> That wasn't intended.  Sorry again.
>
>
>>>   What programming language do you use?
>>
>> C++.  But I had already established before my original post that the 
>> standard emacs indenting would not suit me. Perhaps I should have mentioned 
>> this.
>
> c++-mode is derived from c-mode, you can configure c-offsets-alist and
> possibly define your own c-style in c-style-alist.
>
> The point here is that almost all the syntactic elements of C/C++ are
> already taken into account by the C indenting functions, so you only
> need to specify the indenting you want, and let the existing machinery
> do the work for you.
>
>
>
>>> Depending on the answer you give, you may well have nothing to program.
>>> Otherwise, you could do something like this:
>>> 
>>> (defconst +space+ 32 "ASCII code for the space character")
>>> 
>>> (defun my-language/indent-line ()
>>>   (interactive) 
>>>   (let ((where (let ((m (make-marker))) (set-marker m (point)) m))
>>>         (indent (my-language/get-indent-from-some-parsing-around (point))))
>>>      (beginning-of-line)
>>>      (looking-at "^[ \t]*")
>>>      (delete-region (beginning-of-line) (match-end))
>>>      (goto-char (beginning-of-line))
>>>      (insert (make-string indent +space+))
>>>      (goto-char where)
>>>      (set-marker where nil)))
>>> 
>>> 
>>> (local-set-key (kbd "TAB") 'my-language/indent-line)
>>> 
>>> 
>>> Of course, all the difficulty (or simplicity, depends on your language)
>>> is in implementing my-language/get-indent-from-some-parsing-around.
>>> 
>>> 
>>
>> Thanks for this.
>> I'll need to read it and understand it before I use it, but it looks like a 
>> good starting point.
>
> Well, C++ is quite difficult to parse, so you should really first try
> to configure the existing emacs C indentation feature.
>
> However, if you want to write your own parser, you may use the
> bovinator from cedet: http://cedet.sourceforge.net/
>                       http://cedet.sourceforge.net/semantic.shtml

One can't help but think that that advice is so far from reality for
someone who has just started using emacs that it must be meant as a joke
:-;

Besides which, does cedet not parse c++ already?


  reply	other threads:[~2009-05-25 15:36 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-25 10:48 Tabs and Spaces Chris Gordon-Smith
2009-05-25 11:48 ` Pascal J. Bourguignon
2009-05-25 12:17   ` Chris Gordon-Smith
2009-05-25 13:48     ` Pascal J. Bourguignon
2009-05-25 14:58       ` Chris Gordon-Smith
2009-05-25 15:10         ` Teemu Likonen
2009-05-25 15:58           ` Chris Gordon-Smith
2009-05-25 16:38             ` Pascal J. Bourguignon
2009-05-25 15:14         ` Pascal J. Bourguignon
2009-05-25 15:36           ` Richard Riley [this message]
2009-05-25 16:10             ` Pascal J. Bourguignon
2009-05-25 16:19               ` Richard Riley
2009-05-25 16:15 ` B Smith-Mannschott
2009-05-25 17:03 ` Drew Adams
2009-05-25 21:45 ` Chris Gordon-Smith
2009-05-26  1:08   ` Pascal J. Bourguignon
2009-05-26 21:31     ` Chris Gordon-Smith
2009-05-26 22:03       ` Drew Adams
     [not found]       ` <mailman.7877.1243375379.31690.help-gnu-emacs@gnu.org>
2009-05-26 22:40         ` Pascal J. Bourguignon
2009-05-27 20:38           ` Chris Gordon-Smith
     [not found] ` <mailman.7772.1243271023.31690.help-gnu-emacs@gnu.org>
2009-05-25 21:48   ` Chris Gordon-Smith
     [not found] ` <mailman.7771.1243268169.31690.help-gnu-emacs@gnu.org>
2009-05-26 12:29   ` Francis Moreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='gvedts$93b$1@news.eternal-september.org' \
    --to=rileyrgdev@googlemail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.