To reproduce (eval in scratch buffer) (define-key global-map (kbd "C-c C-l r") `(menu-item "2" switch-to-buffer :filter ,(lambda (cmd) (print (format "Called in %s" (current-buffer))) cmd))) (with-temp-buffer (with-output-to-string (describe-buffer-bindings (get-buffer "*scratch*") [3 12] t))) This outputs: \"Called in *temp*\" Expected: the filter function must be called in *scratch* since this is the buffer you want to check the bindings.