Live data from Hacker News

Mastering Key Bindings in Emacs

masteringemacs.org

11–20 of 20 posts

Re: Mastering Key Bindings in Emacs

#11

The workflow stuff looks cool, but between swapping Caps_Lock with Control_L and claiming M-x "involves scrunching your left hand up", I think most hackers would benefit more from learning better touch typing, rather than moving their contortions around the way the author does. You weren't meant to use the same hand for the key and the modifier--that's why there's another set of modifiers for your other hand, and why…

Indeed.

Also, while it's really its own discussion, I think Emacs is more usable with the Dvorak keyboard layout. Emacs's default keybindings pack a lot of important keys into the left hand on Qwerty (C-x, C-c, C-v, C-r, C-s), while with Dvorak they're distributed more evenly.

Remapping left-Alt to Ctrl is another option; that way, you can hold Ctrl with your thumb while you type.

Re: Mastering Key Bindings in Emacs

#12
post #8
post #3

What I would really like is an Emacs macro that would just insert the appropriate keybinding code for use in an .emacs file -- there doesn't seem to be one but it seems like it would be an obvious help. Or is this one of those Emacs things that is obvious and everyone knows but me?

This one prompts you to type a literal key sequence (exactly like with `describe-key', C-h k) and inserts it at the point in a representation that the *-set-key functions can use. As written it's bound to to C-c k, and only in the scope of elisp buffers. (defun insert-key-sequence (key-repr) "Reads a literal key sequence from the user and inserts a representation of it at point, suitable for `global-set-key' or `loca…

Nice. I tried to write a quick version of this for my response, but wasn't aware of insert-key-sequence.

Edit: insert-key-sequence doesn't exist on Emacs 22.3.1, is that a more recent addition?

Also, while not crucial, I prefer to add a my-X-mode-hook function and add things to that, rather than adding several lambdas to the mode hook - it's easier to modify them all after binding that way.

Re: Mastering Key Bindings in Emacs

#13
post #8

Earlier quoted context omitted.

This one prompts you to type a literal key sequence (exactly like with `describe-key', C-h k) and inserts it at the point in a representation that the *-set-key functions can use. As written it's bound to to C-c k, and only in the scope of elisp buffers. (defun insert-key-sequence (key-repr) "Reads a literal key sequence from the user and inserts a representation of it at point, suitable for `global-set-key' or `loca…

Nice. I tried to write a quick version of this for my response, but wasn't aware of insert-key-sequence. Edit: insert-key-sequence doesn't exist on Emacs 22.3.1, is that a more recent addition? Also, while not crucial, I prefer to add a my-X-mode-hook function and add things to that, rather than adding several lambdas to the mode hook - it's easier to modify them all after binding that way.

[deleted]

Re: Mastering Key Bindings in Emacs

#14
post #8
post #3

What I would really like is an Emacs macro that would just insert the appropriate keybinding code for use in an .emacs file -- there doesn't seem to be one but it seems like it would be an obvious help. Or is this one of those Emacs things that is obvious and everyone knows but me?

This one prompts you to type a literal key sequence (exactly like with `describe-key', C-h k) and inserts it at the point in a representation that the *-set-key functions can use. As written it's bound to to C-c k, and only in the scope of elisp buffers. (defun insert-key-sequence (key-repr) "Reads a literal key sequence from the user and inserts a representation of it at point, suitable for `global-set-key' or `loca…

[deleted]

Re: Mastering Key Bindings in Emacs

#15
post #8

Earlier quoted context omitted.

This one prompts you to type a literal key sequence (exactly like with `describe-key', C-h k) and inserts it at the point in a representation that the *-set-key functions can use. As written it's bound to to C-c k, and only in the scope of elisp buffers. (defun insert-key-sequence (key-repr) "Reads a literal key sequence from the user and inserts a representation of it at point, suitable for `global-set-key' or `loca…

Nice. I tried to write a quick version of this for my response, but wasn't aware of insert-key-sequence. Edit: insert-key-sequence doesn't exist on Emacs 22.3.1, is that a more recent addition? Also, while not crucial, I prefer to add a my-X-mode-hook function and add things to that, rather than adding several lambdas to the mode hook - it's easier to modify them all after binding that way.

It's not part of emacs, I just wrote it as an example.

Re: Mastering Key Bindings in Emacs

#16
post #15

Earlier quoted context omitted.

Nice. I tried to write a quick version of this for my response, but wasn't aware of insert-key-sequence. Edit: insert-key-sequence doesn't exist on Emacs 22.3.1, is that a more recent addition? Also, while not crucial, I prefer to add a my-X-mode-hook function and add things to that, rather than adding several lambdas to the mode hook - it's easier to modify them all after binding that way.

It's not part of emacs, I just wrote it as an example.

Oh, right. Sorry, hadn't had my coffee yet.

I tried doing exactly that, but used (interactive "kKey: "), with lowercase k, and it didn't work.

Re: Mastering Key Bindings in Emacs

#17
post #15

Earlier quoted context omitted.

It's not part of emacs, I just wrote it as an example.

Oh, right. Sorry, hadn't had my coffee yet. I tried doing exactly that, but used (interactive "kKey: "), with lowercase k, and it didn't work.

That seems to work also, what's the problem?

Re: Mastering Key Bindings in Emacs

#18
post #17

Earlier quoted context omitted.

Oh, right. Sorry, hadn't had my coffee yet. I tried doing exactly that, but used (interactive "kKey: "), with lowercase k, and it didn't work.

That seems to work also, what's the problem?

Didn't work correctly with a few slightly-more elaborate key combinations I tried. IIRC C-x M-. was one of them.

I much prefer formatting the keybindings like kbd uses, anyway - do you know offhand how to convert a keypress to that format w/out using C-h k?

Re: Mastering Key Bindings in Emacs

#19
post #17

Earlier quoted context omitted.

That seems to work also, what's the problem?

Didn't work correctly with a few slightly-more elaborate key combinations I tried. IIRC C-x M-. was one of them. I much prefer formatting the keybindings like kbd uses, anyway - do you know offhand how to convert a keypress to that format w/out using C-h k?

Not offhand, but I looked it up and I think what you want is `key-description'. It prints key sequences, so e.g. (key-description "\370") evals to "M-x".

Re: Mastering Key Bindings in Emacs

#20
post #19

Earlier quoted context omitted.

Didn't work correctly with a few slightly-more elaborate key combinations I tried. IIRC C-x M-. was one of them. I much prefer formatting the keybindings like kbd uses, anyway - do you know offhand how to convert a keypress to that format w/out using C-h k?

Not offhand, but I looked it up and I think what you want is `key-description'. It prints key sequences, so e.g. (key-description "\370") evals to "M-x".

Bingo. Thanks.

This should do what the original commenter wanted:

    (defun insert-keybinding (k)
      "Insert code for a keybinding."
      (interactive "kKey sequence: ")
      (insert (concat "(global-set-key (kbd \""
    		  (key-description k)
    		  "\") 'function-name)")))
Post reply on HN