14

I'm trying unbind org-cycle-agenda-files which is set by default to C-' and C-,.

My weapon of choice to do so is use-package package.

On github.com/use-package/bind-key.el page I have found following lines:

;; To unbind a key within a keymap (for example, to stop your favorite major
;; mode from changing a binding that you don't want to override everywhere),
;; use `unbind-key':
;;
;;   (unbind-key "c-c x" some-other-mode-map)

This resulted in me unsuccessfully trying following variations:

(unbind-key "C-'" )
(unbind-key "C-," )
(unbind-key "C-'" (org-cycle-agenda-files))
(unbind-key "C-," (org-cycle-agenda-files))
(bind-keys :map org-mode-map
       :unbind "C-'")
(unbind-key "C-'" org-cycle-agenda-files)

After that fail I triyed some "traditional" solution to the problem.

Information found in gnu.org manual, and some emacs.stackexchange answers resulted in me producing following useless havoc:

(define-key (org-cycle-agenda-files) key nil)
(define-key (current-global-map) "C-'" nil)
(local-unset-key "C-'")
(global-unset-key "C-'")
(with-eval-after-load org-mode
  (unbind-key "C-'" org-mode-map)
  (unbind-key "C-," org-mode-map))
(global-set-key (kbd "C-'") 'nil)

Yep.... None these variations vorks. :D

I would love to find use-package based solution, since I'm already using some of it's awesome capabilities.

Any kind of suggestion is welcome.

Empty_Mind
  • 1,341
  • 12
  • 27

3 Answers3

17

If you C-h f and enter unbind-key, the help says:

unbind-key is an autoloaded Lisp macro in `bind-key.el'.

(unbind-key KEY-NAME &optional KEYMAP)

Not documented.

The second argument to unbind-key is a key map -- for example org-mode-map.

This works for me:

(require 'bind-key)
(unbind-key "C-," org-mode-map)
(unbind-key "C-'" org-mode-map)

A good place to put this would be the :config section of a use-package form.

Greg Hendershott
  • 1,483
  • 12
  • 17
5

Yeah the unbinding does not look elegant, but that's the main approach according to this answer.

As for use-package, I have been using unbind under :init directive like so:

:init
(unbind-key "C-'" org-mode-map)
(unbind-key "C-," org-mode-map)
Emacs User
  • 5,553
  • 18
  • 48
  • 3
    You need to put this inside `:config`, and not `:init`, because in `:init` the keymap may not be loaded yet. – kotchwane Mar 01 '20 at 10:12
  • `:config` didn't work for me. According to the [use-package docs](https://github.com/jwiegley/use-package#binding-within-local-keymaps), you should use `:bind` with `:map` – Martin Oct 07 '22 at 07:29
  • The `:config` option works for me. The option to set `nil` in mode-map do not remove keys form listing, just set them nil. The `:config` option clear keys from map – mimros Aug 03 '23 at 21:38
4

Using use-package's :bind by setting the binding to nil worked for me in similar cases, but I use it with :straight org-plus-contrib and I do not know if this approach applies the same with built-in org:

(use-package org
  :straight org-plus-contrib
  :bind (:map org-mode-map 
         ("C-," . nil)
         ("C-'" . nil)))