all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Pascal Bourguignon <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: a function to enter string
Date: Tue, 20 Feb 2007 00:28:18 +0100	[thread overview]
Message-ID: <87tzxh6831.fsf@thalassa.informatimago.com> (raw)
In-Reply-To: m38xetriyf.fsf@localhost.localdomain

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.
         ;;
         (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)

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/

ATTENTION: Despite any other listing of product contents found
herein, the consumer is advised that, in actuality, this product
consists of 99.9999999999% empty space.

  reply	other threads:[~2007-02-19 23:28 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 [this message]
2007-02-20 16:06   ` Mathias Dahl
2007-02-21 19:12   ` Gary Wessle
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=87tzxh6831.fsf@thalassa.informatimago.com \
    --to=pjb@informatimago.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.