Skip to content

Why doesn’t my Meta key work in an xterm window?

See Single-Byte Character Set Support in The GNU Emacs Manual.

If the advice in the Emacs manual fails, try all of these methods before asking for further help:

  • You may have big problems using mwm as your window manager. (Does anyone know a good generic solution to allow the use of the Meta key in Emacs with mwm?)

  • For X11: Make sure it really is a Meta key. Use xev to find out what keysym your Meta key generates. It should be either Meta_L or Meta_R. If it isn’t, use xmodmap to fix the situation. If Meta does generate Meta_L or Meta_R, but M-x produces a non-ASCII character, put this in your ~/.Xdefaults file:

    bash
     XTerm*eightBitInput:   false
     XTerm*eightBitOutput:  true
  • Make sure the pty the xterm is using is passing 8 bit characters. ‘stty -a’ (or ‘stty everything’) should show ‘cs8’ somewhere. If it shows ‘cs7’ instead, use ‘stty cs8 -istrip’ (or ‘stty pass8’) to fix it.

  • If there is an rlogin connection between xterm and Emacs, the ‘-8’ argument may need to be given to rlogin to make it pass all 8 bits of every character.

  • If all else fails, you can make xterm generate ESC W when you type M-W, which is the same conversion Emacs would make if it got the M-W anyway. In X11R4, the following resource specification will do this:

    bash
    XTerm.VT100.EightBitInput: false

    (This changes the behavior of the insert-eight-bit action.)

    With older xterms, you can specify this behavior with a translation:

    bash
    XTerm.VT100.Translations: #override \
      Meta<KeyPress>: string(0x1b) insert()

    You might have to replace ‘Meta’ with ‘Alt’.