From: Gary Wessle <phddas@yahoo.com>
To: help-gnu-emacs@gnu.org
Subject: Re: a function to enter string
Date: 22 Feb 2007 06:12:19 +1100 [thread overview]
Message-ID: <m3zm77ba0c.fsf@localhost.localdomain> (raw)
In-Reply-To: 87tzxh6831.fsf@thalassa.informatimago.com
Pascal Bourguignon <pjb@informatimago.com> writes:
> Gary Wessle <phddas@yahoo.com> writes:
>
> > Hi
> >
> > I have this key macro in my emacs which puts "#include <string>" in
> > the first blank line in the buffer, also another key macro which puts
> > the string "std::string" at the point.
> >
> > (fset 'str
> > [?\M-<?\M-} ?# ?i ?n ?c ?l ?u ?d ?e ? ?< ?s ?t ?r ?i ?n ?g ?>
> > return])
> >
> > (fset ':s
> > "std::string")
> >
> > I want when I type M-x :s which is the second key macro above, it
> > puts the string "std::string" at point as well as checks to see if
> > "#include <string>" is at the top of the buffer, if not it inserts
> > it so that I don't have to do it.
> >
> > how can this be done?
>
>
> I would write a command, like:
>
> (defun std-string ()
> (interactive)
> (insert "std::string")
> (save-excursion
> (beginning-of-buffer)
> (unless (re-search-forward "#include <string>" nil t)
> ;; it is silly to search the first white line to insert
> ;; the #include, but that's what you asked...
> ;; It would be better to just skip over then title comment,
> ;; and to _insert_ a new line for the #include.
> ;;
indeed you are right, I would also choose this as a better option. how
would that change the code below?
I think the condition of the "if" statement will change. but I have no
clue how to put it together.
thanks again.
> (if (re-search-forward "^[ \t]*$" nil t)
> (progn
> (beginning-of-line)
> (insert "#include <string>"))
> (progn
> ;; See how it's ludicruous? What should we do
> ;; when there's no empty line???
> (end-of-buffer)
> (insert "\n#include <string>"))))))
>
> The symbols whose name starts with a colon are special. They get
> automatically bound to themselves. So we can evaluate :xyz instead of
> ':xyz when we want :xyz. We call them keywords, since they're often
> used as "syntax" keywords. While it's possible to use them to name
> functions (given that emacs lisp is a "lisp-2", meaning that a symbol
> can be bound to a value and to a function at the same time), I
> wouldn't advise to bind functions (or even key macro) to keywords.
>
>
> You can invoke such a command with M-x stdstr RET and if it's too much
> to type, you can bind the command to some key sequence. For example,
> to bind it to the sequence F8 s you can put the following in your
> ~/.emacs :
>
>
> (defun c++-meat ()
> (local-set-key (kbd "<f8> s") 'std-string)
> ;; ...
> )
>
> (add-hook 'c++-mode-hook 'c++-meat)
>
next prev parent reply other threads:[~2007-02-21 19:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-19 20:27 a function to enter string Gary Wessle
2007-02-19 23:28 ` Pascal Bourguignon
2007-02-20 16:06 ` Mathias Dahl
2007-02-21 19:12 ` Gary Wessle [this message]
2007-02-20 8:30 ` Gordon Beaton
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=m3zm77ba0c.fsf@localhost.localdomain \
--to=phddas@yahoo.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.