-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Auto-refresh on window activation #2854
Conversation
Holy shit this is a gamechanger |
Is there a PR against tcell for this? |
The tcell PR is mentioned in the commit message of the first commit, it's gdamore/tcell#599 (I see that you found it already meanwhile 😄). For some reason I didn't get any further reactions on it from Garrett since March; I hope he's doing well. I also have to say that the PR can't be merged in it's current state because there's a change missing for the |
Okay that sounds fine to me. I'm happy with this PR as-is (I see it's in draft: what else did you intend to change?) |
I didn't intend to change anything else. If the gocui changes are merged to gocui, I'd consider it ready. |
@@ -726,6 +731,7 @@ func (g *Gui) MainLoop() error { | |||
|
|||
if g.Mouse { | |||
Screen.EnableMouse() | |||
Screen.EnableFocus() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this only work when mouse is enabled? I.e. if I alt-tab to my terminal window, does that work?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, that works.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But does it still require Mouse: true
? Strange that it's a mouse event if it doesn't necessarily involve a mouse click
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh that's what you mean. I was lazy and just put it in if g.Mouse
because I thought all clients would probably want to either enable both, or none. Happy to add a separate Focus
flag if you prefer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think it needs its own flag though. The purpose of having the Mouse flag (afaik) is that it's easier to drag and select text when mouse mode is off (in iterm I need to hold option to do it)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah ok. Just enable focus unconditionally then?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, we'll see if it causes issues for anybody before we make it configurable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From gocui's perspective it's configurable anyway because nothing happens if you don't supply an on-focus callback
I've added you as a collaborator in gocui so if you want you can get these changes into gocui yourself: I often make changes in lazygit's vendor directory then copy them across to my gocui repo with Then I get that merged to gocui and then back in the lazygit repo I run: scripts/bump_gocui.sh |
This is temporary as long as gdamore/tcell#599 is not merged. Once that PR is merged, we can revert this.
bfdc140
to
8ce6066
Compare
@jesseduffield This is ready to go if you want to give it a final look. It hasn't changed from the draft except for the middle commit. Feel free to merge it if you're happy with it, I'm not sure I would get around to that today. |
Super excited to use this myself. I'll clean up the file watcher code now that we've got this in place |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [GoogleContainerTools/skaffold](https://github.com/GoogleContainerTools/skaffold) | patch | `v2.6.2` -> `v2.6.3` | | [ajeetdsouza/zoxide](https://github.com/ajeetdsouza/zoxide) | patch | `v0.9.1` -> `v0.9.2` | | [aquaproj/aqua-registry](https://github.com/aquaproj/aqua-registry) | patch | `v4.32.0` -> `v4.32.2` | | [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) | minor | `v0.39.4` -> `v0.40.0` | | [weaveworks/eksctl](https://github.com/weaveworks/eksctl) | minor | `v0.150.0` -> `v0.151.0` | --- ### Release Notes <details> <summary>GoogleContainerTools/skaffold (GoogleContainerTools/skaffold)</summary> ### [`v2.6.3`](https://github.com/GoogleContainerTools/skaffold/releases/tag/v2.6.3): Release [Compare Source](https://github.com/GoogleContainerTools/skaffold/compare/v2.6.2...v2.6.3) ##### v2.6.3 Release - 2023-08-04 **Linux amd64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **Linux arm64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-linux-arm64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **macOS amd64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-darwin-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **macOS arm64** `curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-darwin-arm64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin` **Windows** https://storage.googleapis.com/skaffold/releases/v2.6.3/skaffold-windows-amd64.exe **Docker image** `gcr.io/k8s-skaffold/skaffold:v2.6.3` **Full Changelog**: GoogleContainerTools/skaffold@v2.6.2...v2.6.3 </details> <details> <summary>ajeetdsouza/zoxide (ajeetdsouza/zoxide)</summary> ### [`v0.9.2`](https://github.com/ajeetdsouza/zoxide/releases/tag/v0.9.2): 0.9.2 [Compare Source](https://github.com/ajeetdsouza/zoxide/compare/v0.9.1...v0.9.2) ##### Added - Short option `-a` for `zoxide query --all`. ##### Fixed - PowerShell: use `global` scope for variables / functions. </details> <details> <summary>aquaproj/aqua-registry (aquaproj/aqua-registry)</summary> ### [`v4.32.2`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.32.2) [Compare Source](https://github.com/aquaproj/aqua-registry/compare/v4.32.1...v4.32.2) [Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.32.2) | [Pull Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.32.2) | aquaproj/aqua-registry@v4.32.1...v4.32.2 ##### Fixes [#​14327](https://github.com/aquaproj/aqua-registry/issues/14327) Rename kyleconroy/sqlc to sqlc-dev/sqlc as of repository migration [@​ichizero](https://github.com/ichizero) [#​14339](https://github.com/aquaproj/aqua-registry/issues/14339) sqlc-dev/sqlc: Support old versions ### [`v4.32.1`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.32.1) [Compare Source](https://github.com/aquaproj/aqua-registry/compare/v4.32.0...v4.32.1) [Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.32.1) | [Pull Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.32.1) | aquaproj/aqua-registry@v4.32.0...v4.32.1 #### Fixes [#​14275](https://github.com/aquaproj/aqua-registry/issues/14275) [#​14276](https://github.com/aquaproj/aqua-registry/issues/14276) [#​14277](https://github.com/aquaproj/aqua-registry/issues/14277) [#​14278](https://github.com/aquaproj/aqua-registry/issues/14278) [domoritz/arrow-tools/{csv2arrow,csv2parquet,json2arrow,json2parquet}](https://github.com/domoritz/arrow-tools): Follow up changes of asset names </details> <details> <summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary> ### [`v0.40.0`](https://github.com/jesseduffield/lazygit/releases/tag/v0.40.0) [Compare Source](https://github.com/jesseduffield/lazygit/compare/v0.39.4...v0.40.0) <!-- Release notes generated using configuration in .github/release.yml at v0.40.0 --> ### 🎉 LAZYGIT FIVE YEAR ANNIVERSARY EDITION 🎉 Holy moly, has it really been 5 years since Lazygit's birth? Time flies when you're having fun. I've written a post celebrating the anniversary [here](https://jesseduffield.com/Lazygit-5-Years-On). As for this release, we've got some great features here. ##### Worktrees We now have a worktrees view so you can easily create worktrees and switch to them and so on. I'm not a big worktrees user myself so please raise an issue if you can think of places to improve the UX. ![worktree_create_from_branches-compressed](https://github.com/jesseduffield/lazygit/assets/8456633/3ef0b085-e9d0-42de-af58-16cbae581d34) ##### Rebase --onto Rebasing onto a marked base commit is a very useful feature that we've been sorely lacking for a while (demo coming soon) ##### Auto-refresh on window focus Auto-refresh on window activation is a complete game-changer. No more having to manually press shift+R when you come back from your editor. ##### Nuking the worktree We also have a fun enhancement in this release: showing an explosion animation when you nuke the working tree. ![nuke-gif](https://github.com/jesseduffield/lazygit/assets/8456633/32b3f91c-fea3-474d-8997-1de2f5e4f5d4) You'll also notice in the readme we've got some updated demo gifs to showoff Lazygit's features. More of those to come. #### What's Changed ##### Features ✨ - Add worktrees view by [@​jesseduffield](https://github.com/jesseduffield) (with help from [@​kadaan](https://github.com/kadaan)) in [https://github.com/jesseduffield/lazygit/pull/2147](https://github.com/jesseduffield/lazygit/pull/2147) - Rebase onto branch from a marked base commit by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2835](https://github.com/jesseduffield/lazygit/pull/2835) - Auto-refresh on window activation by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2854](https://github.com/jesseduffield/lazygit/pull/2854) ##### Enhancements 🔥 - Faster refresh by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2841](https://github.com/jesseduffield/lazygit/pull/2841) - feat: add os.copyToClipboardCmd to allow for a custom command [#​1055](https://github.com/jesseduffield/lazygit/issues/1055) by [@​redstreet](https://github.com/redstreet) in [https://github.com/jesseduffield/lazygit/pull/2784](https://github.com/jesseduffield/lazygit/pull/2784) - Add bisect menu entry that lets you choose bisect terms by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2838](https://github.com/jesseduffield/lazygit/pull/2838) - When bisecting, always mark the current commit as good/bad, not the selected by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2837](https://github.com/jesseduffield/lazygit/pull/2837) - Visualize local branch heads in commits panel, 2nd approach by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2775](https://github.com/jesseduffield/lazygit/pull/2775) - Allow force-tagging if tag exists by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2827](https://github.com/jesseduffield/lazygit/pull/2827) - Save IgnoreWhitespaceInDiffView in state.yml by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2830](https://github.com/jesseduffield/lazygit/pull/2830) - Show loader when rebasing by [@​KarlHeitmann](https://github.com/KarlHeitmann) in [https://github.com/jesseduffield/lazygit/pull/2851](https://github.com/jesseduffield/lazygit/pull/2851) - Internationalise logging of commands by [@​KarlHeitmann](https://github.com/KarlHeitmann) in [https://github.com/jesseduffield/lazygit/pull/2852](https://github.com/jesseduffield/lazygit/pull/2852) - Show visual explosion effect when nuking worktree by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2861](https://github.com/jesseduffield/lazygit/pull/2861) ##### Fixes 🔧 - Fix issue where using `null` to un-map a keybinding was ignored by [@​hatredholder](https://github.com/hatredholder) in [https://github.com/jesseduffield/lazygit/pull/2832](https://github.com/jesseduffield/lazygit/pull/2832) - Show error when trying to open patch menu with an empty patch by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2829](https://github.com/jesseduffield/lazygit/pull/2829) - Fix merge status for update-ref command by [@​stefanhaller](https://github.com/stefanhaller) in [https://github.com/jesseduffield/lazygit/pull/2845](https://github.com/jesseduffield/lazygit/pull/2845) - Stop worktrees view from stealing the window by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2863](https://github.com/jesseduffield/lazygit/pull/2863) - Fix confirmation view sizing by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2879](https://github.com/jesseduffield/lazygit/pull/2879) ##### Maintenance ⚙️ - Standardise on using lo for slice functions by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2846](https://github.com/jesseduffield/lazygit/pull/2846) - Remove redundant secureexec package by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2847](https://github.com/jesseduffield/lazygit/pull/2847) - Add automated demo recordings by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2853](https://github.com/jesseduffield/lazygit/pull/2853) - Remove file watcher code by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2865](https://github.com/jesseduffield/lazygit/pull/2865) - Add more demos to the README by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2866](https://github.com/jesseduffield/lazygit/pull/2866) - Move features to top of readme by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2867](https://github.com/jesseduffield/lazygit/pull/2867) - Add more demos by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2874](https://github.com/jesseduffield/lazygit/pull/2874) ##### Other Changes - Create demo output dir if it doesn't already exist by [@​jesseduffield](https://github.com/jesseduffield) in [https://github.com/jesseduffield/lazygit/pull/2857](https://github.com/jesseduffield/lazygit/pull/2857) #### New Contributors - [@​hatredholder](https://github.com/hatredholder) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2832](https://github.com/jesseduffield/lazygit/pull/2832) - [@​redstreet](https://github.com/redstreet) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2784](https://github.com/jesseduffield/lazygit/pull/2784) - [@​kadaan](https://github.com/kadaan) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2147](https://github.com/jesseduffield/lazygit/pull/2147) - [@​KarlHeitmann](https://github.com/KarlHeitmann) made their first contribution in [https://github.com/jesseduffield/lazygit/pull/2851](https://github.com/jesseduffield/lazygit/pull/2851) **Full Changelog**: jesseduffield/lazygit@v0.39.4...v0.40.0 </details> <details> <summary>weaveworks/eksctl (weaveworks/eksctl)</summary> ### [`v0.151.0`](https://github.com/eksctl-io/eksctl/releases/tag/v0.151.0): eksctl 0.151.0 (permalink) [Compare Source](https://github.com/weaveworks/eksctl/compare/0.150.0...0.151.0) ### Release v0.151.0 #### 🚀 Features - Support custom AMIs for self-managed Windows nodegroups ([#​6804](https://github.com/weaveworks/eksctl/issues/6804)) - Support custom Ubuntu AMIs for EKS-managed nodegroups ([#​6850](https://github.com/weaveworks/eksctl/issues/6850)) #### 🎯 Improvements - Remove support for EKS 1.22 ([#​6704](https://github.com/weaveworks/eksctl/issues/6704)) #### 🐛 Bug Fixes - Fix error with tar in `Post Cache go-build and mod` step ([#​6840](https://github.com/weaveworks/eksctl/issues/6840)) - Fix setting link-time variables for release version ([#​6841](https://github.com/weaveworks/eksctl/issues/6841)) - Select one subnet for AZs where multiple are present and no VPC config provided ([#​6814](https://github.com/weaveworks/eksctl/issues/6814)) - Paginate instance type offerings response ([#​6832](https://github.com/weaveworks/eksctl/issues/6832)) #### 🧰 Maintenance - Bump dependencies ([#​6852](https://github.com/weaveworks/eksctl/issues/6852), [#​6859](https://github.com/weaveworks/eksctl/issues/6859)) - Cleanup Flux Integration ([#​6836](https://github.com/weaveworks/eksctl/issues/6836)) #### Acknowledgments Weaveworks would like to sincerely thank: [@​watany-dev](https://github.com/watany-dev) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 4pm on thursday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/scottames/dots). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4yNy4xIiwidXBkYXRlZEluVmVyIjoiMzYuMjcuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
When you are making changes in your text editor or IDE, and then switch to the terminal window where lazygit is running, it doesn't immediately show you the latest changes you just made. You have to either refresh lazygit manually by typing shift-R (remembering that this command is only available in some panels but not others), or wait up to 10 seconds until the next auto-refresh timer comes along.
This PR solves this problem by automatically refreshing the files panel whenever lazygit's terminal window is brought to the front.
I have been running with this change locally for months now, and it has become indispensable for me; I always realize this whenever I have to work on a master-based branch that doesn't contain it.
Marked as a draft because it needs a change to gocui.
Note that an alternative solution to this problem might have been to subscribe to filesystem notifications and refresh whenever we are notified that files have changed. It seems that lazygit has experimented with this in the past, there are some rudiments of it in the code, but it's disabled. However, I actually think that refreshing on window activation is superior: with filesystem notifications you have to be careful not to refresh too often. Many files can be changed at once, and this probably needs some timer-based heuristic to wait until activity has died down before you refresh. Doing it on window activation doesn't have this problem.
Of all the other git clients I know, there's only one that reacts to filesystem changes (Sublime Merge), all the others refresh on window activation.
go run scripts/cheatsheet/main.go generate
)docs/Config.md
) have been updated if necessary