The best thing (IMO) about this guide is that it does not start with a gazillion lines of Elisp code to add to .emacs.d/init.el. I think people should be allowed to experience plain vanilla Emacs and decide for themselves what they want to change. If we just tell them "oh, you definitely want these modes enabled and these settings to these values", I feel they are somehow robbed of the best part of Emacs, namely figuring out what you want your own personal editing experience to be.
I definitely see your point about most guides detailing how to make your init (I don't understand why so many people just tell you to disable tabs, as though it's understood that everyone prefers spaces), but there are certain things that everyone will want. For instance, when given the choice between an older bytecode file and a newer source file, Emacs loads the older one by default. That sort of thing doesn't really seem like the sort of thing you want people to have to experience for themselves.
(The setting in question I am referring to is load-prefer-newer)
This might gets downvoted into oblivion, but my thinking on editor choice is that I either use the lower level pure text editor such as Vim, Sublime Text, Nodepad++ for their speed, or if needed I go all the way with the big ones, like Eclipse/IntelliJ IDEA/Netbeans, for all their bells and whistles.
Should I spend time and effort on the middle ones? I admit my feeling comes from standing on the outside lurking. Emacs masters of course know that this 'middle one' feeling is non-sense.
But from the perspective of a newbie who sets out to master an editor/IDE, considering the ratio of effort spent on learning/customization/configuration vs. productivity gain (in a certain time span, let's say 20 years), I am trying to decide to take the plunge and learn emacs seriously, in the midst of big IDEs, Atom/Bracket, Neovim (let's hope it delivers).
I'd argue that your "spectrum" misses where emacs really shines: nobody really bothers to reconfigure Eclipse or Netbeans as their mail client or web browser, whereas this is not entirely unusual with emacs. This is because emacs has both a simpler set of underlying elements and a richer extension language when compared with something like Eclipse. This makes it IDE-like, but much more expressive and elaborate: there are things you can do with emacs that you could only dream of doing in things like Eclipse.
Furthermore, writing extensions for emacs is much more pleasant than writing extensions for Eclipse, and is done much more widely. And, emacs has been around long enough that you have literally decades worth of extensions already available to you. Additionally, emacs is used widely enough that people are quick to add emacs support for new things: if I pick up a new esoteric language tomorrow, I can be 99% sure that there's no Eclipse support for it, but I can be 100% sure that there's already an emacs mode for it and it's probably on the emacs package manager already, to boot.
All this is both a plus and a minus, in some ways: learning emacs is probably not worth it unless you're willing to put the time and effort into building up your emacs configuration into something IDE-like, but if that's what you want to do, then emacs can do truly amazing things. So yes, what you said rings more or less true for vanilla emacs, but you're radically underselling emacs as a platform for building better things.
I don't know if you're "so wrong", but if your concern is speed, then you should just learn about emacs-server and emacsclient.
Emacs covers the whole spectrum of "basic editing" to "wizardly stuff you couldn't have imagined" and you can transition between those at your own pace.
Also, I think that if you are putting Vim in the same bin as Sublime and Notepadd++, you're probably still missing a lot.
Emacs is an interactive programming environment for building your own text editor. It is what you make of it. Vanilla Emacs is very middle-ground, just like you say. My personal Emacs is an extension of myself, with lots of functionality only I use. Emacs lets me utilize my skills as a programmer to enhance my everyday interaction with text. This is the promise of Emacs. It is what you make of it.
Emacs is a repl for the programming language elisp.
It has a lot of elisp functions (1.6m lines iirc) that are very useful for shaping text including, but not limited to, almost everything that people think is so unique to IDE.
Elisp and the editor pieces within Emacs are focused on providing you the tools to manipulate text of all types and from many different sources and outputs, not just a few programming languages.
People write academic papers, books, organize their lives and yes program with emacs.
Yes it's much much more then an ide.
Whatever you do, master something and become truly fluent with it. It's worth your time and will pay you back many times over.
When I have used Unixy systems, I've always used the emacs-nox packages, which is pure command line. Vi/Vim breaks my brain worse than Emacs. So Emacs is really my low-level text editor; I usually use it for notepad++ type stuff.
It's not a terrible investment of effort to learn Emacs for these kinds of limited uses. I don't know anything about the more advanced modes, or the more non-standard/essential key combinations, but I get by for what I ask of it.
Nice guide. I'm trying to get my wife to use Emacs and she has been struggling to make sense of the built in tutorial (as a point of reference, she had practically never used any computing device other than a cell phone before a few years ago). I'll send it to her and see what she thinks.
You may ask, "Why the heck are you getting her to use emacs???". I started doing consulting this year and initially for tax reasons decided to have my wife run the company (while I did the programming). It has worked out spectacularly in that my wife loves the job and I can concentrate only on working with the clients. We have to do double entry accounting, though. We're using ledger-cli which has great Emacs org-mode support, so I'm hoping to get her going on that.
Wow, ledger is pretty hard-core. I haven't used ledger-cli though so I probably shouldn't comment on that. Out of curiosity, have you tried using GnuCash?
Yeah, I started with GnuCash. Unfortunately (or maybe fortunately as it turned out), I desperately needed good support for currency trading accounts: http://www.mathstat.dal.ca/~selinger/accounting/gnucash.html
(I am a Canadian, living in Japan, consulting for a UK company :-P My company has to calculate capital gains on transactions in 3 different currencies...). At the time I was using it, GnuCash had some annoying UI bugs with the optional currency trading accounts feature. A friend suggested that I try out ledger.
Now that I'm using ledger I would never, ever go back to GnuCash. It's not that GnuCash is bad -- it isn't. But when I started doing actual accounting (especially with foreign currencies), I could never get anything to balance in ledger. After working at it I finally understood why -- I was doing it all wrong! Being a complete neophyte I had no idea what the difference was between LIFO, FIFO and average cost or how I could represent it in my accounting. GnuCash would say "You made this much capital gains" and I just accepted it. With ledger I would look at the reports and go, "Hey... what the heck... why isn't that number zero???".
There are some other big, big wins with ledger. The first is that you are working with a text file. As a programmer, this is massive. Why do I need a stupid GUI? A nice descriptive DSL is waaaaay more convenient. Ledger itself is just a reporting tool that takes the data that you enter into the file and answers questions that you give it (which forces you to think of appropriate questions, which in turn showed me what I didn't understand...) I actually use vim (there is a vim mode as well), but emacs org mode is unbelievably fantastic (I'm a converted emacs user) and probably worth learning emacs for. The mixture of ledger and org mode is probably the best possible interface for an accounting program.
The other really big win is that you can put your accounting in source control. I can not express to you the amount of ass-saving this has brought me. Every time I make a change into the ledger I commit the change to git. Real accountants (which I hire to take my amateur stuff and do real accounting with) aren't supposed to change things in their ledger. It's kind of a law or something ;-) They can only add things (including notations). I do the same thing with ledger and git. I can find out what the ledger said at any given date. And I have incredibly readable diffs.
This last point is so incredibly important that I could not ever possibly think of using GnuCash again. This is not to say that ledger isn't without its faults. There are also some competing programs that were inspired by ledger which are worth checking out (bean-counter is one and there is a haskel implementation whose name I forget -- hledger???). There are also some things you can not do in ledger. There is no integrated payroll calculator, or invoice tracker, or anything like that. However, since the DSL is pretty easy to generate, it's quite easy to write scripts to do pretty much everything you might want to do. For my company (me and my wife), it is perfect. I don't think I would want to power a large corporation on it. I believe the Software Freedom Conservency still does their accounting on ledger, though.
I'm an on-again, off-again contributor to GnuCash but I really like ledger too, and especially hledger because just knowing it's Haskell puts my mind at ease about several things.
What you described about source control is really interesting because there are a lot of parallels between Git's commits and double-entry accounting's journal entries. There are some really close correspondences--like Git's revert and a reverting journal entry (i.e. the opposite movements of money to the transaction being reverted). Of course in accounting the master branch really is the one 'true' view of the world but it's interesting to think in terms of the Git analogy and imagine divergent branches which could be e.g. explorations of different scenarios for your business.
Afaik no one has ever implemented such a system....
Wow, hledger looks impressive. I think I'll use it as an example for when people ask for a "real world haskell program" as it has a web interface, gui (I think I saw one), is cross platform, and only requires downloading the executable.
Did I get everything correct? Do you think recommending hledger as a "real world Haskell program" is a good strategy?
Sure! Hledger is a great tool for people willing to invest a certain amount of time into learning some new tricks.
Another cool real-world Haskell app is Silk.[1] Looking at the site, there's no mention of Haskell and no obvious way to tell that that is the implementation language. And that's the beauty of it! :-)
When you describe the list of shortcuts for emacs, rather than C-c C-x I would prefer the full Control c or Control x. I programmed in high school in visual basic and c++ but only on windows machines. When I went to college I remember being an absolute beginner and trying to fly through the emacs tutorial and being like, what is capital C? So in other words, do you have a guide or an 'absolute beginners guide'?
The author goes over this in the "Keyboard Shortcuts" section. This guide is about as "beginner" as you will find. "C" as an abbreviation for "Control" is pretty much found across all emacs documentation, so getting used to it is a good idea.
Probably wouldn't be a bad idea to introduce the Emacs key sequence representation before introducing Emacs keyboard shortcuts, though. I can see how it'd be really confusing for someone who's totally unfamiliar.
Something I think would be useful is a beginner's guide to what you should want your text editor to be capable of. I feel like if you already know what you want to achieve, the main barrier to getting there in Emacs is just getting familiarity with the nomenclature and what packages exist.
A good example from this article would be M-q for auto-fill. I was super excited when I discovered that command after spending some time redoing line breaks manually before thinking "I'm sure somebody has solved this problem in Emacs before." I'm sure there are tons of useful text editing hacks that would be really useful that just haven't even occurred to me yet.
Emacs with Evil mode is the best editor ever. For pure text editing capability Vim can't be beat, but it lacks some niceties like ability to run shells, an integrated package installer etc.
With Emacs and Evil, you can get the best of both worlds.
And Spacemacs (https://github.com/syl20bnr/spacemacs) is a good way to have a nice Evil integration. The only downside I found is when you have to install your first new packages, Spacemacs forces you to integrate it in a configuration-layer because it deletes all orphan packages. Now I think it's a good way to organise your packages, but it's definitively puzzling when you try to figure out why your newly-installed packages got deleted for the 5th time.
I think it might be worth adding C-x C-c to the list of shortcuts, since people would like to know how to get out of the application once launching it. C-g is labeled as quit, which might be confusing to a beginner.
I used to have that. A couple tweaks made my experience much better:
1. Remap Caps Lock to Control and press it with my ring finger rather than my pinkie when possible (e.g C-a, C-s, C-d). I still use my pinkie for C-g or C-r, but diminishing the number of times it is used was very helpful
2. Map more keybindings to use Alt rather than Control.
I've been using Emacs keybindings for a really long time now, but I think I could be convinced to try the Ergo Emacs keybindings. My only worry is that my keyboard is French Canadian (with dead keys), so I'd probably need to first start by remapping a bunch of shortcuts.
Since converting to the faith (cult?), I've re-mapped capslock to ctrl on every computer I've owned. Results? Blazingly fast operator on my own machines. Stumbling idiot that's constantly turning on capslock on everyone else's machine :/
A little surprised you've remapped capslock to ctrl, but also remap keybindings to alt. IMHO, alt is more of a stumbling block than control, because you pretty much have to take a hand off of the home row to use it. I find pressing capslock with the pinky not to be a problem, and if anything, have really appreciated a Steve Yegge tip of binding C-x, C-m to M-x (as well as C-x-m, for ultra laziness.)
I've been using Emacs for years with a Happy Hacking Pro 2 keyboard (where what is normally caps-lock is control) and never had any kind of "Emacs pinky" issue. Remapping caps-lock to control is a must!
If 'emacs pinky' is an issue, then you need to work on your google-fu. A cursory look will show you 1001 ways of remapping control to caps lock and other alternatives.