From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Jan Misol Newsgroups: gmane.emacs.help Subject: Re: regexp / replacement for variable Date: Sun, 22 Feb 2004 13:18:21 +0100 Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Message-ID: <40389E0D.9060408@liblss.org> References: NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1077452486 21985 80.91.224.253 (22 Feb 2004 12:21:26 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sun, 22 Feb 2004 12:21:26 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Sun Feb 22 13:21:17 2004 Return-path: Original-Received: from monty-python.gnu.org ([199.232.76.173]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1Ausbl-0006ej-00 for ; Sun, 22 Feb 2004 13:21:17 +0100 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.30) id 1AusbU-000694-6t for geh-help-gnu-emacs@m.gmane.org; Sun, 22 Feb 2004 07:21:00 -0500 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.30) id 1Ausaa-00060s-Cb for help-gnu-emacs@gnu.org; Sun, 22 Feb 2004 07:20:04 -0500 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.30) id 1Ausa1-0005eu-DO for help-gnu-emacs@gnu.org; Sun, 22 Feb 2004 07:20:01 -0500 Original-Received: from [217.115.142.79] (helo=marge.webpack.hosteurope.de) by monty-python.gnu.org with esmtp (Exim 4.30) id 1AusYp-00052S-Sg for help-gnu-emacs@gnu.org; Sun, 22 Feb 2004 07:18:16 -0500 Original-Received: from liblss.org (misol.home.cs.tu-berlin.de [130.149.149.92]) (authenticated) by marge.webpack.hosteurope.de (8.11.6/8.11.6) with ESMTP id i1MCIBG27866 for ; Sun, 22 Feb 2004 13:18:11 +0100 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040208 X-Accept-Language: de, en Original-To: help-gnu-emacs@gnu.org In-Reply-To: X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.2 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.help:17070 X-Report-Spam: http://spam.gmane.org/gmane.emacs.help:17070 Thanks, this was very helpful ... (Sorry, the last mail reached you directly ...) Adding: (add-hook 'find-file-hooks 'auto-insert) to my .emacs does it already! So I had to upgrade my requirements :) I found http://www.linuxgazette.com/issue39/marsden.html, and now it looks like this: (define-auto-insert (cons "\\.\\([hH].*\\)\\'" "User defined C/C++ header") '(nil "/*" " * Filename: " (buffer-name) "\n" " * Author: " (user-full-name) " <" user-mail-address ">\n" " * Time-stamp: <>\n" " */\n" (let* ((prfx (substring buffer-file-name 0 (match-beginning 0))) (sffx (substring buffer-file-name (match-beginning 1) (match-end 0))) (prfx (file-name-nondirectory prfx)) (ident (concat "_" (upcase prfx) "_" (upcase sffx) "_"))) (concat "#ifndef " ident "\n" "#define " ident "\n\n\n\n" "#endif /* " ident " */\n")))) (add-hook 'write-file-hooks 'time-stamp) Jan lawrence mitchell wrote: > Jan Misol wrote: > > > [...] > > >>>c-x c-f test.h > > >>should automatically insert: > > >> #ifndef _TEST_H_ >> #ifndef _TEST_H_ > > >> #endif > > > [...] > > >> (defun new-c-header () >> "Insert c-header skeleton." >> (interactive "") >> (progn >> (setq bname (upcase(buffer-name))) >> (insert >> (message "#ifndef %s\n\#define %s\n\n#endif" >> bname bname)))) > > >>Apart from knowing that "message" might not be the right >>choice here, I don't know how to modify the value of bname!? >>"replace-regexp" doesn't seem to be the what I'm looking for. > > > Well, how about using `file-name-sans-extension' to strip the > trailing .h, and then insert using `format'. > > (defun my-new-c-header () > (interactive) > (let ((name (upcase (file-name-sans-extension (buffer-file-name))))) > ;; Only insert if _name_H isn't already defined. > (unless (save-excursion > (goto-char (point-min)) > (search-forward (format "#ifndef _%s_H" name)) > (insert (format "#ifndef _%s_H\n#define _%s_H\n\n#endif")))))) > > >>(and how could the new-c-header() be invoked by creating a >>new .h/.cpp file?) > > > You could then either add this as a hook to `c-mode-hook' or > `find-file-hooks'. In the case of the latter, you'd want to > predicate it on being a header file. In fact, you'd want to do > the same for the former too. > > You could do this by adding an extra test to the `unless' form > in the above function. > > say: > > (unless (and (string-match "\\.h") (buffer-file-name) > ...) > ...) > > Slightly orthogonal to all this, you may find reading the Emacs > Lisp Introduction enlightening. > > Alternately, instead of trying to roll your own function, it may > well be that Emacs already has the functionality you need > built-in. See the info node "autotype", in Emacs, you can get > there via C-h i d m Autotype RET. > > Hope some of this helps.