Hacker News new | past | comments | ask | show | jobs | submit login

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 `local-set-key'."
      (interactive "KKey sequence? ")
      (prin1 key-repr (current-buffer))
      (insert " "))
    
    (add-hook 'emacs-lisp-mode-hook 
              #'(lambda () 
                  (local-set-key "\C-ck" #'insert-key-sequence)))
    
    (run-hooks 'emacs-lisp-mode-hook)
Unfortunately it doesn't seem to work for mouse chords.



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.


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


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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: