-;;; aggressive-indent.el --- Minor mode to keep your code always indented. More aggressive than electric-indent-mode.
+;;; aggressive-indent.el --- Minor mode to aggressively keep your code always indented
;; Copyright (C) 2014 Artur Malabarba <bruce.connor.am@gmail.com>
;; Separator: -
;;; Commentary:
-;;
+;;
;; `electric-indent-mode' is enough to keep your code nicely aligned when
;; all you do is type. However, once you start shifting blocks around,
;; transposing lines, or slurping and barfing sexps, indentation is bound
;; to go wrong.
-;;
+;;
;; `aggressive-indent-mode' is a minor mode that keeps your code always
;; indented. It reindents after every command, making it more reliable
;; than `electric-indent-mode'.
-;;
+;;
;; ### Instructions ###
-;;
+;;
;; This package is available fom Melpa, you may install it by calling
-;;
+;;
;; M-x package-install RET aggressive-indent
-;;
+;;
;; Then activate it with
-;;
+;;
;; (add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
;; (add-hook 'css-mode-hook #'aggressive-indent-mode)
-;;
+;;
;; You can use this hook on any mode you want, `aggressive-indent' is not
;; exclusive to emacs-lisp code. In fact, if you want to turn it on for
;; every programming mode, you can do something like:
-;;
+;;
;; (global-aggressive-indent-mode 1)
;; (add-to-list 'aggressive-indent-excluded-modes 'html-mode)
-;;
+;;
;; ### Manual Installation ###
-;;
+;;
;; If you don't want to install from Melpa, you can download it manually,
;; place it in your `load-path' and require it with
-;;
+;;
;; (require 'aggressive-indent)
;;; Instructions:
\f
;;; Start of actual Code:
- (defcustom excluded-modes '(text-mode tabulated-list-mode special-mode)
+ (defcustom excluded-modes
+ '(text-mode tabulated-list-mode special-mode
+ minibuffer-inactive-mode)
"Modes in which `aggressive-indent-mode' should not be activated.
This variable is only used if `global-aggressive-indent-mode' is
active. If the minor mode is turned on with the local command,
"Indent current defun.
Throw an error if parentheses are unbalanced."
(interactive)
- (indent-region
- (save-excursion (beginning-of-defun 1) (point))
- (save-excursion (end-of-defun 1) (point))))
+ (let ((p (point-marker)))
+ (set-marker-insertion-type p t)
+ (indent-region
+ (save-excursion (beginning-of-defun 1) (point))
+ (save-excursion (end-of-defun 1) (point)))
+ (goto-char p)))
\f
;;; Minor modes
-:autoload
-(define-globalized-minor-mode global-aggressive-indent-mode
- mode mode)
-
:autoload
(define-minor-mode mode nil nil " =>"
'(("\C-c\C-q" . aggressive-indent-indent-defun))
(if mode
(if (and global-aggressive-indent-mode
- (cl-member-if #'derived-mode-p excluded-modes))
+ (or (cl-member-if #'derived-mode-p excluded-modes)
+ buffer-read-only))
(mode -1)
(setq-local electric-indent-mode nil)
(add-hook 'post-command-hook #'-softly-indent-defun nil 'local))
(remove-hook 'post-command-hook #'-softly-indent-defun 'local)))
+:autoload
+(define-globalized-minor-mode global-aggressive-indent-mode
+ mode mode)
+
:autoload
- (defalias #'aggressive-indent-global-mode
+ (defalias 'aggressive-indent-global-mode
#'global-aggressive-indent-mode)
)