From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: pjb@informatimago.com (Pascal J. Bourguignon) Newsgroups: gmane.emacs.help Subject: Re: Tabs and Spaces Date: Mon, 25 May 2009 17:14:39 +0200 Organization: Anevia SAS Message-ID: <7cmy919puo.fsf@pbourguignon.anevia.com> References: <77vbbiF1jhhubU1@mid.individual.net> <7chbz9bdyu.fsf@pbourguignon.informatimago.com> <77vgiiF1jjcfrU1@mid.individual.net> <7czld19ttv.fsf@pbourguignon.informatimago.com> <77vq0cF1jh3k6U1@mid.individual.net> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1243267931 16964 80.91.229.12 (25 May 2009 16:12:11 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 25 May 2009 16:12:11 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Mon May 25 18:12:05 2009 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1M8cmS-0001ez-Qm for geh-help-gnu-emacs@m.gmane.org; Mon, 25 May 2009 18:12:05 +0200 Original-Received: from localhost ([127.0.0.1]:56049 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M8cmS-0006cL-6w for geh-help-gnu-emacs@m.gmane.org; Mon, 25 May 2009 12:12:04 -0400 Original-Path: news.stanford.edu!newsfeed.stanford.edu!news.tele.dk!news.tele.dk!small.news.tele.dk!tiscali!newsfeed1.ip.tiscali.net!proxad.net!feeder1-2.proxad.net!cleanfeed1-a.proxad.net!nnrp16-1.free.fr!not-for-mail Original-Newsgroups: gnu.emacs.help Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en X-Disabled: X-No-Archive: no User-Agent: Gnus/5.101 (Gnus v5.10.10) Emacs/22.2 (gnu/linux) Cancel-Lock: sha1:OWYzZWVjY2EyOTkzNTlmNzVhNmVjZWQxOWNkNWYwZTJjYWFhNWE5Ng== Original-Lines: 112 Original-NNTP-Posting-Date: 25 May 2009 17:14:39 MEST Original-NNTP-Posting-Host: 88.170.236.224 Original-X-Trace: 1243264479 news-3.free.fr 29451 88.170.236.224:56788 Original-X-Complaints-To: abuse@proxad.net Original-Xref: news.stanford.edu gnu.emacs.help:169464 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:64696 Archived-At: use.address@my.homepage.invalid (Chris Gordon-Smith) writes: > Pascal J. Bourguignon wrote: >> use.address@my.homepage.invalid (Chris Gordon-Smith) writes: >> >>> Pascal J. Bourguignon 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 -- __Pascal Bourguignon__