emacs-evil / evil-magit

Black magic or evil keys for magit
https://github.com/justbur/evil-magit
GNU General Public License v3.0
273 stars 16 forks source link

git-rebase-mode: meaningfully disable most keybindings #29

Closed listx closed 7 years ago

listx commented 7 years ago

I only want to keep the binding for [return] (show commit at point) and remove all the rest as I find the non-textual editing interface too simple and limiting. I've managed to hack together something along the lines of

(add-hook 'git-rebase-mode-hook 'l/git-rebase-keymap)

; git-rebase.el is provided by Magit.
(defun l/git-rebase-keymap ()
    "My keys for git-rebase mode."
    (interactive)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "p" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "r" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "e" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "s" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "f" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "x" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "d" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "u" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "h" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "j" nil)
    (evil-magit-define-key evil-magit-state 'git-rebase-mode-map "k" nil)

    (define-key git-rebase-mode-map "p" nil)
    (define-key git-rebase-mode-map "r" nil)
    (define-key git-rebase-mode-map "e" nil)
    (define-key git-rebase-mode-map "s" nil)
    (define-key git-rebase-mode-map "f" nil)
    (define-key git-rebase-mode-map "x" nil)
    (define-key git-rebase-mode-map "d" nil)
    (define-key git-rebase-mode-map "u" nil)
    (define-key git-rebase-mode-map "h" nil)
    (define-key git-rebase-mode-map "j" nil)
    (define-key git-rebase-mode-map "k" nil)
)

(with-eval-after-load "git-rebase"
    `(progn
        (l/git-rebase-keymap)
    )
)

which seems to successfully unbind the various keys like p and r, but I find myself stuck with one major problem: when I go into insert mode after (toggle-read-only nil), I can't type anything in because all of my insert keys are unbound! E.g., if I press a I get a is undefined.

Help?

justbur commented 7 years ago

It's because git-rebase-mode is derived from special-mode, which is not intended for editing text. I think you actually want to get out of git-rebase-mode entirely. This is really more of a magit feature than an evil-magit feature.

listx commented 7 years ago

Ah, thanks for the clarification. You're right that this pertains more to magit itself than evil-magit. Closing.