help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: regexp / replacement for variable


From: lawrence mitchell
Subject: Re: regexp / replacement for variable
Date: Sun, 22 Feb 2004 00:51:13 +0000
User-agent: Gnus/5.110002 (No Gnus v0.2) Emacs/21.3.50

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.
-- 
lawrence mitchell <wence@gmx.li>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]