unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* How to translate M-kp-multiply to M-* before key is mapped to function?
@ 2004-07-02 15:10 paul
  2004-07-02 15:28 ` Kai Grossjohann
  2004-07-02 16:32 ` Kevin Rodgers
  0 siblings, 2 replies; 8+ messages in thread
From: paul @ 2004-07-02 15:10 UTC (permalink / raw)


Hello all,

I've nearly pulled out my hair for the following problem;
I want to translate M-kp-multiply to M-* *BEFORE* the key
gets bound to its default function (in my case pop-tag-mark).

I do *not* want to use global-set-key but am looking for
a general way to remap non-ascii input events.

Using (define-key function-key-map ...) or (define-key key-translation-map ...)
is too late; I can remap the key, but the function pop-tag-mark is not
called.

Trying an approach with keyboard-translate drives me nuts because
it does not seem to support non-ascii events.

Help!

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-02 15:10 How to translate M-kp-multiply to M-* before key is mapped to function? paul
@ 2004-07-02 15:28 ` Kai Grossjohann
  2004-07-02 16:32 ` Kevin Rodgers
  1 sibling, 0 replies; 8+ messages in thread
From: Kai Grossjohann @ 2004-07-02 15:28 UTC (permalink / raw)


litter@graffiti.net (paul) writes:

> I've nearly pulled out my hair for the following problem;
> I want to translate M-kp-multiply to M-* *BEFORE* the key
> gets bound to its default function (in my case pop-tag-mark).

Maybe (global-set-key (kbd "M-<kp_multiply>") (kbd "M-*")) is enough?

Kai

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-02 15:10 How to translate M-kp-multiply to M-* before key is mapped to function? paul
  2004-07-02 15:28 ` Kai Grossjohann
@ 2004-07-02 16:32 ` Kevin Rodgers
  2004-07-04 21:51   ` paul
  1 sibling, 1 reply; 8+ messages in thread
From: Kevin Rodgers @ 2004-07-02 16:32 UTC (permalink / raw)


paul wrote:
 > I've nearly pulled out my hair for the following problem;
 > I want to translate M-kp-multiply to M-* *BEFORE* the key
 > gets bound to its default function (in my case pop-tag-mark).

You must be running emacs without a window system (or under a window
system, but with the -nw command line option).  In an xterm on my
platform (i386-pc-solaris2.7, X toolkit), `C-h k M-kp-multiply' shows

| ESC * runs the command pop-tag-mark

