Here's a MWE: ``` (require 'package) (setq package-archives nil) (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/" ) t) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/" ) t) (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") t) (package-initialize) (package-refresh-contents) (defun my-func () "Say `HEY'." (interactive) (message "HEY")) (use-package ledger-mode :ensure t :bind (:map ledger-mode-map ("<C-f13>" . my-func))) (define-key ledger-mode-map (kbd "C-$") 'my-func) ``` If we evaluate the above expression, then edit a buffer in ledger-mode, and then press either `C-$`or `C-f13`, "HEY" shows up in the minibuffer. But if instead of using `define-key` to do the mapping for `C-$`, we add it to the `:bind` section of `use-package` thus: ``` (use-package ledger-mode :ensure t :bind (:map ledger-mode-map ("<C-f13>" . my-func) ((kbd "C-$") . my-func))) ``` and then evaluate the expression, the `*Warnings*` buffer displays this: `Error (use-package): Failed to parse package ledger-mode: use-package: ledger-mode wants arguments acceptable to the 'bind-keys' macro, or a list of such values` The trick is to change that last line from ``` ((kbd "C-$") . my-func))) ``` to ``` ("C-$" . my-func))) ``` Then once again either `C-$` or `C-f13` display "HEY" in the minibuffer.