aks@HUB.UCSB.EDU (Alan Stebbens, aks@hub.ucsb.edu) (08/07/87)
It always seemed to me that auto-indention should be a minor mode,
instead of a major mode, as it is with indented-text mode. So, I
wrote the following little piece of Emacs-lisp to provide
auto-indention as a minor mode to the current major mode. This is
particularly useful with outline-mode. It sets the TAB key to
indent-relative, and links indent-relative-maybe to the
indent-line-function.
To use: (auto-indent-mode ARG) will set, clear, or toggle the
auto-indent-flag if ARG is nonzero, zero, or omitted (null). As a
matter of course, I added the following line to my text-mode-init func
(which is invoked via text-mode-hook):
(auto-indent-mode 1)
If there are improvements which can be made on this, please mail
them to me so I can learn from it.
============================== auto-indent.el ==============================
;; auto-indent.el -- Set up minor mode to auto-indent relatively.
;; Alan K. Stebbens 7 Aug 87
;;
(if (boundp 'auto-indent-flag)
nil
(defvar auto-indent-flag nil "\
If set, indicates that auto-indent mode is active. This variable is
automatically set by invoking \\[auto-indent-mode].")
(setq minor-mode-alist (cons '(auto-indent-flag " Indent")
minor-mode-alist))
(make-variable-buffer-local 'auto-indent-flag)
(set-default 'auto-indent-flag nil))
;; auto-indent-mode
(defun auto-indent-mode (arg) "\
Enable, disable, or toggle auto-indent mode if ARG is nonzero, zero, or
omitted. Auto-indent mode works by invoking indent-relative for TAB,
and using indent-relative-may as the indent-line-function for auto-fill,
and NEWLINE."
(interactive "P")
(if (setq auto-indent-flag (if (or (zerop (prefix-numeric-value arg))
(and (null arg) auto-indent-flag))
nil
t))
(progn
(if (not (boundp 'auto-indent-old-tab-key))
(make-local-vars 'auto-indent-old-tab-key (key-binding "\t")
'auto-indent-old-indent-func indent-line-function
'auto-indent-flag t))
(local-set-key "\t" 'indent-relative)
(setq indent-line-function 'indent-relative-maybe))
(if (boundp 'auto-indent-old-tab-key)
(progn
(local-set-key "\t" auto-indent-old-tab-key)
(setq indent-line-function auto-indent-old-indent-func)
(makunbound auto-indent-old-tab-key)
(makunbound auto-indent-old-indent-func))))
(set-buffer-modified-p (buffer-modified-p)))