Add support for clicking on arrows in the file list to expand/collapse directories#5365
Conversation
|
@blakemckeany Why did you close this? I'm in the middle of reviewing it right now. |
Apologies!! Have reopened it now |
stefanhaller
left a comment
There was a problem hiding this comment.
This is quite nice, and a welcome improvement.
Out of curiosity: how much AI was involved in coding this? My guess would be a lot, judging by some of the style, but I'm really just curious.
A few things below.
4bf8de3 to
883e1a2
Compare
@stefanhaller Thank you for your thorough feedback on this! Your time is much appreciated. For the initial pull request changes I did use AI tools (Claude Code) to help out with understanding the codebase quicker and getting a feel for where this change should sit, as well as a once over for any suggestions and changes before submitting the PR. I recently saw your update to CONTRIBUTING.md around your stance on using agentic coding tools and throwing whatever it spits out into a PR with zero understanding of the changes being made, and I agree that it is a waste of your time to be reviewing AI contributions all day long. I have made sure that all of my changes made based on your review with reworking the arrow click handling, rewriting some of the tests, etc have been written by me only and I'm fully aware of what I am contributing. |
When this was originally introduced, it handled single clicks on a list entry (treating them similar to a double-click by checking whether the click was on the selected entry). Arguably it should have been called OnDoubleClick back then already; but when we later changed it to do actual double-click detection (see 37197b8), we should have renamed the methods.
We have some documentation for the corresponding setters in IBaseContext, but that's part of the controller infrastructure and not client facing. For somebody implementing a new view, this is where they will probably look for what methods they can override.
Can be used for doing additional click handling in list views. Like the GetOnDoubleClick hook we should try to find a better design for this than putting it in HasKeybindings and BaseContext, since it is only used by list contexts. Co-authored-by: Stefan Haller <stefan@haller-berlin.de>
…e directories Co-authored-by: Stefan Haller <stefan@haller-berlin.de>
a0f96ef to
ee3bb06
Compare
|
Thanks. For your next contribution, please also pay attention to the "Commit history" section of CONTRIBUTING.md. 😄 Your latest state of the branch still required significant changes to get it into shape, and I decided it's faster for me to make these changes myself rather than explaining them to you. Hope you don't mind. I force-pushed the branch, please review the new state. One subtle change is that double-clicks now take precedence over arrow clicks, so double-clicking an arrow will collapse/expand on the first click, but stage/unstage on the second. I'm not sure this matters too much; it's a consequence of treating the onClick hook as completely optional, meaning it should return nil when it didn't do anything. |
Thank you for tidying that up it looks much cleaner! I'll make sure to triple check in future to avoid you having to clean things up for me. I'm happy with the changes now if you are 🙌 |
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) | minor | `v0.60.0` → `v0.61.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>jesseduffield/lazygit (jesseduffield/lazygit)</summary> ### [`v0.61.0`](https://github.com/jesseduffield/lazygit/releases/tag/v0.61.0) [Compare Source](jesseduffield/lazygit@v0.60.0...v0.61.0) <!-- Release notes generated using configuration in .github/release.yml at v0.61.0 --> The big one in this release is support for GitHub pull requests. They are shown as little GitHub icons next to each branch that has one, and you can open a MR in the browser by pressing shift-G. To enable this, all you need to do is install the [`gh`](https://cli.github.com/) tool if you haven't already, and log in using `gh auth login`. #### What's Changed ##### Features ✨ - Show pull requests against branches by [@​jesseduffield](https://github.com/jesseduffield) in [#​2781](jesseduffield/lazygit#2781) ##### Enhancements 🔥 - Add support for clicking on arrows in the file list to expand/collapse directories by [@​blakemckeany](https://github.com/blakemckeany) in [#​5365](jesseduffield/lazygit#5365) - Remove empty directories after discarding untracked files by [@​stefanhaller](https://github.com/stefanhaller) in [#​5408](jesseduffield/lazygit#5408) - Make file sort order and case sensitivity configurable, and default to mix files and folders by [@​stefanhaller](https://github.com/stefanhaller) in [#​5427](jesseduffield/lazygit#5427) - Allow customizing the window width/height thresholds for when to use portrait mode by [@​stefanhaller](https://github.com/stefanhaller) in [#​5452](jesseduffield/lazygit#5452) - Log hashes of local branches when deleting them by [@​stefanhaller](https://github.com/stefanhaller) in [#​5441](jesseduffield/lazygit#5441) - Add condition field to custom command prompts by [@​mrt181](https://github.com/mrt181) in [#​5364](jesseduffield/lazygit#5364) ##### Fixes 🔧 - Fix staging only some lines of a block of consecutive changes by [@​stefanhaller](https://github.com/stefanhaller) in [#​5396](jesseduffield/lazygit#5396) - Fix the expanded layout of the branches panel (half and full screen modes) by [@​stefanhaller](https://github.com/stefanhaller) in [#​5413](jesseduffield/lazygit#5413) - Fix searching commits or main view after switching repos by [@​stefanhaller](https://github.com/stefanhaller) in [#​5424](jesseduffield/lazygit#5424) - Scroll to top when showing subcommits by [@​stefanhaller](https://github.com/stefanhaller) in [#​5425](jesseduffield/lazygit#5425) - Fix patch commands when git config has color=always by [@​matthijskooijman](https://github.com/matthijskooijman) in [#​5405](jesseduffield/lazygit#5405) - Don't stage out-of-date submodules when asking user to auto-stage after resolving conflicts by [@​stefanhaller](https://github.com/stefanhaller) in [#​5440](jesseduffield/lazygit#5440) ##### Maintenance ⚙️ - Remove go-git dependency by [@​stefanhaller](https://github.com/stefanhaller) in [#​5420](jesseduffield/lazygit#5420) - Make Debian/Ubuntu install command architecture-independent by [@​discapes](https://github.com/discapes) in [#​5386](jesseduffield/lazygit#5386) - Bump github.com/buger/jsonparser from 1.1.1 to 1.1.2 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5423](jesseduffield/lazygit#5423) - fix: pin 7 unpinned action(s), extract 1 inline secret to env var by [@​dagecko](https://github.com/dagecko) in [#​5439](jesseduffield/lazygit#5439) - Fix dependabot config file by [@​stefanhaller](https://github.com/stefanhaller) in [#​5443](jesseduffield/lazygit#5443) - Bump actions/cache from 4 to 5 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5444](jesseduffield/lazygit#5444) - Bump actions/download-artifact from 7 to 8 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5445](jesseduffield/lazygit#5445) - Bump actions/upload-artifact from 6 to 7 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5446](jesseduffield/lazygit#5446) - Bump github.com/lucasb-eyer/go-colorful from 1.3.0 to 1.4.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5447](jesseduffield/lazygit#5447) - Bump github.com/spf13/afero from 1.9.5 to 1.15.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5448](jesseduffield/lazygit#5448) - Bump github.com/creack/pty from 1.1.11 to 1.1.24 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5449](jesseduffield/lazygit#5449) - Bump github.com/stretchr/testify from 1.10.0 to 1.11.1 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5450](jesseduffield/lazygit#5450) - Bump github.com/sanity-io/litter from 1.5.2 to 1.5.8 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5451](jesseduffield/lazygit#5451) - Bump github.com/adrg/xdg from 0.4.0 to 0.5.3 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5456](jesseduffield/lazygit#5456) - Bump github.com/spkg/bom from 0.0.0-20160624110644-59b7046e48ad to 1.0.1 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5457](jesseduffield/lazygit#5457) - Bump github.com/integrii/flaggy from 1.4.0 to 1.8.0 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5458](jesseduffield/lazygit#5458) - Bump github.com/sahilm/fuzzy from 0.1.0 to 0.1.1 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5459](jesseduffield/lazygit#5459) - Bump github.com/sasha-s/go-deadlock from 0.3.6 to 0.3.9 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​5460](jesseduffield/lazygit#5460) ##### Docs 📖 - Add a note about AI to CONTRIBUTING.md by [@​stefanhaller](https://github.com/stefanhaller) in [#​5404](jesseduffield/lazygit#5404) - Update redo keybinding in README.md by [@​unikitty37](https://github.com/unikitty37) in [#​5387](jesseduffield/lazygit#5387) - Fix grammar in the contributor guide by [@​Rohan5commit](https://github.com/Rohan5commit) in [#​5392](jesseduffield/lazygit#5392) ##### I18n 🌎 - Update translations from Crowdin by [@​stefanhaller](https://github.com/stefanhaller) in [#​5476](jesseduffield/lazygit#5476) ##### Performance Improvements 📊 - Improve performance of discarding many files by [@​stefanhaller](https://github.com/stefanhaller) in [#​5407](jesseduffield/lazygit#5407) #### New Contributors - [@​blakemckeany](https://github.com/blakemckeany) made their first contribution in [#​5365](jesseduffield/lazygit#5365) - [@​discapes](https://github.com/discapes) made their first contribution in [#​5386](jesseduffield/lazygit#5386) - [@​unikitty37](https://github.com/unikitty37) made their first contribution in [#​5387](jesseduffield/lazygit#5387) - [@​Rohan5commit](https://github.com/Rohan5commit) made their first contribution in [#​5392](jesseduffield/lazygit#5392) - [@​matthijskooijman](https://github.com/matthijskooijman) made their first contribution in [#​5405](jesseduffield/lazygit#5405) - [@​dagecko](https://github.com/dagecko) made their first contribution in [#​5439](jesseduffield/lazygit#5439) - [@​mrt181](https://github.com/mrt181) made their first contribution in [#​5364](jesseduffield/lazygit#5364) **Full Changelog**: <jesseduffield/lazygit@v0.60.0...v0.61.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDQuOCIsInVwZGF0ZWRJblZlciI6IjQzLjEwNC44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
PR Description
This PR adds support for clicking on arrows in the file changes list view, so that a mouse can be used to expand/collapse directories. This enhancement was raised here as issue #5088.
This is my first pull request into lazygit so any feedback would be much appreciated! That being said I have tried my best to follow CONTRIBUTING.md and read the relevant docs to ensure all steps are followed.
Please check if the PR fulfills these requirements
go generate ./...)Result
files-mouse-use.mp4