unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* execute after char/string
@ 2008-11-27 20:19 Steve Chow
  2008-11-27 20:31 ` Barry Margolin
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Steve Chow @ 2008-11-27 20:19 UTC (permalink / raw
  To: help-gnu-emacs

is there a way I can execute a function/macro after I've inserted a
character or string? In this case I'd like execute a function after
typing . or -> in c-mode. I tried using global-set-key but then of
course it won't let me enter those characters into the buffer.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: execute after char/string
  2008-11-27 20:19 execute after char/string Steve Chow
@ 2008-11-27 20:31 ` Barry Margolin
  2008-11-27 22:15   ` Andreas Politz
  2008-11-28  1:35 ` Xah Lee
  2008-11-28  2:14 ` Chetan
  2 siblings, 1 reply; 5+ messages in thread
From: Barry Margolin @ 2008-11-27 20:31 UTC (permalink / raw
  To: help-gnu-emacs

In article 
<9dddf442-089c-495a-af1c-072cc80ad2b0@n33g2000pri.googlegroups.com>,
 Steve Chow <msweaksauce@hotmail.com> wrote:

> is there a way I can execute a function/macro after I've inserted a
> character or string? In this case I'd like execute a function after
> typing . or -> in c-mode. I tried using global-set-key but then of
> course it won't let me enter those characters into the buffer.

See after-change-functions.

-- 
Barry Margolin, barmar@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
*** PLEASE don't copy me on replies, I'll read them in the group ***


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: execute after char/string
  2008-11-27 20:31 ` Barry Margolin
@ 2008-11-27 22:15   ` Andreas Politz
  0 siblings, 0 replies; 5+ messages in thread
From: Andreas Politz @ 2008-11-27 22:15 UTC (permalink / raw
  To: help-gnu-emacs

Barry Margolin wrote:
> In article 
> <9dddf442-089c-495a-af1c-072cc80ad2b0@n33g2000pri.googlegroups.com>,
>  Steve Chow <msweaksauce@hotmail.com> wrote:
> 
>> is there a way I can execute a function/macro after I've inserted a
>> character or string? In this case I'd like execute a function after
>> typing . or -> in c-mode. I tried using global-set-key but then of
>> course it won't let me enter those characters into the buffer.
> 
> See after-change-functions.
> 

A spicedup self-insert-command is much simpler I think.

(defun super-dot-minus-arrow (&optional arg)
   (interactive "p")
   (self-insert-command arg)
   (do-some-more-stuff-when-apropriate))

(define-key your-map (kbd ".") 'super-dot-minus-arrow)

-ap


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: execute after char/string
  2008-11-27 20:19 execute after char/string Steve Chow
  2008-11-27 20:31 ` Barry Margolin
@ 2008-11-28  1:35 ` Xah Lee
  2008-11-28  2:14 ` Chetan
  2 siblings, 0 replies; 5+ messages in thread
From: Xah Lee @ 2008-11-28  1:35 UTC (permalink / raw
  To: help-gnu-emacs

On Nov 27, 12:19 pm, Steve Chow <msweaksa...@hotmail.com> wrote:
> is there a way I can execute a function/macro after I've inserted a
> character or string? In this case I'd like execute a function after
> typing . or -> in c-mode. I tried using global-set-key but then of
> course it won't let me enter those characters into the buffer.

this will work:

(defun ff ()
  "type period then do y."
  (interactive)
  (let ()
    (self-insert-command 1)
    (funcall 'y)
    )
  )

(global-set-key (kbd ".") 'ff)


the y is whatever your function.

 for "->", you could do the above for “>”, and the ff checks whether
previous char is “-”.

  Xah
∑ http://xahlee.org/^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: execute after char/string
  2008-11-27 20:19 execute after char/string Steve Chow
  2008-11-27 20:31 ` Barry Margolin
  2008-11-28  1:35 ` Xah Lee
@ 2008-11-28  2:14 ` Chetan
  2 siblings, 0 replies; 5+ messages in thread
From: Chetan @ 2008-11-28  2:14 UTC (permalink / raw
  To: help-gnu-emacs

Steve Chow <msweaksauce@hotmail.com> writes:

> is there a way I can execute a function/macro after I've inserted a
> character or string? In this case I'd like execute a function after
> typing . or -> in c-mode. I tried using global-set-key but then of
> course it won't let me enter those characters into the buffer.

I don't have anything to do after inserting the character, but before.

It goes something like this:

(defun fix-array-index(&optional arg)
  (interactive "p")
  ;; go fix up the index value, if needed
  (self-insert-command arg))

And the following in the mode hook:
    (local-set-key "]" 'fix-array-index)

with some checks to do it only once.

Chetan


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-11-28  2:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-27 20:19 execute after char/string Steve Chow
2008-11-27 20:31 ` Barry Margolin
2008-11-27 22:15   ` Andreas Politz
2008-11-28  1:35 ` Xah Lee
2008-11-28  2:14 ` Chetan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).