Function: bind-key--remove

bind-key--remove is a byte-compiled function defined in bind-key.el.gz.

Signature

(bind-key--remove KEY KEYMAP)

Documentation

Remove KEY from KEYMAP.

In contrast to define-key, this function removes the binding from the keymap.

Source Code

;; Defined in /usr/src/emacs/lisp/bind-key.el.gz
(defun bind-key--remove (key keymap)
  "Remove KEY from KEYMAP.

In contrast to `define-key', this function removes the binding from the keymap."
  (define-key keymap key nil)
  ;; Split M-key in ESC key
  (setq key (cl-mapcan (lambda (k)
                         (if (and (integerp k) (/= (logand k ?\M-\0) 0))
                             (list ?\e (logxor k ?\M-\0))
                           (list k)))
                       key))
  ;; Delete single keys directly
  (if (= (length key) 1)
      (delete key keymap)
    ;; Lookup submap and delete key from there
    (let* ((prefix (vconcat (butlast key)))
           (submap (lookup-key keymap prefix)))
      (unless (keymapp submap)
        (error "Not a keymap for %s" key))
      (when (symbolp submap)
        (setq submap (symbol-function submap)))
      (delete (last key) submap)
      ;; Delete submap if it is empty
      (when (= 1 (length submap))
        (bind-key--remove prefix keymap)))))