1

I can execute the function neotree-toggle with M-x.

However, none of these result in opening neotree, like described here and here

(global-set-key (kbd "C-e" ) 'neotree-toggle)
(global-set-key "C-e" 'neotree-toggle)
(global-set-key (kbd "\C-e" ) 'neotree-toggle)
(global-set-key "\C-e" 'neotree-toggle)

Where is my mistake? I don't see it.

7
  • 1
    Where are you putting those lines? The first one and the fourth one look correct. If either one is in your .emacs it should work. Try C-h C-e - this will tell you what Emacs thinks is bound to C-e. If it reports neotree-toggle, then maybe neotree isn't properly loaded. If it reports something else, your bindings didn't work.
    – Tyler
    Apr 11, 2016 at 19:23
  • Perhaps try a keybinding that's not already used? I'm not familiar with overwriting a standard keybinding, but that would at least verify your syntax (which looks good to me).
    – Tim S.
    Apr 11, 2016 at 19:23
  • @TimS. Emacs allows you to overwrite any keybinding, nothing is off-limits
    – Tyler
    Apr 11, 2016 at 20:33
  • 3
    Sounds like you are binding a key globally but the current mode has its own keymap, and there those keys have different bindings. Or if not the current (major) mode then some minor mode. Emacs has lots of keymaps. Binding a key in the global map (which is what global-set-key does) does not mean that it takes effect everywhere. It just means that it takes effect everywhere that there is not some other keymap that binds the same key otherwise.
    – Drew
    Apr 11, 2016 at 22:40
  • 1
    @toogley Tyler meant C-h k C-e
    – YoungFrog
    Apr 12, 2016 at 14:06

2 Answers 2

0

I had some problems with gtags mode map at some point. I wanted to override the keybinding and use the helm-gtags key instead.

(define-key ggtags-mode-map (kbd "M-.") 'helm-gtags-dwim)

Since what you've tried to do isn't working with a global setting, it may be shadowed by a local setting or a local map. If you find that it's just a local binding, you can use local-set-key in a mode hook to override it. If it's in a mode specific map, you can use the code above as a template for your rebinding.

Update: changed the answer based on the culprit more likely being a local binding shadowing the new global setting.

4
  • 1
    That's not correct. global-set-key defines or redefines a key in the global map. The only fighting that might be involved is if you set a key in the global map, and that key is used in another map. Global bindings are shadowed by all other maps, but you can definitely change them.
    – Tyler
    Apr 11, 2016 at 20:22
  • 1
    In that case, it may actually be that there's a local keybinding shadowing the global keybinding that is being set. Apr 11, 2016 at 20:30
  • Yes, which is why I suggested OP use C-h C-e to see what command is actually being called.
    – Tyler
    Apr 11, 2016 at 20:32
  • That's pretty much what I was thinking, although not as well defined... good clarification.
    – Tim S.
    Apr 11, 2016 at 22:53
0

I honestly don't know why, but

(global-set-key "\M-e" 'neotree-toggle)

works, but

(global-set-key "\C-e" 'neotree-toggle)

not, when executed inside my init.el. This effect is clearly reproducible, even when global-set-key is manually executed. @Tyler suggested to use C-h C-e which said for the second method at some time, its not defined. Unfortunately, i can't reproduce that and C-h C-e just shows nothing.

Thanks anyways.

1
  • 1
    As @YoungFrog pointed out, I meant to say C-h k C-e.
    – Tyler
    Apr 12, 2016 at 16:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.