help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to get in progress Key Sequence from Elisp


From: Barry OReilly
Subject: How to get in progress Key Sequence from Elisp
Date: Sun, 2 Dec 2012 15:09:36 -0500

When I'm in the middle of inputting a Key Sequence, how may I get a data structure with the Key Sequence entered thus far from Elisp?

More details: I create Key Translations that are contingent on the Evil (Vim emulation) state.  If in insert state, it's the idenity translation:

  ;; -*- lexical-binding: t -*-
  (defun make-conditional-key-translation (key-from key-to translate-keys-p)
    "Make a Key Translation such that if the translate-keys-p function returns true,
  key-from translates to key-to, else key-from translates to itself.  translate-keys-p
  takes no args. "
    (define-key key-translation-map key-from
                (lambda (prompt)
                        (if (funcall translate-keys-p) key-to key-from))))
  (defun my-translate-keys-p ()
    "Returns whether conditional key translations should be active.  See make-conditional-key-translation function. "
    (or (evil-motion-state-p) (evil-normal-state-p) (evil-visual-state-p)))
  (make-conditional-key-translation (kbd "g") (kbd "C-x") 'my-translate-keys-p)

This works well, but one inconvenience is that for bindings like this:

  (define-key evil-motion-state-map "sg" 'my-func)

"sg" gets translated into "s C-x".  If I have my-translate-keys-p return nil if not starting a Key Sequence, I will get the behavior I seek.  I can do this if I can get the Key Sequence as the user has been entered at that time.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]