unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Capture ALL keystrokes
@ 2008-05-29 10:36 Ben Forbes
  2008-05-29 11:11 ` Daniel Pittman
  0 siblings, 1 reply; 7+ messages in thread
From: Ben Forbes @ 2008-05-29 10:36 UTC (permalink / raw)
  To: help-gnu-emacs

When some keystroke A is entered, I set a flag, and I want this flag
to be unset if any keystroke is entered except some keystroke B. So
basically, I only want keystroke B to have any effect if it is
preceded by keystroke A. How can I do this?




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

* Re: Capture ALL keystrokes
  2008-05-29 10:36 Ben Forbes
@ 2008-05-29 11:11 ` Daniel Pittman
  2008-05-29 12:01   ` Ben Forbes
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Pittman @ 2008-05-29 11:11 UTC (permalink / raw)
  To: help-gnu-emacs

"Ben Forbes" <bdforbes@gmail.com> writes:

> When some keystroke A is entered, I set a flag, and I want this flag
> to be unset if any keystroke is entered except some keystroke B. So
> basically, I only want keystroke B to have any effect if it is
> preceded by keystroke A. How can I do this?

The standard way would be:

    (define-key global-map [(a)(b)] #'my-function)

Alternately, make a keymap, point the `a' key to it, and then install
handlers into it.

Your approach is, in essence, "doing it wrong."

Regards,
        Daniel





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

* Re: Capture ALL keystrokes
  2008-05-29 11:11 ` Daniel Pittman
@ 2008-05-29 12:01   ` Ben Forbes
  2008-05-29 13:32     ` Lennart Borgman (gmail)
  0 siblings, 1 reply; 7+ messages in thread
From: Ben Forbes @ 2008-05-29 12:01 UTC (permalink / raw)
  To: Daniel Pittman; +Cc: help-gnu-emacs

Yes I thought my approach seemed too complex. I don't think your first
suggestion will work, because I want to be able to hit AB, ABB, ABBB,
ABBBB etc, where each repeated keystroke B repeats the command. Could
you expand on the second option? It sounds promising, thanks.

On Thu, May 29, 2008 at 9:11 PM, Daniel Pittman <daniel@rimspace.net> wrote:
> "Ben Forbes" <bdforbes@gmail.com> writes:
>
>> When some keystroke A is entered, I set a flag, and I want this flag
>> to be unset if any keystroke is entered except some keystroke B. So
>> basically, I only want keystroke B to have any effect if it is
>> preceded by keystroke A. How can I do this?
>
> The standard way would be:
>
>    (define-key global-map [(a)(b)] #'my-function)
>
> Alternately, make a keymap, point the `a' key to it, and then install
> handlers into it.
>
> Your approach is, in essence, "doing it wrong."
>
> Regards,
>        Daniel
>
>
>
>




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

* Re: Capture ALL keystrokes
  2008-05-29 12:01   ` Ben Forbes
@ 2008-05-29 13:32     ` Lennart Borgman (gmail)
  2008-05-29 15:10       ` Tassilo Horn
  0 siblings, 1 reply; 7+ messages in thread
From: Lennart Borgman (gmail) @ 2008-05-29 13:32 UTC (permalink / raw)
  To: Ben Forbes; +Cc: Daniel Pittman, help-gnu-emacs

Have a look at kmacro-call-macro which does something similar. It is 
bound to "C-x e" and you repeat it with just "e".

Ben Forbes wrote:
> Yes I thought my approach seemed too complex. I don't think your first
> suggestion will work, because I want to be able to hit AB, ABB, ABBB,
> ABBBB etc, where each repeated keystroke B repeats the command. Could
> you expand on the second option? It sounds promising, thanks.
> 
> On Thu, May 29, 2008 at 9:11 PM, Daniel Pittman <daniel@rimspace.net> wrote:
>> "Ben Forbes" <bdforbes@gmail.com> writes:
>>
>>> When some keystroke A is entered, I set a flag, and I want this flag
>>> to be unset if any keystroke is entered except some keystroke B. So
>>> basically, I only want keystroke B to have any effect if it is
>>> preceded by keystroke A. How can I do this?
>> The standard way would be:
>>
>>    (define-key global-map [(a)(b)] #'my-function)
>>
>> Alternately, make a keymap, point the `a' key to it, and then install
>> handlers into it.
>>
>> Your approach is, in essence, "doing it wrong."
>>
>> Regards,
>>        Daniel
>>
>>
>>
>>
> 
> 
> 




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

