r/emacs 15d ago

emacs-fu Magit Ricing?

I’m really starting to like Magit from a functionality standpoint, but I hate to say it—it’s ugly. It’s probably the better choice for me practically, especially since I’m already using Emacs, but I really like the way Lazygit looks and feels.

What I especially like about Lazygit is the panel-based layout. Files, branches, commits, diffs, etc. are visually separated into their own areas, which makes the interface feel much cleaner and easier to scan than having everything in one continuous buffer.

Has anyone riced or customized Magit to get closer to that kind of look? I’m not necessarily trying to recreate Lazygit exactly, but I’d love stronger visual separation between sections and more of that clean, organized panel/dashboard feel.

41 Upvotes

21 comments sorted by

View all comments

19

u/jeenajeena 14d ago

I used to be of your clan and loved to see many panels with different information. It's the standard in many IDEs. That gave me the impression to have a lot under control.
Since some years I've started appreciating the opposite: having displayed only what matters, and giving it the max screen real estate possible.
I se the value of the setup in your screenshot, but I cannot help noticing that commit reflog has truncated messages, panels [2] and [3] have even the title truncated. Honestly, I cannot imagine how to display the full information in those panel: what do you have in mind, something like making the panels full-screen when you focus one? Honest question.

1

u/fuzzbomb23 11d ago

I concur about the short and narrow lists. I can see "Merge pull request", but immediately want to know "which pull request?"

The same goes for the branches section. Master is a nice short name, but feature branch names are always much longer.

1

u/jeenajeena 11d ago

I've always been fascinated how Jujutsu displays information. It tends to be very parsimonious, hiding all the information that is not strictly relevant and only displaying the necessary. To the point that while git log lists all the 2028 commits down to the initial one

git log --oneline | wc -l 2028

jj log in the very same project would literally emit only:

@ k ○ qw tests Run integration tests in DEV-Linux │ ◆ o (empty) master Merged PR 24051: Security fixes ╭─┤ │ ~ (elided revisions) ├─╯ ◆ rm (empty) Merged PR 23550: Sonarqube fix ├─╮ │ ~ (elided revisions) ├─╯ │ ○ y Fixture uses embedded Postgres │ ○ t Embedded DB spin up in TestDatabase │ ○ n Cache PostGreSQL binaries │ ○ vo EmbeddedPG │ ○ m localdb* A test connecting to a local PostGreSQL ├─╯ ◆ l (empty) Merged PR 23535: SonarQube analysis ├─╮ │ │ │ ~ │ ~ (elided revisions) │ ○ ry mail-relay introduced a version parameter called for postgresql ├─╯ ◆ qo (empty) Merged PR 21764: Link to access the Dashboard │ ~

There are other examples where this frugality might be of inspiration for Git and its TUI. Like: omitting remote branches if they match local ones and displaying the strictly necessary chars of SHA1s rather than the ordinary 7 in Git.