god-mode icon indicating copy to clipboard operation
god-mode copied to clipboard

Add customisation to disable sticky `god-literal-key`

Open doneself opened this issue 3 years ago • 10 comments

when i type "x space 4 j", get the message "god-mode-lookup-command: God: Unknown key binding for ‘C-x 4 j‘" what did I do wrong?

dired-jump-other-window is an autoloaded interactive compiled Lisp function in ‘dired-x.el’.

It is bound to C-x 4 C-j.

doneself avatar Oct 21 '21 02:10 doneself

Hi @doneself! xSPC4j actually translates to C-x4j due to sticky literal key behaviour which uses SPC by default. If you want to disable this behaviour, set god-literal-key to nil in your configuration.

(setq god-literal-key nil)

darth10 avatar Oct 21 '21 08:10 darth10

When the value of god-literal-key is set to nil, i don't know how to use god-mod to execute the command (dired-jump-other-window). Because dired-jump-other-window is bound to C-x 4 C-j.

doneself avatar Oct 21 '21 09:10 doneself

Ah yes, my bad. There needs to be some indirection to disable sticky literal key behaviour then. Would that work for you? If yes, I can implement that fairly quickly.

I suppose a temporary workaround would be to bind dired-jump-other-window to C-x4j.

darth10 avatar Oct 21 '21 09:10 darth10

OK, thank you for your help and guidance.

doneself avatar Oct 21 '21 09:10 doneself

I've given this a bit of thought, and there are a couple options to help users with similar key bindings. C-x4C-j has a modifier key (C-) that's used in a key sequence after a key without a modifier key (4), but it's still a valid key sequence and doesn't break key binding conventions.

We could define a customisation to either:

  • Toggle sticky literal key if the literal key is entered again (xSPC4SPCjC-x4C-j), or
  • Disable sticky literal key behaviour altogether, so that the literal key only applies to the first subsequent key (xSPC4jC-x4C-j).

I'll leave this open for folks to discuss what the best option would be to implement in God mode.

darth10 avatar Oct 21 '21 19:10 darth10

In most cases, I prefer to execute the command (god-execute-with-current-bindings) in emacs state rather than toggle god-local-mode. So I often use apps key to execute god-execute-with-current-bindings.Because I press apps key with my right hand.Pressing x and y key with my left hand.

------------------ Original ------------------ From: "emacsorphanage/god-mode" @.>; Date: Fri, Oct 22, 2021 03:58 AM @.>; @.@.>; Subject: Re: [emacsorphanage/god-mode] Add customisation to disable sticky god-literal-key (Issue #135)

I've given this a bit of thought, and there are a couple options to help users with similar key bindings. C-x4j as a modifier key is used in a key sequence after a key without a modifier is used, but it's still a valid key sequence and doesn't break key binding conventions.

We can define a customisation to either:

Toggle sticky literal key if the literal key is entered again (xSPCjSPCj → C-xjC-j), or

Disable sticky literal key behaviour altogether, so that the literal key only apply to the first subsequent key (xSPCjj → C-xjC-j).

I'll leave this open for folks to discuss what the best option would be to implement in God mode.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

doneself avatar Oct 22 '21 00:10 doneself

I could adopt to a toggling god-literal-key equally well as to a non-sticky one, but without beeing able to enter either of C-x x C-x or C-x x x, god-mode would be pretty much broken for me :-(

For now, I fix this for me with the non-sticky version, since that's what's easier for me to do from within my config file with:

(defun advice/god-mode-clear-literal-sequence-flag (&rest _)
  (setq god-literal-sequence nil))
(advice-add 'god-key-string-after-consuming-key :before
            #'advice/god-mode-clear-literal-sequence-flag)

federkamm avatar Jul 11 '22 09:07 federkamm

I like the idea of pressing SPC again to toggle sticky behavior. Another suggestion: let the user map a second key for a non-sticky version of SPC. E.g: ,. So:

  • x SPC 4 SPC jC-x 4 C-j
  • x , 4 jC-x 4 C-j

This would attend @doneself . And also @federkamm, see:

  • x , x xC-x x C-x
  • x SPC x xC-x x x

I think this second non-stick key should not be defined be default, letting the user define it if they want.

What do you think?

viniciussbs avatar Feb 26 '23 20:02 viniciussbs

Another suggestion: let the user map a second key for a non-sticky version of SPC. E.g: ,.

Thanks for chiming in, @viniciussbs! That's a good option, with the caveat that they can't enter bindings with ,/C-,. I'm slightly inclined to implement pressing SPC again toggles the sticky literal key.

darth10 avatar Feb 27 '23 09:02 darth10

I came back here to see if anything happened since. I also like the idea best to make SPC toggle the sticky behavior because it would be a non-breaking change. I wouldn't need a non-sticky literal key alternative, then.

As far as I can tell, this would only requires to change the t in (setq god-literal-sequence t) in line 316 in function god-key-string-after-consuming-key to (not god-literal-sequence).

federkamm avatar Aug 13 '23 19:08 federkamm