cmderdev / cmder

Lovely console emulator package for Windows
https://cmder.app
MIT License
25.88k stars 2.03k forks source link

Fix https://github.com/cmderdev/cmder/issues/2789 #2791

Closed chrisant996 closed 1 year ago

chrisant996 commented 1 year ago

Holding ^C made git.exe hang while cmd.exe (Clink) updated the prompt.

The prompt script had three problems:

  1. It invoked git config every time a prompt was displayed, to figure out where to skip invoking git status. But it even did that if the current directory wasn't part of a git repo.
  2. It invoked git config two times for every single prompt, to attempt to improve performance if the user disables git status coloring. But two times for every single prompt is expensive, so it has the opposite effect in the general case, and noticeably degrades performance.
  3. It invoked git config using a blocking call, instead of using the async prompt support in Clink. That significantly reduced the benefit of having used async prompt filtering for git status.

Now the git config invocations use async prompt filtering, which lets the prompt display instantaneously. It also now uses a timer to avoid invoking git config repeatedly when new prompts show up in rapid succession.

Also, the cmderGitStatusOptIn variable is no longer leaked into the Lua global namespace.

These changes resolve the issue: holding ^C is very fast and no longer causes git.exe to hang.

DRSDavidSoft commented 1 year ago

👍🏻 LGTM!