2011-10-08 23:05:06 +03:00
|
|
|
;;; prelude-editor.el --- Emacs Prelude: enhanced core editing experience.
|
|
|
|
;;
|
|
|
|
;; Copyright (c) 2011 Bozhidar Batsov
|
|
|
|
;;
|
|
|
|
;; Author: Bozhidar Batsov <bozhidar.batsov@gmail.com>
|
|
|
|
;; URL: http://www.emacswiki.org/cgi-bin/wiki/Prelude
|
|
|
|
;; Version: 1.0.0
|
|
|
|
;; Keywords: convenience
|
|
|
|
|
|
|
|
;; This file is not part of GNU Emacs.
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
;; Refinements of the core editing experience in Emacs.
|
|
|
|
|
|
|
|
;;; License:
|
|
|
|
|
|
|
|
;; This program is free software; you can redistribute it and/or
|
|
|
|
;; modify it under the terms of the GNU General Public License
|
|
|
|
;; as published by the Free Software Foundation; either version 3
|
|
|
|
;; of the License, or (at your option) any later version.
|
|
|
|
;;
|
|
|
|
;; This program is distributed in the hope that it will be useful,
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
;;
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
|
|
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
|
|
|
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
;; Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
2011-10-15 13:04:02 +03:00
|
|
|
;; customize
|
|
|
|
(defgroup editor nil
|
|
|
|
"Emacs Prelude Editor enhancements"
|
|
|
|
:group 'prelude)
|
|
|
|
|
2011-10-07 23:25:37 +03:00
|
|
|
;; Emacs users obviously have little need for Command and Option keys,
|
|
|
|
;; but they do need Meta and Super
|
2011-10-20 00:54:17 +03:00
|
|
|
(when (eq system-type 'darwin)
|
2011-10-07 23:25:37 +03:00
|
|
|
(setq mac-command-modifier 'super)
|
|
|
|
(setq mac-option-modifier 'meta))
|
|
|
|
|
2012-02-27 21:49:00 +02:00
|
|
|
;; Death to the tabs! However, tabs historically indent to the next
|
|
|
|
;; 8-character offset; specifying anything else will cause *mass*
|
|
|
|
;; confusion, as it will change the appearance of every existing file.
|
|
|
|
;; In some cases (python), even worse -- it will change the semantics
|
|
|
|
;; (meaning) of the program.
|
|
|
|
;;
|
|
|
|
;; Emacs modes typically provide a standard means to change the
|
|
|
|
;; indentation width -- eg. c-basic-offset: use that to adjust your
|
|
|
|
;; personal indentation width, while maintaining the style (and
|
|
|
|
;; meaning) of any files you load.
|
|
|
|
(setq-default indent-tabs-mode nil) ;; don't use tabs to indent
|
|
|
|
(setq-default tab-width 8) ;; but maintain correct appearance
|
2011-10-07 23:25:37 +03:00
|
|
|
|
|
|
|
;; delete the selection with a keypress
|
|
|
|
(delete-selection-mode t)
|
|
|
|
|
|
|
|
;; store all backup and autosave files in the tmp dir
|
|
|
|
(setq backup-directory-alist
|
|
|
|
`((".*" . ,temporary-file-directory)))
|
|
|
|
(setq auto-save-file-name-transforms
|
|
|
|
`((".*" ,temporary-file-directory t)))
|
|
|
|
|
|
|
|
;; revert buffers automatically when underlying files are changed externally
|
|
|
|
(global-auto-revert-mode t)
|
|
|
|
|
|
|
|
;; hippie expand is dabbrev expand on steroids
|
|
|
|
(setq hippie-expand-try-functions-list '(try-expand-dabbrev
|
|
|
|
try-expand-dabbrev-all-buffers
|
|
|
|
try-expand-dabbrev-from-kill
|
|
|
|
try-complete-file-name-partially
|
|
|
|
try-complete-file-name
|
|
|
|
try-expand-all-abbrevs
|
|
|
|
try-expand-list
|
|
|
|
try-expand-line
|
|
|
|
try-complete-lisp-symbol-partially
|
|
|
|
try-complete-lisp-symbol))
|
|
|
|
|
2011-10-09 00:24:41 +03:00
|
|
|
;; smart indenting and pairing for all
|
|
|
|
(electric-pair-mode t)
|
|
|
|
(electric-indent-mode t)
|
2011-10-09 11:21:57 +03:00
|
|
|
(electric-layout-mode t)
|
2011-10-09 00:24:41 +03:00
|
|
|
|
2011-10-07 23:25:37 +03:00
|
|
|
;; meaningful names for buffers with the same name
|
|
|
|
(require 'uniquify)
|
|
|
|
(setq uniquify-buffer-name-style 'forward)
|
|
|
|
(setq uniquify-separator "/")
|
|
|
|
(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified
|
|
|
|
(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers
|
|
|
|
|
2011-10-22 23:50:40 +03:00
|
|
|
;; saveplace remembers your location in a file when saving files
|
|
|
|
(setq save-place-file (concat user-emacs-directory "saveplace"))
|
|
|
|
;; activate it for all buffers
|
|
|
|
(setq-default save-place t)
|
|
|
|
(require 'saveplace)
|
|
|
|
|
|
|
|
;; savehist keeps track of some history
|
|
|
|
(setq savehist-additional-variables
|
|
|
|
;; search entries
|
|
|
|
'(search ring regexp-search-ring)
|
|
|
|
;; save every minute
|
|
|
|
savehist-autosave-interval 60
|
|
|
|
;; keep the home clean
|
|
|
|
savehist-file (concat user-emacs-directory "savehist"))
|
|
|
|
(savehist-mode t)
|
2011-10-07 23:25:37 +03:00
|
|
|
|
|
|
|
;; save recent files
|
2011-10-22 23:50:40 +03:00
|
|
|
(setq recentf-save-file (concat user-emacs-directory "recentf")
|
|
|
|
recentf-max-saved-items 200
|
|
|
|
recentf-max-menu-items 15)
|
|
|
|
(recentf-mode t)
|
2011-10-07 23:25:37 +03:00
|
|
|
|
|
|
|
;; time-stamps
|
|
|
|
;; when there's "Time-stamp: <>" in the first 10 lines of the file
|
2011-10-08 23:05:06 +03:00
|
|
|
(setq time-stamp-active t
|
|
|
|
;; check first 10 buffer lines for Time-stamp: <>
|
|
|
|
time-stamp-line-limit 10
|
|
|
|
time-stamp-format "%04y-%02m-%02d %02H:%02M:%02S (%u)") ; date format
|
2011-10-07 23:25:37 +03:00
|
|
|
(add-hook 'write-file-hooks 'time-stamp) ; update when saving
|
|
|
|
|
|
|
|
;; use shift + arrow keys to switch between visible buffers
|
|
|
|
(require 'windmove)
|
|
|
|
(windmove-default-keybindings 'super)
|
|
|
|
|
|
|
|
;; show-paren-mode: subtle highlighting of matching parens
|
|
|
|
(show-paren-mode t)
|
|
|
|
(setq show-paren-style 'parenthesis)
|
|
|
|
|
2011-11-08 16:43:19 +02:00
|
|
|
;; highlight the current line
|
|
|
|
(global-hl-line-mode +1)
|
|
|
|
|
2012-02-15 22:02:14 +02:00
|
|
|
(require 'volatile-highlights)
|
|
|
|
(volatile-highlights-mode t)
|
|
|
|
|
2011-10-07 23:25:37 +03:00
|
|
|
;; tramp, for sudo access
|
|
|
|
(require 'tramp)
|
|
|
|
;; keep in mind known issues with zsh - see emacs wiki
|
|
|
|
(setq tramp-default-method "ssh")
|
|
|
|
|
|
|
|
;; ido-mode
|
|
|
|
(ido-mode t)
|
|
|
|
(setq ido-enable-prefix nil
|
|
|
|
ido-enable-flex-matching t
|
|
|
|
ido-create-new-buffer 'always
|
|
|
|
ido-use-filename-at-point 'guess
|
|
|
|
ido-max-prospects 10
|
|
|
|
ido-default-file-method 'selected-window)
|
|
|
|
|
|
|
|
;; auto-completion in minibuffer
|
|
|
|
(icomplete-mode +1)
|
|
|
|
|
|
|
|
(set-default 'imenu-auto-rescan t)
|
|
|
|
|
2011-10-22 23:50:40 +03:00
|
|
|
;; flyspell-mode does spell-checking on the fly as you type
|
2011-10-07 23:25:37 +03:00
|
|
|
(setq ispell-program-name "aspell" ; use aspell instead of ispell
|
|
|
|
ispell-extra-args '("--sug-mode=ultra"))
|
|
|
|
(autoload 'flyspell-mode "flyspell" "On-the-fly spelling checker." t)
|
|
|
|
|
2011-10-08 23:05:06 +03:00
|
|
|
(defun prelude-turn-on-flyspell ()
|
2011-10-07 23:25:37 +03:00
|
|
|
"Force flyspell-mode on using a positive argument. For use in hooks."
|
|
|
|
(interactive)
|
2011-10-22 23:50:40 +03:00
|
|
|
(flyspell-mode +1))
|
2011-10-07 23:25:37 +03:00
|
|
|
|
2011-10-08 23:05:06 +03:00
|
|
|
(add-hook 'message-mode-hook 'prelude-turn-on-flyspell)
|
|
|
|
(add-hook 'text-mode-hook 'prelude-turn-on-flyspell)
|
|
|
|
|
2012-02-23 18:22:18 +02:00
|
|
|
;; enable narrowing commands
|
2011-10-07 23:25:37 +03:00
|
|
|
(put 'narrow-to-region 'disabled nil)
|
2012-02-23 18:22:18 +02:00
|
|
|
(put 'narrow-to-page 'disabled nil)
|
|
|
|
(put 'narrow-to-defun 'disabled nil)
|
|
|
|
|
|
|
|
;; enabled change region case commands
|
|
|
|
(put 'upcase-region 'disabled nil)
|
|
|
|
(put 'downcase-region 'disabled nil)
|
2011-10-07 23:25:37 +03:00
|
|
|
|
2011-12-05 16:30:05 +02:00
|
|
|
(require 'expand-region)
|
|
|
|
(global-set-key (kbd "C-@") 'er/expand-region)
|
|
|
|
|
2011-10-07 23:25:37 +03:00
|
|
|
;; bookmarks
|
2011-10-22 23:50:40 +03:00
|
|
|
(setq bookmark-default-file (concat user-emacs-directory "bookmarks")
|
2011-10-08 23:05:06 +03:00
|
|
|
bookmark-save-flag 1)
|
|
|
|
|
2011-10-09 17:02:16 +03:00
|
|
|
;; enabled auto-fill mode in text-mode and all related modes
|
|
|
|
(add-hook 'text-mode-hook 'turn-on-auto-fill)
|
|
|
|
|
2012-02-17 22:12:32 +02:00
|
|
|
;; load yasnippet
|
|
|
|
(require 'yasnippet)
|
|
|
|
(yas/initialize)
|
|
|
|
|
2011-10-10 12:27:17 +03:00
|
|
|
;; projectile is a project management mode
|
|
|
|
(require 'projectile)
|
|
|
|
(projectile-global-mode t)
|
|
|
|
|
2011-11-10 10:37:39 +02:00
|
|
|
;; dired - reuse current buffer by pressing 'a'
|
|
|
|
(put 'dired-find-alternate-file 'disabled nil)
|
|
|
|
|
2011-12-07 13:47:27 +02:00
|
|
|
;; ediff - don't start another frame
|
|
|
|
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
|
|
|
|
2012-02-23 18:02:34 +02:00
|
|
|
;; enable Prelude's keybindings
|
|
|
|
(prelude-global-mode t)
|
|
|
|
|
2011-10-08 23:05:06 +03:00
|
|
|
(provide 'prelude-editor)
|
2011-10-07 23:25:37 +03:00
|
|
|
|
2011-10-08 23:05:06 +03:00
|
|
|
;;; prelude-editor.el ends here
|