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

MagitPopup without evil bindings #8

Open decoursin opened 8 years ago

decoursin commented 8 years ago

As above, MagitPopup (or magit-popup-mode) doesn't have evil bindings yet. However, this works instead so far:

(evil-set-initial-state 'magit-popup-mode 'normal)

Thanks!

justbur commented 8 years ago

The magit popup is mostly TAB and RET, no?

decoursin commented 8 years ago

Well, I like everything to have evil mode. For example while within MagitPopup, I can use evil bindings to scroll up and down to see options that I couldn't see otherwise because the screen is too small. Once I'm in it, then, I can use all of evil bindings to easily switch windows, close this window, and all the other stuff my personalized evil can do.

But the solution above works great, so maybe we don't need to change anything.

justbur commented 8 years ago

I wasn't sure there was much value to doing something more with the pop ups but I'm open to suggestions. On Sun, Nov 22, 2015 at 7:37 AM Nick DeCoursin notifications@github.com wrote:

Well, I like everything to have evil mode. For example while within MagitPopup, I can use evil bindings to scroll up and down to see options that I couldn't see otherwise because the screen is too small. Once I'm in it, then, I can use all of evil bindings to easily switch windows, close this window, and all the other stuff my personalized evil can do.

But the solution above works great, so maybe we don't need to change anything.

— Reply to this email directly or view it on GitHub https://github.com/justbur/evil-magit/issues/8#issuecomment-158768855.

decoursin commented 8 years ago

Great thank you. I don't actually have any suggestions.

justbur commented 8 years ago

I can do C-bfud for scrolling that shouldn't be a problem. hjkl is a problem because it would mask the magit functions, unless you went to modal editing which I think would be weird in a popup

decoursin commented 8 years ago

Yup, I'm using modal editing. I have to press i for insert mode then press the key, but it's worth it for me for the power and flexibility of being able to use all my evil bindings like switching windows or closing the current window. Not everyone would appreciate that though, so the current implementation would be better than modal-editing for the mass.

Actually, I think the best would be normal-mode (or whatever you want to call it that is just one mode where all my evil bindings work) with shift-key or ctrl-key for the option. This is different than how it currently stands which is just key for the option (e.g. d for --dwim.) This probably wouldn't work out-of-the-box for most configurations that depend on ctrl (or shift.) However, semicolon key might work? The only compromise is if there's some way to configure-it.

justbur commented 8 years ago

We could try a leader key approach. Hit the leader key then the option. The magit popups are a little odd in how they implement key bindings though and I haven't completely dug into them yet.

decoursin commented 8 years ago

That would be really cool.

justbur commented 8 years ago

Try this:

(dolist (char (number-sequence ?! ?z))
  (evil-define-key 'normal magit-popup-mode-map
    (concat ";" (char-to-string char)) 'magit-invoke-popup-action))

Be careful though. I'm not positive this will work everywhere, but it allows for ; as a leader.

decoursin commented 8 years ago

Thanks, I gave it a try. It doesn't work for the switches and options, unless I'm doing something wrong. Anyways, ";" as a leader, for me, isn't much better than going into insert mode first.

Ctrl or shift might be better (hold ctrl then click option, for example), but it's probably not worth it. Thank you for giving this attention, but I'm going to close it because it's not worth anymore. I'm satisfied with changing the default initial state and using insert mode.

A6GibKm commented 6 years ago

I had to set

(general-define-key
 :states 'emacs
 :keymaps 'magit-popup-mode-map
 "j" 'forward-button
 "k" 'backward-button
 )

In general.el. it would be nice to be able to use emacs-state keybindings for magit-popup-mode in normal-state, but I guess that would cause a lot of overlapping.