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

conflicts with `evil-respect-visual-line-mode' #70

Closed ghost closed 5 years ago

ghost commented 5 years ago

By default, evil-magit uses evil-next-visual-line and evil-previous-visual-line for movement, which is what I want, but for some reason this seems to conflict with enabling evil-respect-visual-line-mode. In my init.el, I have the following use-package declaration for evil:

(use-package evil
  :straight t
  :demand t
  :init
  ;; set before evil is loaded, as per evil docs
  (setq evil-respect-visual-line-mode t))

Normally, this configuration works, e.g. in a markdown buffer with visual-line-mode enabled. However, line-wise movement in magit-mode (e.g. an expanded diff) with visual-line-mode jumps between hard line breaks, as if evil-respect-visual-line-mode was never enabled. If I invoke M-x evil-next-visual-line it works fine, and tells me (incorrectly) that I can run it with 'j'. If I ask for what 'j' does run with M-x describe-key it says evil-next-line. If I don't enable evil-respect-visual-line-mode then everything works as I would like, and line-wise movement properly accounts for visual-line-mode. Unfortunately, since evil-respect-visual-line-mode has to be set before evil is loaded, I can't disable it for magit-mode only. It's either globally enabled or disabled.

justbur commented 5 years ago

I have an idea about what might be happening. evil-magit uses visual lines by default and evil-repsect-visual-line-mode is probably remapping that unintentionally to the command for regular lines. I recently put in a PR to evil to fix and improve evil-repsect-visual-line-mode and that should fix this issue.

magit itself is based on real lines, so it's not ideal to use visual-line-mode in magit anyway, but I'll assume you have a reason to do that.

ghost commented 5 years ago

That's what I assumed was happening, too. Would it make sense to just use normal line-wise movement (e.g. evil-next-line) and leave it up the user to enable evil-respect-visual-line-mode if they need it? I use it when viewing diffs of prose which have paragraphs as single soft-wrapped lines, with magit-diff-refine-hunk enabled to see word diffs. Maybe this isn't the best strategy, though.

justbur commented 5 years ago

Yes, I think that makes sense. In retrospect, I don't know why I chose to use those commands in the first place. I changed it in 4b66a1d

ghost commented 5 years ago

Works perfectly now, as far as I can tell. Thanks!