I always told people that #texlatex is best written/edited in #emacs but didn't have a better argument for it than how well everything integrates. #AUCTeX, pdf-tools, #magit, etc. make it a seamless experience. I had a little bit of YASnippets going as well which made life wonderful.
That already brought things to the state of Gilles Castel's 2019 latex lecture notes in #vim article (which I believe is famous, at least in these circles). But yesterday I found a blog post by @karthink about how to get that and more in Emacs.
The very first demo (40 seconds) shows how to get an equation in latex that I am sure would take me over a minute to write by hand (and it would look ugly in comparison). Then I looked at the second video (45 seconds) and realized that somehow org table style editing can be used for things like matrices and arrays and what not.
Just like that, less than 2 minutes has me committed to getting all that functionality in my Emacs config. Of course, this being emacs, I can tailor it all precisely to my comfort and I'm willing to spend however long is needed to get it to that stage.
I'm almost out of #emacs packages that are plug-and-play. So today I'm rehashing an old twitter thread about #Magit, THE porcelain for #git.
First, let me talk about my impression of git pre and post magit:
Pre-Magit, I wasn't happy/good at using git.
Post-Magit, I believe all git commands are clunky & unwieldy (especially in comparison to Magit).
The closest that my friends have come to making git better is with copious autocomplete setups (I think it was tmux, fzf, and a few other things). But I still say that magit is probably the lower bound on how nice it can be.
Eg: stage+commit in a wip branch, switch to main, pull from remote, merge wip to main, push to remote is:
S, c c, b b ⏎, F p, b b ⏎, m m ⏎, P p.
Done, in just 16 key strokes. At most there will be a couple of keystrokes extra before each enter if there are multiple branches to select from (but that would be true of any tool).
Not only do the keystrokes feel like the lower bound, the default choices are extremely sane.
Finally, it is not just the minimal keystrokes, it is also the extent of information that magit exposes and the amount of control it provides. Until I started using magit, I didn't know that beyond the usual amend to an earlier commit, you could also expand it (add changes, same msg) and reword it (change msg, no changes). Further, magit also exposes fixup and squash right in the commit submenu (see screenshot). In git, I would have no way of knowing what to do.
Magit is the git porcelain that makes using git feel like doing magic.
Hey everyone!!! I just released a really important usability update for #Gex, which is my #Rust#OSS project for #git interaction inspired by #Magit
Finally, we have scrolling! This is a feature that should've been added a long time ago, but here it is. Spent a long time tweaking it to try and get it to feel "right" so I'd love to know what you think!
Here's a function using #magit to show the diff of the current buffer since a certain date/time.
My use-case: I put my work notes in a single org file. When our daily standup starts I can quickly review what I worked on / wrote down in the last 24 hours.
I'm writing a large document in #latex in #emacs and I track my changes with #magit. Is there a way to view to view Levensthein edit distance or similar instead of line diffs? MS Visual Studio actually does this quiet wonderfully despite being otherwise less than wonderful.
does a really nice job of the •commit• workflow: showing the diff, selecting changes to commit, maybe selecting individual lines.
I don’t care about anything fancier that commits — not even branches! I have tools I like for all that stuff.
I’m just looking for a nice UI for viewing and selecting uncommitted changes, something better than the clunky “stage / unstage” buttons that are the norm.
#emacs is my org-mode editor, not my coding editor, but I've always liked the sound of #magit and have wanted to learn it for a long time. I came up with a silly hack this week to support that effort: a keybinding in VS Code that opens the current file in Emacs!
It appears to be an #emacs-ish program that uses #commonlisp for customization.
Apparently there have been other emacs clones based on #go and #rust and I guess those are called #emacsen ?
Without going too into my personal details, I’m not a professional programmer and most of my experience is with a modern programming language, #swift, and a high level programming language, #python.
I’ve tried learning #elisp several times by completing various programming exercises and I end up quitting because something obnoxious comes up that, from my minimal programming experience, appears to be due to elisp‘s age. Again, I’m not a pro, so this is just my amateur take.
I did a some programming challenges with #clojure which was hugely fun (mostly because of how fun it feels in emacs 😁) so I don’t think it’s the #lisp part of emacs I have a distaste for.
I’ll probably give it a serious go within the next week here and possibly report back, but I can’t imagine an emacs clone without #magit#orgroam and ChatGPT-shell will really ever become my daily driver 🙃
Found this #git tool today, and oh boy would I like to have what "virtual branches" sounds like:
Spotting a bug that has nothing to do with my current work?
Instead of checking out main again with a bugfix branch, do it directly without actually wrestling branch changes.
I really like that with #Magit I can "donate" and "harvest" commits, so I do that instead, but you can run into conflicts when rebasing after moving commits around
Magit is one of the "killer apps" of emacs, which one might miss when using a different editor. Helix editor in my case.
gitu is a Git porelain offered in the form of a TUI app with keybindings similar to magit. It's still in active development. I've installed it using cargo for now. https://github.com/altsem/gitu
For software development I use #linux.
For version control I use #git.
To control git I use #magit in #emacs.
To start magit out of a #bash for the current project I use:
% type magit
magit is a function
magit ()
{
emacsclient -e "(kill-all-magit-buffers)" -e "(magit-status "$PWD")"
}
where kill-all-magit-buffers is based on this: https://stackoverflow.com/a/44119606/2954288