* Re: Capture ALL keystrokes
  2008-05-29 13:32     ` Lennart Borgman (gmail)
@ 2008-05-29 15:10       ` Tassilo Horn
  0 siblings, 0 replies; 7+ messages in thread
From: Tassilo Horn @ 2008-05-29 15:10 UTC (permalink / raw)
  To: help-gnu-emacs

"Lennart Borgman (gmail)" <lennart.borgman@gmail.com> writes:

Hi,

> Have a look at kmacro-call-macro which does something similar. It is
> bound to "C-x e" and you repeat it with just "e".

Another possibility is to use a timer and a minor mode.  The first
keystroke enables the mode which will be disabled by a timer.  Any
further keystroke resets the timer to its initial value.

If you use EMMS, have a look at 

,----
| C-c + runs the command emms-volume-mode-plus, which is an interactive compiled
| Lisp function in `emms-volume.el'.
| 
| It is bound to C-c +.
| 
| (emms-volume-mode-plus)
| 
| Raise volume and enable or extend the `emms-volume-minor-mode' timeout.
`----

Bye,
Tassilo





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

* Re: Capture ALL keystrokes
       [not found] <mailman.12372.1212057381.18990.help-gnu-emacs@gnu.org>
@ 2008-05-30  9:57 ` harven
  2008-05-30 11:21   ` Ben Forbes
  0 siblings, 1 reply; 7+ messages in thread
From: harven @ 2008-05-30  9:57 UTC (permalink / raw)
  To: help-gnu-emacs

On May 29, 12:36 pm, "Ben Forbes" <bdfor...@gmail.com> wrote:
> When some keystroke A is entered, I set a flag, and I want this flag
> to be unset if any keystroke is entered except some keystroke B. So
> basically, I only want keystroke B to have any effect if it is
> preceded by keystroke A. How can I do this?

Be more specific about what you are trying to achieve.
Bound the following command to key A. Pressing the A key
inserts the letter A. It then executes the command newline
repeatedly if B is pressed any amount of time.

(defun my-command ()
"After key A, key B executes the command newline repeatedly"
  (interactive)
  (insert "A")
  (while (equal (setq key (read-event)) ?B)
      (next-line))
  (push key unread-command-events))

(global-set-key "A" 'my-command)


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

* Re: Capture ALL keystrokes
  2008-05-30  9:57 ` Capture ALL keystrokes harven
@ 2008-05-30 11:21   ` Ben Forbes
  0 siblings, 0 replies; 7+ messages in thread
From: Ben Forbes @ 2008-05-30 11:21 UTC (permalink / raw)
  To: harven; +Cc: help-gnu-emacs

> (defun my-command ()
> "After key A, key B executes the command newline repeatedly"
>  (interactive)
>  (insert "A")
>  (while (equal (setq key (read-event)) ?B)
>      (next-line))
>  (push key unread-command-events))
>
> (global-set-key "A" 'my-command)
>

That approach works quite well, thanks. My goal was to be able to call
emms-random with a single keystroke when the initial call required two
keystrokes. This is because I've put all my emms keystrokes after
C-H-s-c to keep them organized. Now I can hit C-H-s-c C-H-s-r to call
emms-random once, and every time I hit C-H-s-r after that, it calls
emms-random again. It's a bit frivolous I guess, but it was more about
learning emacs programming than anything else. Thanks for the help
everyone.




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

end of thread, other threads:[~2008-05-30 11:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <mailman.12372.1212057381.18990.help-gnu-emacs@gnu.org>
2008-05-30  9:57 ` Capture ALL keystrokes harven
2008-05-30 11:21   ` Ben Forbes
2008-05-29 10:36 Ben Forbes
2008-05-29 11:11 ` Daniel Pittman
2008-05-29 12:01   ` Ben Forbes
2008-05-29 13:32     ` Lennart Borgman (gmail)
2008-05-29 15:10       ` Tassilo Horn

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