jesseduffield / lazygit

simple terminal UI for git commands
MIT License
52.66k stars 1.84k forks source link

Key bindings in custom commands are all mapped to lower cases #3470

Open fenguoerbian opened 7 months ago

fenguoerbian commented 7 months ago

Describe the bug In my config.yaml I've set two custom commands to push and pull to specific remotes and branches. This part of the config is shown as below

customCommands:
  - key: '<c-p>'
    description: "Pull from a specific remote repository"
    context: 'files'
    loadingText: 'Pulling ...'
    command: git pull {{ .Form.Remote }} {{ .Form.RemoteBranch }}
    prompts:
      - type: 'input'
        key: 'Remote'
        title: "Remote:"
        suggestions:
          preset: 'remotes'
      - type: 'input'
        key: 'RemoteBranch'
        title: "Remote branch:"
        suggestions:
          command: "git branch --remote --list '{{.Form.Remote}}/*' --format='%(refname:short)' | sed 's/{{.Form.Remote}}\\///'"
  - key: '<c-P>' # '<c-P>' will not work?, seems to be same as '<c-p>', please use '?' in file panel to bring up the keybindings menu
    description: "Push to a specific remote repository"
    context: 'files'
    loadingText: 'Pus hing ...'
    command: git push {{ .Form.Remote }} {{ .Form.RemoteBranch }}
    prompts:
      - type: 'input'
        key: 'Remote'
        title: "Remote:"
        suggestions:
          preset: 'remotes'
      - type: 'input'
        key: 'RemoteBranch'
        title: "Remote branch:"
        suggestions:
          command: "git branch --remote --list '{{.Form.Remote}}/*' --format='%(refname:short)' | sed 's/{{.Form.Remote}}\\///'"          

The key bindings for these two commands are <c-p> and <c-P>. But in actuality they are all mapped to <c-p> in lazygit, see the screenshot below:

lazygit_keybinding_problems

To Reproduce As described in the bug description

Expected behavior I'm not sure whether the custom command keybindings support the capital letter or am I just missing some config settings to setup a keybinding with capital letter.

Version info: lazygit version: commit=3675570a391b1a49ddd198b4c7e71e17701d4404, build date=2024-03-23T09:09:11Z, build source=binaryRelease, version=0.41.0, os=windows, arch=amd64, git version=2.43.0.windows.1

git version: git version 2.43.0.windows.1

Note: please try updating to the latest version or manually building the latest master to see if the issue still occurs.

dsolerh commented 6 months ago

hi, I'll like to give this one a try. Can someone assign me?

mark2185 commented 6 months ago

@dsolerh feel free to take it, do note that I'm not sure if this is just a bug that we map everything as lowercase, or if we can't actually detect <c-p> vs <c-shift-p>.

dsolerh commented 6 months ago

yes, I think the clear way to implement it will be using <c-shift-something> in that case we'll have to add all those keys to the map, and I guess that check how they are converted to actual key press

dsolerh commented 6 months ago

Hi, I can't find a way to capture an key event when I press ctr+shift+, I. think that the tcell package does not support this:

image

https://pkg.go.dev/github.com/gdamore/tcell/v2@v2.7.4#ModShift

mark2185 commented 6 months ago

@stefanhaller you've been elbow-deep in the tcell, you could probably answer this off the cuff.

stefanhaller commented 6 months ago

I'm not an expert here either, but my suspicion is that it's just not possible unless tcell implements https://github.com/gdamore/tcell/issues/671.