I only started using emacs about 3 months ago.<p>The most useful packages for me, things I wish I'd known about from the beginning:<p>* package, pointing at GNU and Milkbox repos. Any time I edit a new type of file, I look for packages that work well for it.<p>* helm, much better than flex matching for my purposes. I use helm for all list completion except find-file, for which I use ido-find-file. helm-git-grep completely changed the way I work with mixed-source RoR projects, to the point I've fully abandoned RubyMine.<p>* projectile, mostly just for finding files across a whole git repo. I use helm to complete the file to find (setq projectile-completion-system 'helm-comp-read).<p>In addition, it helps enormously to not be afraid of Lisp. Emacs isn't really worth it if you're not interested in tweaking it, IMO. I had to tweak it quite a bit in order for it to play well with rxvt, my preferred terminal; and even further to get it to work well with screen in rxvt, and with mintty on Windows, and screen inside mintty. A familiarity with how termcap works, the esr's showkey utility, and a bunch of time with define-key got it sorted.<p>Here's a function I use a lot (bk-helm-occur at the end):<p><pre><code> (defun get-point-text ()
"Get 'interesting' text at point; either word, or region"
(if mark-active
(buffer-substring (mark) (point))
(thing-at-point 'symbol)))
(defun helm-occur-1 (initial-value)
"Preconfigured helm for Occur with initial input."
(setq helm-multi-occur-buffer-list (list (buffer-name (current-buffer))))
(helm-occur-init-source)
(helm :sources 'helm-source-occur
:buffer "*helm occur*"
:history 'helm-grep-history
:truncate-lines t
:input initial-value))
(defun bk-helm-occur ()
"Invoke helm-occur with initial input configured from text at point"
(interactive)
(helm-occur-1 (get-point-text)))
(global-set-key (kbd "M-o") 'bk-helm-occur)
</code></pre>
It lets me press Alt-O on any symbol and see all occurrences of that symbol in the file. I can then jump to uses, then use helm-resume to find the earlier occurrence and jump back. I have a similar function for a pre-initialized helm-git-grep.<p>It's these kinds of customizations that make emacs shine. Any time you find yourself doing anything repetitive or tedious, you can usually hack a function up in a few minutes that improves your workflow. Prototyping Lisp functions is completely trivial owing to the ability to evaluate Lisp in the buffer.
Is there an canonical opinionated configuration of Emacs where each component works relatively well with all others? I love Emacs but I don't want to spend 100 hours on research and tinkering to have something modern.
I'm amazed linum is not more popular in that list (~10% usage).. I definitely thought more people used linum than say something like winner.<p>Interesting.<p>Obviously, this type of data submission should be tied into something like package.el, though it is fraught with error.
I thought transient-mark-mode was enabled by default in recent releases?<p>iswitchb-mode seems to do some of what ido-mode (which I've never tried) does.