1. Languages where people put a lot of effort into implementing bespoke support inside Emacs itself (as Elisp packages)
2. Languages where no one bothered to make Emacs-specific features, but are now supported quite well via LSP
Python seems to be in the #1 camp, and that seems to be what you describe.
The #2 camp, however, is superior in my experience, so I would suggest trying that instead.
I haven't worked that much with Python for a while, but at one point I used lsp-mode and pyls and it seemed pretty good: https://emacs-lsp.github.io/lsp-mode/page/lsp-pyls/
You can also choose Microsoft's Python LSP server instead: https://emacs-lsp.github.io/lsp-python-ms/
1.1. Languages where people have written full parsers and analysers in Emacs Lisp.
1.2. Languages where the Emacs support relies on external programs to provide intelligence.
Only very few languages (e.g. JavaScript) fall in subcategory 1.1.
Similarly, while js2-mode's built-in formatter is quite good, Prettier is both more (and more easily) configurable and more shareable - it can enforce an agreed-upon style at the codebase level without any editor-specific tooling or configuration, and the consequent absence of bikeshedding is welcome.
Something about how we used CMakeLists and had our project set out made it difficult to get autocomplete/gtags and everything to work the way I wanted.
I know it's possible, but could never get everything to play nicely together.
On the other hand, every other language I've had a brilliant experience with in emacs (using spacemacs).
- lsp-mode (IDE smartness) - company (completion pop up) - selectrum/ivy/helm (command awesomeness) - projectile (project management) - magit (greatest Git interface you will ever use)
That's one of the hardest parts of trying to config Emacs in general -- so many packages and they all seem to do the same thing and I think I need just one but sometimes people have like, all of them installed. It's confusing!
https://github.com/ashton314/.dotfiles
I use selectrum for just about everything. The only reason I keep ivy and counsel around as for the packages counsel-rg (ripgrip with real time results) and swiper.
It is a very good question you ask. I have spent many months experimenting with these various packages. I actually wrote a blog post about switching from Helm to Ivy. I suppose I should write a follow up on about switching to Selrctrum.
If you would like to talk more one on one, please DM me via one of the channels listed on my blog:
I believe the amount of people disliking magit fits on one digit
- Spacebar “leader” key. If you’re familiar with Vim, space is your leader key, and many functions lie behind it.
- Layers. Spacemacs has a packaging system called “layers” that are a collection of curated Emacs packages. The great thing about layers is all the wiring the layer author has done. Many packages are condensed down to a one-line config. Just add “python” to the array of installed layers in your config file and it will install a lot of what you have above. There are a few config toggles (e.g., override the language server that is used by default), but they are pretty well documented in the Spacemacs docs.
Also, use the Spacemacs develop branch! I’ve been on it for years. Master has not had many (any?) updates in a long time. If you do this make sure you are reading the docs for the develop branch when perusing layers online!
Doom Emacs is a way better choice now IMO.
I might go back and see if I can get the native-code version of Emacs running with Spacemacs, it might speed it up.
Like, I'm jumping ship as I write this. My job for the next few days is converting my config to Doom.
Oh and if you are a security conscious user, you might not like the fact that Spacemacs downloads tons of code which might or might not have been reviewed by someone you can trust and might or might not have been signed...
I've been on develop for ages, and don't really remember many breakages, I do however only pull sporadically.
If anything I found doom to make it easier to stay close to the 'intended' way to customize emacs, since it heavily encourages you to use 'use-package' and 'general.el' to manage your extensions, and gives you good startup performance if you use them as intended (allowing the lazy-loading to do its work).
Although it's possible I was simply more familiar with the 'right' way to do it when I moved to Doom from Spacemacs. Either way I got the impression it felt quite close to the way to manipulate 'native' emacs (but with a lot of sensible defaults that I couldn't be bothered to figure out myself).
I use Spacemacs which is also a community made emacs configuration and it's great. The fact that I could have made the customization myself does not make this configuration any worse.
Drop emacs and look elsewhere.