Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

I need Option for typing some special characters, so I cannot use Terminal.app’s “Use Option as Meta key” setting. But I cannot bear to do without an ESC-emitting Meta key either.

Eventually I got around to trying out iTerm2, and discovered that it allows one to choose to treat only one of the Option keys as a +ESC key (I chose the left one), which is absolutely perfect and exactly what I was after.

But I’ve basically spent all my time with it so far making it more like Terminal.app. Literally the only feature I like is the Left-Option binding; everything else it does differently from Terminal.app, I dislike.

And it’s ugly. From the icon on down.

So I wonder, is there any way I could teach Terminal.app this trick, to bind only one of the Option keys as Meta, so that I can ditch iTerm2?

share|improve this question

1 Answer 1

There's probably a better way to do this, but you could try saving this as private.xml in KeyRemap4MacBook:

<?xml version="1.0"?>
<root>
<appdef>
<appname>APPLETERMINAL</appname>
<equal>com.apple.Terminal</equal>
</appdef>
<item>
<name>Terminal meta</name>
<identifier>private.terminal-meta</identifier>
<only>APPLETERMINAL</only>
<autogen>__KeyToKey__ KeyCode::A, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::A</autogen>
<autogen>__KeyToKey__ KeyCode::B, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::B</autogen>
<autogen>__KeyToKey__ KeyCode::C, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::C</autogen>
<autogen>__KeyToKey__ KeyCode::D, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::D</autogen>
<autogen>__KeyToKey__ KeyCode::E, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::E</autogen>
<autogen>__KeyToKey__ KeyCode::F, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::F</autogen>
<autogen>__KeyToKey__ KeyCode::G, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::G</autogen>
<autogen>__KeyToKey__ KeyCode::H, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::H</autogen>
<autogen>__KeyToKey__ KeyCode::I, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::I</autogen>
<autogen>__KeyToKey__ KeyCode::J, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::J</autogen>
<autogen>__KeyToKey__ KeyCode::K, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::K</autogen>
<autogen>__KeyToKey__ KeyCode::L, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::L</autogen>
<autogen>__KeyToKey__ KeyCode::M, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::M</autogen>
<autogen>__KeyToKey__ KeyCode::N, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::N</autogen>
<autogen>__KeyToKey__ KeyCode::O, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::O</autogen>
<autogen>__KeyToKey__ KeyCode::P, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::P</autogen>
<autogen>__KeyToKey__ KeyCode::Q, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::Q</autogen>
<autogen>__KeyToKey__ KeyCode::R, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::R</autogen>
<autogen>__KeyToKey__ KeyCode::S, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::S</autogen>
<autogen>__KeyToKey__ KeyCode::T, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::T</autogen>
<autogen>__KeyToKey__ KeyCode::U, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::U</autogen>
<autogen>__KeyToKey__ KeyCode::V, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::V</autogen>
<autogen>__KeyToKey__ KeyCode::W, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::W</autogen>
<autogen>__KeyToKey__ KeyCode::X, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::X</autogen>
<autogen>__KeyToKey__ KeyCode::Y, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::Y</autogen>
<autogen>__KeyToKey__ KeyCode::Z, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::Z</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_0, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_0</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_1, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_1</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_2, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_2</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_3, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_3</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_4, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_4</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_5, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_5</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_6, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_6</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_7, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_7</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_8, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_8</autogen>
<autogen>__KeyToKey__ KeyCode::KEY_9, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEY_9</autogen>
<autogen>__KeyToKey__ KeyCode::BACKQUOTE, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::BACKQUOTE</autogen>
<autogen>__KeyToKey__ KeyCode::BACKSLASH, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::BACKSLASH</autogen>
<autogen>__KeyToKey__ KeyCode::BRACKET_LEFT, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::BRACKET_LEFT</autogen>
<autogen>__KeyToKey__ KeyCode::BRACKET_RIGHT, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::BRACKET_RIGHT</autogen>
<autogen>__KeyToKey__ KeyCode::COMMA, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::COMMA</autogen>
<autogen>__KeyToKey__ KeyCode::DOT, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::DOT</autogen>
<autogen>__KeyToKey__ KeyCode::EQUAL, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::EQUAL</autogen>
<autogen>__KeyToKey__ KeyCode::MINUS, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::MINUS</autogen>
<autogen>__KeyToKey__ KeyCode::QUOTE, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::QUOTE</autogen>
<autogen>__KeyToKey__ KeyCode::SEMICOLON, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::SEMICOLON</autogen>
<autogen>__KeyToKey__ KeyCode::SLASH, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::SLASH</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_0, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_0</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_1, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_1</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_2, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_2</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_3, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_3</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_4, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_4</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_5, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_5</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_6, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_6</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_7, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_7</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_8, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_8</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_9, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_9</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_CLEAR, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_CLEAR</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_COMMA, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_COMMA</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_DOT, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_DOT</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_EQUAL, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_EQUAL</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_MINUS, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_MINUS</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_MULTIPLY, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_MULTIPLY</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_PLUS, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_PLUS</autogen>
<autogen>__KeyToKey__ KeyCode::KEYPAD_SLASH, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::KEYPAD_SLASH</autogen>
<autogen>__KeyToKey__ KeyCode::DELETE, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::DELETE</autogen>
<autogen>__KeyToKey__ KeyCode::ENTER, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::ENTER</autogen>
<autogen>__KeyToKey__ KeyCode::ESCAPE, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::ESCAPE</autogen>
<autogen>__KeyToKey__ KeyCode::FORWARD_DELETE, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::FORWARD_DELETE</autogen>
<autogen>__KeyToKey__ KeyCode::RETURN, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::RETURN</autogen>
<autogen>__KeyToKey__ KeyCode::SPACE, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::SPACE</autogen>
<autogen>__KeyToKey__ KeyCode::TAB, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::TAB</autogen>
<autogen>__KeyToKey__ KeyCode::CURSOR_UP, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::CURSOR_UP</autogen>
<autogen>__KeyToKey__ KeyCode::CURSOR_DOWN, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::CURSOR_DOWN</autogen>
<autogen>__KeyToKey__ KeyCode::CURSOR_LEFT, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::CURSOR_LEFT</autogen>
<autogen>__KeyToKey__ KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::CURSOR_RIGHT</autogen>
<autogen>__KeyToKey__ KeyCode::PAGEUP, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::PAGEUP</autogen>
<autogen>__KeyToKey__ KeyCode::PAGEDOWN, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::PAGEDOWN</autogen>
<autogen>__KeyToKey__ KeyCode::HOME, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::HOME</autogen>
<autogen>__KeyToKey__ KeyCode::END, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::END</autogen>
<autogen>__KeyToKey__ KeyCode::UK_SECTION, ModifierFlag::OPTION_L, KeyCode::ESCAPE, KeyCode::UK_SECTION</autogen>
</item>
</root>

This wouldn't work with repeated key presses:

__KeyToKey__ KeyCode::OPTION_L, KeyCode::VK_NONE, Option::KEYTOKEY_BEFORE_KEYDOWN, KeyCode::ESCAPE

share|improve this answer
    
Wow, that’s one spectacularly ugly hack. :-) I hope someone else shows up with a better idea! Though it’s at least a way to do it, so thanks for that. –  Aristotle Pagaltzis Apr 3 '13 at 12:20

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.