[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to simulate pressing a key
From: |
netawater |
Subject: |
Re: How to simulate pressing a key |
Date: |
Sat, 20 Sep 2008 22:37:55 +0800 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.2 (gnu/linux) |
"Drew Adams" <drew.adams@oracle.com> writes:
>> >> I can not just call the function which key is binding for it may
>> >> have uncertainty parameter, like tab's function forward-button has
>> >> parameter, but lisp-indent-line does not.
>> >>
>> >> although execute-extended-command works perfect, but I can not use
>> >> it in my elisp function.
>> >
>> > I'm not sure I understand your question, but if I do, have
>> > a look at function `call-interactively'. It lets you call an
>> > interactive function (command) in such a way that the function's
>> > `interactive' spec is used to obtain the argument values.
>> >
>> > See the Elisp manual, node `Interactive Call'.
>>
>> Thanks for your reply.
>>
>> I do not want to interactive call a function but call it like
>> pressing a key. for example, press tab in help-mode will cause
>> forward-button function which has a parameter, however I do
>> not need give it parameter and it get parameter by itself.
>
> Sorry, I'm unable to follow you. Hopefully someone else will understand and
> answer you.
>
>> my aim is to binding a funtion to tab key in every mode: if
>> cursor is at the end of word then call M-TAB's function, else
>> call TAB's function.
>>
>> (defun my-indent-or-complete ()
>> "if cursor is at
>> the end of word then call M-TAB's function, else call
>> TAB's function."
>> (interactive)
>> ;; ^C^t is binding to tab key's function in mode-hook.
>> (let ((TAB-func (key-binding "^C^t"))
>> (M-TAB-func (key-binding "\M-\t")))
>> (if (looking-at "\\>")
>> (apply M-TAB-func '())
>> (apply TAB-func '()))))
>>
>> my way is only suitable for lisp-indent-line but not forward-button.
>
> As you said, `forward-button' expects at least one argument, and you are
> applying it to zero arguments. Above, you say "it get parameter by
> itself". It's
> unclear to me what you mean by that.
>
> Calling the command interactively (call-interactively #'button) will provide
> the
> needed arguments (by default, N=1, WRAP=(point), DISPLAY-MESSAGE=(point),
> which
> I think will do just what you want - but you say you don't want that.
>
> Again, perhaps someone else can help you better.
>
> Also, it sounds like you are trying to do something that several others have
> already done. Take a look here and see if you don't find what you're looking
> for
> already made: http://www.emacswiki.org/cgi-bin/wiki/TabCompletion
>
> [BTW, you don't need to quote nil: '(). () evaluates to itself.]
Sorry, I misunderstanded your call interactively's mean, I thought it need me
input parameter interactively, sorry for my poor english level,
call-interactively is a perfect method for my function. Thank you very much!