1. 24
  1. 6

    My five favorite packages:

    1. Ivy. The list-and-narrow model has radically changed how I use Emacs and I think this model should be emulated more widely. It’s a great way to deal with hundreds even thousands of options in an easy manner.

    (I tried selectrum and I like it and am philosophically more aligned with it, but Ivy is what I know and it requires fewer configs to get it to work the way I want it. Ivy also allows matching from external programs, for example ripgrep, which I use constantly.)

    1. Magit. No suprise there, everyone who uses Emacs pretty much loves Magit, it’s just an awesome git porcelain.

    2. dumb-jump. For programming modes where I don’t want to bother with configuring LSP, dumb-jump offers a very workable jump-to-def approach. It uses regular expressions to find lines that look like they may define the word under the cursor. Not always completely accurate, but it requires 0 configuration and works well enough for most cases.

    3. move-dup and shift-text. I’m cheating here by including both, but they do similar jobs and allow me to manipulate lines of text similarly to how I got used to in Eclipse (Ctrl+Alt+Down/Up to copy the current line down/up, Alt+Down/Up to move a line down/up, etc.)

    4. deadgrep. When using counsel-rg gives to many results, deadgrep offers a very clean interface to view and navigate the results of a search. I especially love that by default it finds the root of the project (a Git project for example) so it DWIMs pretty well.

    1. 2

      Great choices!

      I’ve been using ag for ages, but I should try rg one of those days. I’m always using such search packages via Projectile, though, as they seem to be most useful within a project context.

      Btw, how fast is the dumb-jump for you on bigger projects?

      1. 2

        I tried dumb-jump on GCC with ripgrep and it was unbearably slow. I reverted to ggtags as it is considerably faster.

      2. 2

        I keep trying magit but I can never get good enough at it to the point where it makes sense to actually use it. The documentation is sort of laughably impenetrable too (I say this as a long time emacs user, but not a power user). The git blame docs for instance are just hilariously unhelpful.

        Anywhoo, would be interested in giving it yet another go and would appreciate any resources you’re aware of that might be helpful.

        1. 1

          Anywhoo, would be interested in giving it yet another go and would appreciate any resources you’re aware of that might be helpful.

          I found this introductory presentation from Howard Abrams helpful. Mostly though, once I bound C-x g to magit-status and got into the habit of using it, the combination of my existing (basic) git knowledge and the ? key-bind allowed me to learn by doing. Hope that helps :-)

          1. 1

            Thanks, I’ll give it a watch! I pretty much do the same thing but it never seems to work out (for example, I still can’t find blame anywhere).

            1. 1

              I’ve used magit for many years yet I rely on the ? shortcut for using it.

        2. 1

          I tried selectrum and I like it and am philosophically more aligned with it, but Ivy is what I know and it requires fewer configs to get it to work the way I want it.

          Selectrum is new to me! I’ve been using Helm, but am considering switching, as Helm’s display doesn’t quite seem to be configurable enough – sometimes when switching buffers, it truncates the buffer name! Ridiculous!

          Is this the philosophy you’re talking about?

          The design philosophy of Selectrum is to be as simple as possible, because selecting an item from a list really doesn’t have to be that complicated, and you don’t have time to learn all the hottest tricks and keybindings for this. What this means is that Selectrum always prioritizes consistency, simplicity, and understandability over making optimal choices for workflow streamlining. The idea is that when things go wrong, you’ll find it easy to understand what happened and how to fix it.

          How does that differ from Ivy, which says it “aims to be more efficient, smaller, simpler, and smoother to use yet highly customizable”? I haven’t tried Ivy either, so high-level info is great.

          1. 2

            The section on Ivy in the Selectrum README is where they go into most of the detail. Essentially, Ivy was originally designed for Swiper, and got abstracted out of that some point along the way, but not very cleanly, resulting in a lot of hardcoded special cases in the code for different functions. Selectrum on the other hand only wants to plug in to completing-read and let a user choose from that list in a more convenient way, which allows the codebase to be something like ten times smaller.

          2. 1

            deadgrep was really nice, thanks for sharing!

          3. 3

            Going by external packages, my list would be very short, as I only have elpher and smart-scan that don’t come with Emacs. If I were to include some internal packages:

            1. elpher. My favourite gopher and gemini client, even outside of Emacs. It’s pretty intuitive.
            2. smart-scan is just incredibly convenient.
            3. rmail does what i need and does it well. I use it with mpop and msmtp doing the actual mailing work.
            4. shell mode gets a lot of use from me. Also comint, which I guess is my cheat two-in-one, but it’s great to be able to set up a REPL so easily.
            5. I don’t even know if occur should count as a package on its own, but I use it all the time.

            I’ve tried both Magit and Org in the past, but neither really convinced me. I get by fine with the standard version control packages in Emacs.

            Thanks for the article, I enjoyed it :)

            1. 3

              You might also want to try vterm if you haven’t so far - it’s super useful if you don’t want an external terminal emulator. Allows you to do meta things like run Emacs within Emacs and so on. :-)

              1. 2

                I did play with vterm a bit, but as I don’t use any TUI-type applications, I didn’t find it an improvement over shell-mode. My current Emacs setup is moving towards a sort of keyboard oriented Acme environment, and for that a standard shell buffer works fine :)

                That said, I have of course taken the time to get some Inception going - I think last time I did that was with ansi-term!

            2. 2

              Do you have to edit large arrays of values in a 2D grid? Try M-x array-mode.

              1. 1


                I’m looking to revamp and polish my emacs system - it’s been a long time since I really attended to it, and I want to improve it.

                Very curious about some of those crux functions, I think integrating them could work well.

                avy looks worthwhile to explore.


                bm - visible bookmarks in buffer and jump-to.

                buffer-move.el is invaluable with a large enough monitor. I’m an inverterate splitter, and slewing panes of text hither and yon to organize my thoughts is awesome.

                nyan-mode is super useful for gaining an intuitive sense of where you are in a file.

                rainbow-delimiters when there’s any Lispiness involved.

                I recently discovered org-roam and it is super useful. I anticipate I’ll be working through some improvements over time to that with my workflow.

                I do not like most autocomplete etc systems in emacs: I think only SLY/SLIME are adequate in my experience. I use dabbrev-expand, which is hacky enough, but works sufficiently. There’s a UI jump that needs to occur beyond the mini buffer or the “spawn a screen split”(remember I’ve already set up my screen splits as part of my work) for them to work well…. IMO.

                I also have tried and fled pretty much every minibuffer system outside of iswitchb, which does precisely what I want, with a minimum of fuss.

                (I also use language specific modes, but those are not as interesting)

                1. 1

                  I mostly just use the default packages in spacemacs. I did switch from helm to ivy, though.