Though it's bleeding edge, I haven't experienced any issues: everything just works.. faster!
It always amazes me that some people are willing to put in such hard work, alone, for open source. The fact that one guy managed to speed up all of Emacs 2x-20x in his spare time for no pay is frankly amazing. Certainly puts my side-projects to shame.
Here's the update log of the project.
For many people this is about scratching an itch, their own itch.
They improve upon it not for the sake of "open source", but for the sake of making the very same tools they rely on to be better tools.
This is how open-source used to work, and this is how it grew.
Apart of a few well known projects, the open source world is not so rosy.
I'm building an app that exports GPX files (XML file where you can store GPS positions, POIs, routes etc).
All the examples files on the official website ( https://www.topografix.com/gpx.asp ) are broken (they return a blank page) and to validate that your file is compliant you have to compile a 15 years old C++ library first (for some reason they refuse to release a binary).
Solved a lot of weird open formats issue we had
https://gist.github.com/AllenDang/f019593e65572a8e0aefc96058...
edit: formatting
There was some minor brokenness native comp caused to my setup so still not using this branch. But most stuff did surprisingly work perfectly well.
If so, you might want to get in contact with the author. I imagine that OSX isn't as well tested as Linux.
an OSS project will do so much and may die, the next one will try a new branch (from scratch, influenced a bit by the other or fully reusing the old ones)
to save energy it's good to think and plan for continuations.. your project will be much more useful if kept clear so other can jump in and extend or rewrite it without struggle
Agreed with the first. Disagreed with the second.
LSP only ensures that the interests of independent Editors and bigger IDEs to a bigger degree aligns than they used to be before.
It's not a war. This should represent a win-win for everyone.
So here's my two cents:
Even though Emacs is not mainstream, I somewhat agree that the ecosystem is much better now and I can get to configure it as IDE. Sometimes things break, sometimes it takes frustrating amount of time to configure/fix things -- which is probably 1 click away in VSCode. And regardless anything, despite LSP, nothing just works out of box or is immediately obvious. And for these reason alone I think the mainstream IDEs are here to stay.
That said, I don't care (or think doesn't matter) if Emacs remains mainstream or not, as long as the ecosystem remains healthy and strong, and it gets the work done. It will keep it afloat like past whatever 30-40 years. However, that doesn't mean it can survive without being competitive. For me, the single BIGGEST ISSUE that made me consider trying VSCode is performance. On two companies I've worked with, the C++ parser performance with LSP running is just purely BAD (more so on MacOS I think). And quite honestly I can see myself getting frustrated enough someday and move.
How? if you turn your text editor into an IDE with plugins then you make Emacs an IDE. In my mind an IDE "understands" the entire project not just the opened file.
A high quality language server can provide 99% of what a high quality IDE can (like Intellij). IDEs still have an edge, like with debugging, profiling, or SQL db integration. I've mostly ditched Intellij in favor of Emacs for a large Scala project, something I wouldn't have ever dreamed of doing 5 years ago.
I still use Intellij for debugging, but hopefully debugging servers and some Elisp will solve that problem soon.
Not for me. I've tried to use LSP for Chromium's code base(~40k files) and it was miserable. It took 8-10 hours to index it and each time the LSP server started it used 10GB of RAM to work.
Comparing it QtCreator's Code Model (the old one which everyone hates, not clang based) takes 2 Min to start from zero without blocking the GUI.
I only got intelligence on as much of the project as it had finished parsing at a given point in time, obviously, but I wasn't stuck waiting for it to finish before I could work. This was using php-language-server and lsp-mode for Emacs.
> The days of IDEs are numbered.
Nope, IDEs will never die, they just change again. Editors are becoming IDEs now, merging both to become more than before.
https://akrl.sdf.org/gccemacs.html as posted already in this thread, compiling more of emacs with gcc, very interesting change to the core architecture.
> the old problems remain the same.
from the linked article - Lexical-binding is used by default - Portable dumping used instead of unexec
What exactly are you talking about?
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/
- lsp-mode (IDE smartness) - company (completion pop up) - selectrum/ivy/helm (command awesomeness) - projectile (project management) - magit (greatest Git interface you will ever use)
- 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!
Drop emacs and look elsewhere.
Is there any work towards making Emacs be usable immediately, while config being loaded asynchronously in background, adding features like syntax highlighting without blocking the main editing experience?
There are voices who demand to lean more toward VS Code in that aspect, so maybe in another 10+ years emacs will finally innovate itself there.
TRAMP also feels faster to me; I presume it's due to background jobs adjusting their casual I/O usage when TRAMP is detected, like writing backup/lock files, scanning directories for VCS info, etc. which has high latency on SSHFS.
I also like using `/sudo:root@localhost:/foo` for editing local files with different user permissions (plus the same command and terminal behaviour as with SSH)
Tramp is agnostic in most things (well, you need an ssh client at least).
Now... Now that I am on 4g internet... I admit things can feel slow wicket than I'd care for. :(
Within a few days I migrated all my note-taking and task-managfement-systems to Emacs. Previously I was using Evernote, Bear app, Ulysses app for note taking and TaskPaper + OmniFocus for project management.
Emacs + Org-Mode replaced all those apps and many more. And it makes me `dance' with my data by using Elisp to transform all my data into ways I need and want.
I realized that I didn't use Emacs to its full potential in 2013 because I was reluctant to dive into (E)Lisp. This time I made a full dive into it. And I am absolutely loving it. I had some contanct with Scheme some twenty years ago, and that influenced me very much. But CL and Elisp offer much more.
Emacs does not need to be an IDE, but it can be a decent one. (Yes, I know and use intelliJ: PyCharm and PHPStorm). It can be used for everything text: Note taking, programming, transforming text. But via org-mode for much more than text: Project- and task-management, ascii-tables, note-management system. I even initiate my Google searches from within Emacs and keep a track of my searches via org-capture.
Thank you for all the maintainers!
--
Edit:
- I am a user of a Mac with a US keyboard. Using an app named "Karabiner Elements" to remap my keys. I have my caps and enter key behave like a Control key whenever I hit them in combo with other keys. That way I have two control keys in reach of both my pinkies.
- r/emacs and r/orgmode are super helpful communities
- learn to program in Lisp and have a look at Lisp macros. That's a very useful concept to write DSLs to transform code very easily. - scratch buffer is your friend in learning elisp. Place the cursor after the last colon of your code and hit `C-x C-e`, that will evaluate that line.
- Learn about debugging your Elisp code. Edebug (`edebug-defun`) is your friend. See http://blog.binchen.org/posts/my-work-flow-to-debug-emacs-pl...
- Be patient. Once you have mastered the basics, you'll fly!
I'm starting a new project this week, and a fresh, empty org-roam database in my Spacemacs instance is really nice. I'm filing all these links and little org documents with references to each other and documenting my learning as I go. I'm also using Karabiner, Spacemacs, Org-Mode, etc etc. The Emacs subreddit is consistently one of the most helpful out there, it's fantastic.
(I used a new, clean org-roam database in an empty ~/Org folder because I wanted to leave behind all the cruft and stuff from the previous project, including potentially client-specific stuff.)
(ooh, ooh, I forgot: Emacs and org-mode are 2 things I donate to monthly. Emacs via $10 to the FSF, and org-mode via $5 via Github direct to the maintainer.)
Edit: Re "I used a new, clean org-roam database in an empty ~/Org folder because I wanted to leave behind all the cruft and stuff from the previous project, including potentially"
Exactly what I did and what gave me a boost in learning Emacs+Elisp and a fresh start. My old `.emacs' file was holding me back!
How do you recommend diving deeper? I feel like there is so much to Emacs that would make me much more productive, but I'm apprehensive to dive below the surface
Re diving in Lisp:
1. I deleted my previous `.emacs` file and started from scratch.
2. I learned all about the internal help system of Emacs. `C-h f' will let me look up help for a function (it's "docstring"), `C-h v' will let me look up a variable, etc. - Navigating help via `C-h i' and then 'm' (for menu) will let me search the TOC entries in the help page. `l' (lower L) will let me go back in help.
3. Read good old recommended Lisp books. Seibel and many more are the classics.
4. Write code! Practical code that you need. Solve problems. Think of use-cases. - For instance, I needed to parse my Kindle annotations, which are saved like a log file in a file on the Kindle itself (the file is named `My Clippings.txt'. I had written a parser in Python to get the entries out of the file, now I did it in Elisp. Or you need a convenience function that performs several steps you need daily in your text-editing or org-files (creating template files, navigating the headars, whatnot).
5. Read the source code of the packages. They have wonderful examples for how to write code in Elisp. For instance `org-table.el'. It gave me many ideas for how to write idiomatic Elisp. - You can go to the source code of a package by looking up a function you use (`C-h f org-table-create RET', then click the hyperlinked package name `org-table.el'; that'll bring you right to the function in the package).
6. Read good code. For instance: Magnar Sveen. He has written many excellent packages. `dash.el' and `s.el' and some more. Check his github, read the code, and check his http://emacsrocks.com/ videos.
---
[^1]: "The names of procedures and syntactic forms that cause side effects end with an exclamation point ( ! ).". Source: https://www.scheme.com/tspl2d/intro.html
I'm really missing graphql and styled components syntax highlighting and generally a bugless properly working webdev mode. Currently it keeps messing up indentation and losing syntax highlighting.
I tried moving to VS code, and I saw how amazing an editor designed for webdev can be. But despite all the issues, I'm still much more productive in emacs, so I went back.
I really wish it was possible to setup emacs for modern webdev, but I haven't found a way yet.
Any tips/advice?
""" Disclosure: I'm the author of rjsx-mode)
The best setup I've found is to use js2-mode for .js and rjsx-mode for .jsx, which parse the buffer for syntax highlighting, local refactoring (with js2r) and basic linting. For typescript, use typescript-mode. Flow support is quite bad ATM
nvm.el replaces the shell scripts from nvm.
Add a jsconfig.json to your project root and enable tide-mode for completion. This has worked far better than tern-mode, which some people recommend.
For fuller linting than what js2/rjsx offer, use flycheck. Eslint support is built-in, so it should just work, I think.
[2018 update: I prefer using tslint, which you can accomplish with:
(flycheck-add-mode 'typescript-tslint 'js2-mode)
(flycheck-add-mode 'typescript-tslint 'rjsx-mode)]
Finally, for build management, I use prodigy to run webpack, babel, ts, etc.
It's like 100x better than TAGS files (because I don't have to generate them) and has made my navigation of a new codebase much, much more smooth and effective.
After trying out both, I prefer Eglot, mainly because I find it faster and less intrusive than lsp-mode. It also composes better with built-in packages, such as flymake . I use gopls and pyls as language servers.
[1] OK, one brief mention
That way I can always get back to any previous state and I can use git bisect to find the culprit when a package update causes a regression of some kind.
https://emacs.stackexchange.com/questions/28731/easiest-way-...
Adding harfbuzz gives emacs much better text shaping and let’s emacs get rid of whatever ancient library they were using before. Similarly the old dependency (and security liability) on imagemagick can be dropped.
Other improvements should just allow certain elisp code to use C functions to run faster. I think it is a testament to the versatility of emacs lisp as a language that these things were good enough while implemented in pure elisp that they could still be productively used, so no one needed to first request new C functions before they could implement e.g. lsp clients or calculators.
FTI "If you give HarfBuzz a font and a string containing a sequence of Unicode codepoints, HarfBuzz selects and positions the corresponding glyphs from the font, applying all of the necessary layout rules and font features. HarfBuzz then returns the string to you in the form that is correctly arranged for the language and writing system."
https://harfbuzz.github.io/what-is-harfbuzz.html#what-is-tex...
[1] https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=41182...
The best thing with this release (as far as I am aware) is the JSON parser implemented in C. This should make lsp-more a lot snappier.
Often, there'll be big changes on the master branch after a release, so it tends to be a little less stable (and I normally just need Emacs to work, so not interested).
Finally, about time!