Funny, about an hour ago I finally broke down and remapped Ctrl+w to backward-kill-word[1] after re-reading Yegge's Effective Emacs, and you've just reminded me to push the commit to my fork of emacs-starter-kit, which is a great way to get a core set of functionality. Works best if you're tyrannical about keeping it up to date, which I mostly am.
Favorite two most recent additions: pyflakes/pylint for Python, and rainbow-mode for CSS.
[1] Having backward-kill-word a two-finger-stroke, instead of the two-handed alt+Backspace, is great! On the other hand, it turns out I kill-region a lot more than I thought I did, so that's a little weird.
Little things off the top of my head that I find useful:
* wind-move -- use shift-arrow keys for window navigation
* (fset 'yes-or-no-p 'y-or-n-p)
* browse-kill-ring
* mic-paren-mode
* rename-file-and-buffer from Yegge
* unscroll (undo inadvertent C-v) from Glickstein's book
* lots of little tweaks like using C-,/. for smooth scrolling up/down
* uniquify to keep buffer names unique
* find-file-at-point
Lots of autloads for more efficient initialisation (although that's less of an issue now that I'm using --daemon at startup)
I do the usual UI tweaks like turning off the menu and tool bar, using ido mode (with smex -- ido for commands), etc. There's not a lot of keys that I rebind, but I do change backward-kill-word to C-w (consistent with shell usage), and kill-region to C-xC-k. Both those suggestions were from Yegge's effective emacs article which is worth a browse; I've ignored his advice to also change M-x to C-xC-m though.
Very little, my .emacs just loads a whole load of other .el files. There's quite a lot in them though :) Here's a very very useful few lines if you're on X Windows:
; Fix copy-paste between emacs and other x programs
(setq x-select-enable-clipboard t)
(if (functionp 'x-cut-buffer-or-selection-value)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value))
All your problems with cut and paste between Emacs and other programs? Gone!
The if statement stops it failing when you use it on other platforms.
EDIT: I also really really like this bit which I've not seen in other peoples lists:
That means I can switch to eshell with C-cs or a can switch to eshell and change the current directory to be the same as the file I was viewing with C-cS. It also passes through the argument so I can have multiple shells open and use the numeric argument (M-1, M-2 etc) to select them.
It's a ~1200 line file (and expanding) this is how I navigate it:
(defun show-dot-emacs-structure ()
"Show the outline-mode structure of ~/.emacs"
(interactive)
(occur "^;;;;+"))
Which shows the outline of the file, e.g.:
74 matches for "^;;;;+" in buffer: .emacs
57:;;;; Debugging
67:;;;; Load paths
112:;;;; Emacs' interface
229:;;;; User info
236:;;;; Encoding
253:;;;; Indenting
273:;;;;; Per-project indentation settings
275:;;;;;; Git
A quiet startup:
;; Don't display the 'Welcome to GNU Emacs' buffer on startup
(setq inhibit-startup-message t)
;; Display this instead of "For information about GNU Emacs and the
;; GNU system, type C-h C-a.". This has been made intentionally hard
;; to customize in GNU Emacs so I have to resort to hackery.
(defun display-startup-echo-area-message ()
"If it wasn't for this you'd be GNU/Spammed by now"
(message ""))
;; Don't insert instructions in the *scratch* buffer
(setq initial-scratch-message nil)
Core UI settings:
;; Display the line and column number in the modeline
(setq line-number-mode t)
(setq column-number-mode t)
(line-number-mode t)
(column-number-mode t)
;; syntax highlight everywhere
(global-font-lock-mode t)
;; Show matching parens (mixed style)
(show-paren-mode t)
(setq show-paren-delay 0.0)
;; 'mixed highligts the whole sexp making it unreadable, maybe tweak
;; color display?
(setq show-paren-style 'parenthesis)
;; Highlight selection
(transient-mark-mode t)
;; make all "yes or no" prompts show "y or n" instead
(fset 'yes-or-no-p 'y-or-n-p)
Changing the switching is worth it, but I really need to find
something that allows me to <TAB> between different possibilities once
completion is exhausted, e.g. if I say "foo.c" and have both "foo.c"
and "foo.c.txt":
;; Switching
(iswitchb-mode 1)
(icomplete-mode 1)
I wish I could also turn off the annoying #-files, but they're
hardcoded in Emacs's C code:
;; I use version control, don't annoy me with backup files everywhere
(setq make-backup-files nil)
(setq auto-save-default nil)
Better file selection:
;;; Electric minibuffer!
;;; When selecting a file to visit, // will mean / and
;;; ~ will mean $HOME regardless of preceding text.
(setq file-name-shadow-tty-properties '(invisible t))
(file-name-shadow-mode 1)
I didn't write this, but it's very useful. It emulates vim's sofftab feature. So indenting with spaces doesn't suck anymore.
(defun backward-delete-whitespace-to-column ()
"delete back to the previous column of whitespace, or just one
char if that's not possible. This emulates vim's softtabs
feature."
(interactive)
(if indent-tabs-mode
(call-interactively 'backward-delete-char-untabify)
;; let's get to work
(let ((movement (% (current-column) tab-width))
(p (point)))
;; brain freeze, should be easier to calculate goal
(when (= movement 0) (setq movement tab-width))
(if (save-excursion
(backward-char movement)
(string-match "^\\s-+$" (buffer-substring-no-properties (point) p)))
(delete-region (- p movement) p)
(call-interactively 'backward-delete-char-untabify)))))
(global-set-key (kbd "<DEL>") 'backward-delete-whitespace-to-column)
I really wish I could find something for Emacs which automatically
detects the style of the code I'm editing and switches the coding
style to that.
For libraries I use (eval-after-load) for everything and
(autoload). It really speeds up startup.
ack is a much better M-x grep (needs ack.el):
;;;;; ack
(defalias 'grep 'ack)
I have something to make swank work with clojure and sbcl, but it's
too large to include here. clojure-mode et al make it really hard to
do this, unfortunately (upstream isn't really interested in this use
case):
And this has saved my many a time from losing web form content (I
should really make this use Git):
(defun on-edit-server-done-do-backup ()
"Run when text is sent to Google Chrome. Do a backup of the
stuff sent there in case something goes wrong, e.g. Chrome
crashes."
(let* ((backup-dir "~/._emacs_chrome-backup")
(backup-file (format "%s.txt" (float-time)))
(backup-path (concat backup-dir "/" backup-file)))
(unless (file-directory-p backup-dir)
(make-directory backup-dir))
(write-region (point-min) (point-max) backup-path)))
Install browse-kill-ring.el now:
(global-set-key (kbd "C-c k") 'browse-kill-ring)
That's about it for the really interesting stuff. But there's a lot of
other mundane stuff in there.
> I really wish I could find something for Emacs which automatically detects the style of the code I'm editing and switches the coding style to that.
If it makes you feel any better, back when I was managing a team in Visual Studio, we called this the "When in Rome" feature. And yes, the versions of this we tried to put together worked as you'd expect... mostly. Determining peoples' whitespace decisions are not trivial. How many lines does the THEN clause of an IF need to have before you surround it with curlies? Do you only put a space before the parens around a function's arguments if there is more than one argument? And my personal favorite, how do you "funge" your indentation style if the nesting level gets high enough that you're at frequent risk of line wrap (soft or hard doesn't matter here)?
People have wacky rules, and as soon as you say you're going to auto-detect them, you're in for a world of pain. Of course, you might have a user base that isn't as persnickety, in which case it's really not that bad.
;; Makes editing without Paredit more convenient...
;; But if you're on linux, first prevent it from logging you out!
(global-set-key [C-M-delete] 'backward-kill-sexp)
(global-set-key [C-M-backspace] 'backward-kill-sexp)
;; Command key meta forever.
(labels ((normal-mac-mods (&rest _) (setq ns-alternate-modifier 'none
ns-command-modifier 'meta)))
(add-hook 'after-make-frame-functions #'normal-mac-mods)
(normal-mac-mods))
Aesthetics
(setq-default ...
;; Make the default buffer a little shinier... also, put
;; (message "Ready")
;; at the end of the file
initial-major-mode 'text-mode
initial-scratch-message (concat " ···"
"--—===== Welcome to Emacs"
" =====—--···\n===---···"
" "
"···---================---···"
" ···---===\n\n")
startup.el is the main starting point (I load that from my .emacs). Can't say it's the cleanest set of config files, but you might find something of use in it.
Some of the things I've configured:
- Detect whether Emacs is running in OS X, Linux, Windows (native), or Cygwin; and I do platform-specific configuration when necessary
- For OS X, I use fixpath.el to load my path by executing bash (I've tried various methods of doing this, and this was the most reliable)
- I had a Clojure setup that was working nicely, but it's been a while since I used it and I need to update it for Clojure 1.2
- ido-mode is great. I have some specific settings for that. For example, enabling ido-enable-flex-matching makes it easier to quickly match files
- Backups go to ~/.emacs.d/backup instead of littering ~ files everywhere. The backup folder is created if necessary.
- YASnippets. I've created some snippets of my own, such as for wikipedia-mode
- I had problems using markdown-mode with YASnippets (both want to use the tab key), but was able to fix this. See my "eval-after-load 'markdown-mode" for this.
If you use YASnippet, I've taken Jeff Wheeler's Textmate-to-YASnippet conversion script and improved it here: http://github.com/nileshk/snippet-copier
That also contains a Eclipse template to YASnippet convertor script I started on which kinda works, though not perfectly.
Also, very often I need to start a new line above or below the current line. So instead of Control e, Return to start a new indented line below the current line I use Control Return.
I try to keep it simple. I set my color theme, switch the font to Consolas, register some major modes (CMake, SLIME, haskell, org, etc), enable some of the disabled-by-default commands, and have some useful key bindings:
; I type this by mistake 80% of the time
(global-unset-key (kbd "C-x C-c"))
; One of my favorite commands
(global-set-key "\C-x\C-j" 'join-line)
; I haven't seen a keyboard with "copy" and "paste" buttons since 2008
; Honestly, Emacs' defaults, WTF
(global-set-key (kbd "<f2>") 'clipboard-kill-ring-save)
(global-set-key (kbd "<f3>") 'clipboard-yank)
[+] [-] daemianmack|15 years ago|reply
http://github.com/daemianmack/emacs-starter-kit/
Favorite two most recent additions: pyflakes/pylint for Python, and rainbow-mode for CSS.
[1] Having backward-kill-word a two-finger-stroke, instead of the two-handed alt+Backspace, is great! On the other hand, it turns out I kill-region a lot more than I thought I did, so that's a little weird.
[+] [-] pttr|15 years ago|reply
[+] [-] aiiie|15 years ago|reply
My entire .emacs is here: http://bitbucket.org/[redacted]/dotfiles/src/tip/.emacs
[+] [-] jcsalterego|15 years ago|reply
[+] [-] Kototama|15 years ago|reply
[+] [-] zck|15 years ago|reply
Specifically, my favorite things are show-paren-mode, ido-mode, and rebinding C-, and C-. to move back and forward between windows.
[+] [-] mark_h|15 years ago|reply
It's quite large, and includes a lot of third-party stuff, much of it as submodules.
It's relocatable (with additional platform and/or machine-specific loads) which might be semi-interesting: http://everythingtastesbetterwithchilli.com/initialisation-f...
Little things off the top of my head that I find useful: * wind-move -- use shift-arrow keys for window navigation * (fset 'yes-or-no-p 'y-or-n-p) * browse-kill-ring * mic-paren-mode * rename-file-and-buffer from Yegge * unscroll (undo inadvertent C-v) from Glickstein's book * lots of little tweaks like using C-,/. for smooth scrolling up/down * uniquify to keep buffer names unique * find-file-at-point
Lots of autloads for more efficient initialisation (although that's less of an issue now that I'm using --daemon at startup)
I do the usual UI tweaks like turning off the menu and tool bar, using ido mode (with smex -- ido for commands), etc. There's not a lot of keys that I rebind, but I do change backward-kill-word to C-w (consistent with shell usage), and kill-region to C-xC-k. Both those suggestions were from Yegge's effective emacs article which is worth a browse; I've ignored his advice to also change M-x to C-xC-m though.
[+] [-] pyronicide|15 years ago|reply
I've modified it slightly, but overall it set emacs up better than I new was possible (and introduced me to some add ons I didn't know existed).
[+] [-] almost|15 years ago|reply
The if statement stops it failing when you use it on other platforms.
EDIT: I also really really like this bit which I've not seen in other peoples lists:
That means I can switch to eshell with C-cs or a can switch to eshell and change the current directory to be the same as the file I was viewing with C-cS. It also passes through the argument so I can have multiple shells open and use the numeric argument (M-1, M-2 etc) to select them.[+] [-] avar|15 years ago|reply
Some noteworthy things:
It's a ~1200 line file (and expanding) this is how I navigate it:
Which shows the outline of the file, e.g.: A quiet startup: Core UI settings: Changing the switching is worth it, but I really need to find something that allows me to <TAB> between different possibilities once completion is exhausted, e.g. if I say "foo.c" and have both "foo.c" and "foo.c.txt": I wish I could also turn off the annoying #-files, but they're hardcoded in Emacs's C code: Better file selection: I didn't write this, but it's very useful. It emulates vim's sofftab feature. So indenting with spaces doesn't suck anymore. I really wish I could find something for Emacs which automatically detects the style of the code I'm editing and switches the coding style to that.For libraries I use (eval-after-load) for everything and (autoload). It really speeds up startup.
ack is a much better M-x grep (needs ack.el):
I have something to make swank work with clojure and sbcl, but it's too large to include here. clojure-mode et al make it really hard to do this, unfortunately (upstream isn't really interested in this use case): You should use nopaste.el (shameless plug): http://github.com/avar/nopaste Here's how I still tolerate GMail and other web apps. I can click on any text field in Chrome and edit it in Emacs: And this has saved my many a time from losing web form content (I should really make this use Git): Install browse-kill-ring.el now: That's about it for the really interesting stuff. But there's a lot of other mundane stuff in there.[+] [-] larsberg|15 years ago|reply
If it makes you feel any better, back when I was managing a team in Visual Studio, we called this the "When in Rome" feature. And yes, the versions of this we tried to put together worked as you'd expect... mostly. Determining peoples' whitespace decisions are not trivial. How many lines does the THEN clause of an IF need to have before you surround it with curlies? Do you only put a space before the parens around a function's arguments if there is more than one argument? And my personal favorite, how do you "funge" your indentation style if the nesting level gets high enough that you're at frequent risk of line wrap (soft or hard doesn't matter here)?
People have wacky rules, and as soon as you say you're going to auto-detect them, you're in for a world of pain. Of course, you might have a user base that isn't as persnickety, in which case it's really not that bad.
[+] [-] julian37|15 years ago|reply
Shameless plug for my dtrt-indent - it doesn't switch coding style but it does adapt transparently to foreign indentation offsets.
http://git.savannah.gnu.org/gitweb/?p=dtrt-indent.git;a=blob...
[+] [-] jharsman|15 years ago|reply
http://nschum.de/src/emacs/guess-style/
[+] [-] julian37|15 years ago|reply
[+] [-] uros643|15 years ago|reply
[+] [-] silentbicycle|15 years ago|reply
[+] [-] rayvega|15 years ago|reply
[+] [-] drblast|15 years ago|reply
[+] [-] jemfinch|15 years ago|reply
[+] [-] jsulak|15 years ago|reply
* Undo-tree. (http://www.emacswiki.org/emacs/UndoTree) Makes emacs undo useful.
This has been one of the most useful functions I've added to my .emacs:
From: http://www.xsteve.at/prg/emacs/power-user-tips.html, which has a bunch of good tips/key bindings[+] [-] jcsalterego|15 years ago|reply
gist.el, powershell-mode, yaml-mode, org-mode are a few I've taken out for brevity.
Otherwise, a few of these are emacs23 specific:
[+] [-] nileshk|15 years ago|reply
startup.el is the main starting point (I load that from my .emacs). Can't say it's the cleanest set of config files, but you might find something of use in it.
Some of the things I've configured:
- Detect whether Emacs is running in OS X, Linux, Windows (native), or Cygwin; and I do platform-specific configuration when necessary
- For OS X, I use fixpath.el to load my path by executing bash (I've tried various methods of doing this, and this was the most reliable)
- For Windows, I have Powershell configured
- I'm using guess-style ( http://nschum.de/src/emacs/guess-style/ ): auto-detects indentation style.
- I had a Clojure setup that was working nicely, but it's been a while since I used it and I need to update it for Clojure 1.2
- ido-mode is great. I have some specific settings for that. For example, enabling ido-enable-flex-matching makes it easier to quickly match files
- Backups go to ~/.emacs.d/backup instead of littering ~ files everywhere. The backup folder is created if necessary.
- YASnippets. I've created some snippets of my own, such as for wikipedia-mode
- I had problems using markdown-mode with YASnippets (both want to use the tab key), but was able to fix this. See my "eval-after-load 'markdown-mode" for this.
If you use YASnippet, I've taken Jeff Wheeler's Textmate-to-YASnippet conversion script and improved it here: http://github.com/nileshk/snippet-copier That also contains a Eclipse template to YASnippet convertor script I started on which kinda works, though not perfectly.
[+] [-] tspiteri|15 years ago|reply
Pressing Return starts a new line at column 0, pressing Control j starts a new indented line. I prefer them the other way round, so I rebind:
Also, very often I need to start a new line above or below the current line. So instead of Control e, Return to start a new indented line below the current line I use Control Return. And to start a new indented line above the current line, instead of Control a, Control o, Control i, I use Control Shift Return.[+] [-] msg|15 years ago|reply
I don't like tabs!
Emacsclient is a real must. All my shells run inside of Emacs. So they're named, I get completions, and so on. That includes remote shells, using tramp and ssh-mode. Here's what I use for session.[+] [-] xtacy|15 years ago|reply
To mimic some of TextMate's functionality, I use:
1. autopair.el: http://www.emacswiki.org/emacs/AutoPairs.
2. yasnippet.el: http://code.google.com/p/yasnippet/
The latest version of Emacs for the MacOSX has an awesome fullscreen capability. I followed the instructions here: http://www.sanityinc.com/full-screen-support-for-cocoa-emacs...
iswitchb-mode has awesome minibuffer completion capabilities. http://www.emacswiki.org/emacs/IswitchBuffers
[+] [-] jakevoytko|15 years ago|reply
[+] [-] kirubakaran|15 years ago|reply
plus
http://lisp.pastebin.com/raw.php?i=MRbccMG4