jesseduffield / lazygit

simple terminal UI for git commands
MIT License
53.57k stars 1.87k forks source link

Run custom commands in interactive shell #4047

Open felixschndr opened 2 weeks ago

felixschndr commented 2 weeks ago

Is your feature request related to a problem? Please describe. When a custom command is specified in the config it runs it with bash -c "<command>". I'd like this shell to be interactive to be able to run shell aliases which lie in my .bashrc.

Describe the solution you'd like Run bash -ic "<command">

Describe alternatives you've considered Currently I am adding a layer of bash:

  - key: <c-d>
    context: "localBranches, remoteBranches"
    command: bash -ic "git_delete_old_branches"
    stream: true

which runs bash -c bash -ic "git_delete_old_branches"

Additional context Maybe make this a config variable?

I tried to go through the source code to check where the bash -c (without -i) is invoked but was a bit overwhelmed by the search results. If someone could show me where this is done I'd take a crack at creating a PR.

aaronjconway commented 2 weeks ago

NewShell() in the /oscommands/cmd_obj_builder.go

I just open up another pane, do work then hop back.

felixschndr commented 2 weeks ago

There is also NewInteractiveShell() https://github.com/jesseduffield/lazygit/blob/b0a766cc9529dadde5e5bd51bb1cc5c503213f66/pkg/commands/oscommands/cmd_obj_builder.go#L54. We could just run this function instead, right?

felixschndr commented 2 weeks ago

We could just run this function instead, right?

If so I am not able to find where this function call has to be changed

yam-liu commented 1 week ago

There are some thoughts shared in https://github.com/jesseduffield/lazygit/pull/3299#issuecomment-2265269589. Using -i for custom commands is not ideal due to performance concerns.

Since custom commands are typically one-off configurations in config.yml, it should be fine to write the original command directly. However, for shell commands that you frequently type and reuse, using -i is reasonable so that you can reach your aliases etc..