and then `C-h l' shows

| C-h k ESC * C-h l

The odd thing is that function-key-map contains this entry

(kp-multiply . [42])

but no escape sequence that maps to [kp-multiply] in the way that `ESC [
1 1 ~' is bound to [f1] or `ESC O p' is bound to [kp-1].

 > I do *not* want to use global-set-key but am looking for
 > a general way to remap non-ascii input events.

What non-ASCII input event do you think your terminal is sending to
Emacs?

 > Using (define-key function-key-map ...) or (define-key key-translation-map ...)
 > is too late; I can remap the key, but the function pop-tag-mark is not
 > called.

Since setting function-key-map and key-translation-map do not change the
results reported by `C-h k' and `C-h l', I don't think they have
anything to do with it: I think it means that the xterm is actually
sending `*' to Emacs, not an escape sequence.

 > Trying an approach with keyboard-translate drives me nuts because
 > it does not seem to support non-ascii events.

What do you want to do?  It seems like you want to bind M-kp-multiply to
a different command, but for some reason you don't want to use
global-set-key like this:

(global-set-key "\M-*" 'whatever)

-- 
Kevin Rodgers
paul wrote:
 > I've nearly pulled out my hair for the following problem;
 > I want to translate M-kp-multiply to M-* *BEFORE* the key
 > gets bound to its default function (in my case pop-tag-mark).

You must be running emacs without a window system (or under a window
system, but with the -nw command line option).  In an xterm on my
platform (i386-pc-solaris2.7, X toolkit), `C-h k M-kp-multiply' shows

| ESC * runs the command pop-tag-mark

and then `C-h l' shows

| C-h k ESC * C-h l

The odd thing is that function-key-map contains this entry

(kp-multiply . [42])

but no escape sequence that maps to [kp-multiply] in the way that `ESC [
1 1 ~' is bound to [f1] or `ESC O p' is bound to [kp-1].

 > I do *not* want to use global-set-key but am looking for
 > a general way to remap non-ascii input events.

What non-ASCII input event do you think your terminal is sending to
Emacs?

 > Using (define-key function-key-map ...) or (define-key key-translation-map ...)
 > is too late; I can remap the key, but the function pop-tag-mark is not
 > called.

Since setting function-key-map and key-translation-map do not change the
results reported by `C-h k' and `C-h l', I don't think they have
anything to do with it: I think it means that the xterm is actually
sending `*' to Emacs, not an escape sequence.

 > Trying an approach with keyboard-translate drives me nuts because
 > it does not seem to support non-ascii events.

What do you want to do?  It seems like you want to bind M-kp-multiply to
a different command, but for some reason you don't want to use
global-set-key like this:

(global-set-key "\M-*" 'whatever)

-- 
Kevin Rodgers

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-02 16:32 ` Kevin Rodgers
@ 2004-07-04 21:51   ` paul
  2004-07-05  8:01     ` paul
  2004-07-05 18:05     ` Stefan Monnier
  0 siblings, 2 replies; 8+ messages in thread
From: paul @ 2004-07-04 21:51 UTC (permalink / raw)


My problem is, is that kp-multiply is bound to * somewhere down the
line,
but C-kp-multiply, M-kp-multiply and C-M-kp-multiply are not.
I would like C-kp-multiply to act like C-*, M-multiply to act like
M-*,
and C-M-kp-multiply to act like C-M-* (without having to rely on
information
to what functions C-*, M-* and C-M-* are bound).

How to tell keyboard-translate to do just this?

I tried any sequence of char, strings, ints etc. to get
keyboard-translate to do what I want, but the closest I get are errors
which show that my literals are wrong or are interpreted as 'C-k'
(with 'p-multiply' as the trail of the literal) etc.


Kevin Rodgers <ihs_4664@yahoo.com> wrote in message news:<40E58E31.60508@yahoo.com>...
> paul wrote:
>  > I've nearly pulled out my hair for the following problem;
>  > I want to translate M-kp-multiply to M-* *BEFORE* the key
>  > gets bound to its default function (in my case pop-tag-mark).
> 
> You must be running emacs without a window system (or under a window
> system, but with the -nw command line option).  In an xterm on my
> platform (i386-pc-solaris2.7, X toolkit), `C-h k M-kp-multiply' shows
> 
> | ESC * runs the command pop-tag-mark
> 
> and then `C-h l' shows
> 
> | C-h k ESC * C-h l
> 
> The odd thing is that function-key-map contains this entry
> 
> (kp-multiply . [42])
> 
> but no escape sequence that maps to [kp-multiply] in the way that `ESC [
> 1 1 ~' is bound to [f1] or `ESC O p' is bound to [kp-1].
> 
>  > I do *not* want to use global-set-key but am looking for
>  > a general way to remap non-ascii input events.
> 
> What non-ASCII input event do you think your terminal is sending to
> Emacs?
> 
>  > Using (define-key function-key-map ...) or (define-key key-translation-map ...)
>  > is too late; I can remap the key, but the function pop-tag-mark is not
>  > called.
> 
> Since setting function-key-map and key-translation-map do not change the
> results reported by `C-h k' and `C-h l', I don't think they have
> anything to do with it: I think it means that the xterm is actually
> sending `*' to Emacs, not an escape sequence.
> 
>  > Trying an approach with keyboard-translate drives me nuts because
>  > it does not seem to support non-ascii events.
> 
> What do you want to do?  It seems like you want to bind M-kp-multiply to
> a different command, but for some reason you don't want to use
> global-set-key like this:
> 
> (global-set-key "\M-*" 'whatever)
> 
> -- 
> Kevin Rodgers
> paul wrote:
>  > I've nearly pulled out my hair for the following problem;
>  > I want to translate M-kp-multiply to M-* *BEFORE* the key
>  > gets bound to its default function (in my case pop-tag-mark).
> 
> You must be running emacs without a window system (or under a window
> system, but with the -nw command line option).  In an xterm on my
> platform (i386-pc-solaris2.7, X toolkit), `C-h k M-kp-multiply' shows
> 
> | ESC * runs the command pop-tag-mark
> 
> and then `C-h l' shows
> 
> | C-h k ESC * C-h l
> 
> The odd thing is that function-key-map contains this entry
> 
> (kp-multiply . [42])
> 
> but no escape sequence that maps to [kp-multiply] in the way that `ESC [
> 1 1 ~' is bound to [f1] or `ESC O p' is bound to [kp-1].
> 
>  > I do *not* want to use global-set-key but am looking for
>  > a general way to remap non-ascii input events.
> 
> What non-ASCII input event do you think your terminal is sending to
> Emacs?
> 
>  > Using (define-key function-key-map ...) or (define-key key-translation-map ...)
>  > is too late; I can remap the key, but the function pop-tag-mark is not
>  > called.
> 
> Since setting function-key-map and key-translation-map do not change the
> results reported by `C-h k' and `C-h l', I don't think they have
> anything to do with it: I think it means that the xterm is actually
> sending `*' to Emacs, not an escape sequence.
> 
>  > Trying an approach with keyboard-translate drives me nuts because
>  > it does not seem to support non-ascii events.
> 
> What do you want to do?  It seems like you want to bind M-kp-multiply to
> a different command, but for some reason you don't want to use
> global-set-key like this:
> 
> (global-set-key "\M-*" 'whatever)

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-04 21:51   ` paul
@ 2004-07-05  8:01     ` paul
  2004-07-05 18:05     ` Stefan Monnier
  1 sibling, 0 replies; 8+ messages in thread
From: paul @ 2004-07-05  8:01 UTC (permalink / raw)


litter@graffiti.net (paul) wrote in message news:<bb3e39cd.0407041351.2c99aa97@posting.google.com>...

Maybe I should add this to clarify things a bit; my emacs is
GNU Emacs 21.3.1 (i386-mingw-nt5.0.2195)

and my kp-multiply keys show up in C-h k as:
*, <C-kp-multiply>, <M-kp-multiply> and <C-M-kp-multiply>

and C-h l shows:
C-h k <kp-multiply> C-h k <M-kp-multiply> 
C-h k <C-kp-multiply> C-h k <C-M-kp-multiply>

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-04 21:51   ` paul
  2004-07-05  8:01     ` paul
@ 2004-07-05 18:05     ` Stefan Monnier
  2004-07-06  9:23       ` paul
  1 sibling, 1 reply; 8+ messages in thread
From: Stefan Monnier @ 2004-07-05 18:05 UTC (permalink / raw)


> My problem is, is that kp-multiply is bound to * somewhere down the line,
> but C-kp-multiply, M-kp-multiply and C-M-kp-multiply are not.  I would
> like C-kp-multiply to act like C-*, M-multiply to act like M-*, and
> C-M-kp-multiply to act like C-M-* (without having to rely on information
> to what functions C-*, M-* and C-M-* are bound).

> How to tell keyboard-translate to do just this?

You need something like

  (define-key function-key-map [M-kp-multiply] [?\M-*])
  (define-key function-key-map [C-kp-multiply] [?\C-*])
  (define-key function-key-map [C-M-kp-multiply] [?\C-\M-*])

I don't think there is an easy way to have all combinations mapped in
a single step.  Sadly.


        Stefan

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-05 18:05     ` Stefan Monnier
@ 2004-07-06  9:23       ` paul
  2004-07-07 17:13         ` Stefan Monnier
  0 siblings, 1 reply; 8+ messages in thread
From: paul @ 2004-07-06  9:23 UTC (permalink / raw)


Stefan Monnier <monnier@iro.umontreal.ca> wrote in message news:<jwvacyenxga.fsf-monnier+gnu.emacs.help@gnu.org>...
> > My problem is, is that kp-multiply is bound to * somewhere down the line,
> > but C-kp-multiply, M-kp-multiply and C-M-kp-multiply are not.  I would
> > like C-kp-multiply to act like C-*, M-multiply to act like M-*, and
> > C-M-kp-multiply to act like C-M-* (without having to rely on information
> > to what functions C-*, M-* and C-M-* are bound).
>  
> > How to tell keyboard-translate to do just this?
> 
> You need something like
> 
>   (define-key function-key-map [M-kp-multiply] [?\M-*])
>   (define-key function-key-map [C-kp-multiply] [?\C-*])
>   (define-key function-key-map [C-M-kp-multiply] [?\C-\M-*])
> 
> I don't think there is an easy way to have all combinations mapped in
> a single step.  Sadly.
> 
> 
>         Stefan

Hi Stefan,

Thanks for your reply. I don't mind having to do multiple steps for this.
Unfortunately, the solution you propose is the one I tried too.

It doesn't work.

Although it indeed remaps the key unto the correct key, it does *NOT* call
the function bound to that key. This is due to the order in which this
remapping is done, it happens *after* the effects of global-set-key, as
far as I can tell (at least it does for M-*, pop-tag-mark).

Regards,
Paul

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

* Re: How to translate M-kp-multiply to M-* before key is mapped to function?
  2004-07-06  9:23       ` paul
@ 2004-07-07 17:13         ` Stefan Monnier
  0 siblings, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2004-07-07 17:13 UTC (permalink / raw)


> Although it indeed remaps the key unto the correct key, it does *NOT* call
> the function bound to that key.  This is due to the order in which this
> remapping is done, it happens *after* the effects of global-set-key, as
> far as I can tell (at least it does for M-*, pop-tag-mark).

No, you are mistaken.  The problem you're seeing must be due to
something else.  The way it works is:

- if the key is bound in the normal maps, use the binding.
- else if the key has a binding is function-key-map, do the rebinding
  and then look up the result in the normal maps.

So one problem may be if you have M-kp-multiply bound to a function
in one of the normal maps (global, of buffer-local), in which case
function-key-map will indeed be ignored.

Another problem might be if M-kp-multiply is not coming directly from the
keyboard but is itself the result of mapping some keyboard's input through
function-key-map, in which case it will not go through function-key-map
again.  This can happen e.g. if you run in a text terminal.

You can also try (define-key key-translation-map [M-kp-multiply] [?\M-*])
because key-translation-map does the translation whether there is a normal
binding or not.


        Stefan

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

end of thread, other threads:[~2004-07-07 17:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-07-02 15:10 How to translate M-kp-multiply to M-* before key is mapped to function? paul
2004-07-02 15:28 ` Kai Grossjohann
2004-07-02 16:32 ` Kevin Rodgers
2004-07-04 21:51   ` paul
2004-07-05  8:01     ` paul
2004-07-05 18:05     ` Stefan Monnier
2004-07-06  9:23       ` paul
2004-07-07 17:13         ` Stefan Monnier

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