;;; text-mode.el --- text mode, and its idiosyncratic commands
-;; Copyright (C) 1985, 1992, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1992, 1994, 2002, 2003, 2004,
+;; 2005, 2006 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: wp
;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
(defcustom text-mode-hook nil
"Normal hook run when entering Text mode and many related modes."
:type 'hook
- :options '(turn-on-auto-fill flyspell-mode)
+ :options '(turn-on-auto-fill turn-on-flyspell)
:group 'data)
(defvar text-mode-variant nil
- "Non-nil if this buffer's major mode is a variant of Text mode.")
-
-(defvar text-mode-syntax-table nil
- "Syntax table used while in text mode.")
-
-(defvar text-mode-abbrev-table nil
- "Abbrev table used while in text mode.")
-(define-abbrev-table 'text-mode-abbrev-table ())
-
-(if text-mode-syntax-table
- ()
- (setq text-mode-syntax-table (make-syntax-table))
- (modify-syntax-entry ?\" ". " text-mode-syntax-table)
- (modify-syntax-entry ?\\ ". " text-mode-syntax-table)
- (modify-syntax-entry ?' "w " text-mode-syntax-table))
-
-(defvar text-mode-map nil
- "Keymap for Text mode.
-Many other modes, such as Mail mode, Outline mode and Indented Text mode,
+ "Non-nil if this buffer's major mode is a variant of Text mode.
+Use (derived-mode-p 'text-mode) instead.")
+
+(defvar text-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ (modify-syntax-entry ?\" ". " st)
+ (modify-syntax-entry ?\\ ". " st)
+ ;; We add `p' so that M-c on 'hello' leads to 'Hello' rather than 'hello'.
+ (modify-syntax-entry ?' "w p" st)
+ st)
+ "Syntax table used while in `text-mode'.")
+
+(defvar text-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "\e\t" 'ispell-complete-word)
+ (define-key map "\es" 'center-line)
+ (define-key map "\eS" 'center-paragraph)
+ map)
+ "Keymap for `text-mode'.
+Many other modes, such as `mail-mode', `outline-mode' and `indented-text-mode',
inherit all the commands defined in this map.")
-(if text-mode-map
- ()
- (setq text-mode-map (make-sparse-keymap))
- (define-key text-mode-map "\e\t" 'ispell-complete-word)
- (define-key text-mode-map "\t" 'indent-relative)
- (define-key text-mode-map "\es" 'center-line)
- (define-key text-mode-map "\eS" 'center-paragraph))
-
\f
(define-derived-mode text-mode nil "Text"
"Major mode for editing text written for humans to read.
(see the variable `adaptive-fill-mode').
\\{text-mode-map}
Turning on Text mode runs the normal hook `text-mode-hook'."
- (make-local-variable 'paragraph-start)
- (setq paragraph-start (concat page-delimiter "\\|[ \t]*$"))
- (if (eq ?^ (aref paragraph-start 0))
- (setq paragraph-start (substring paragraph-start 1)))
- (make-local-variable 'paragraph-separate)
- (setq paragraph-separate paragraph-start)
- (make-local-variable 'indent-line-function)
- (setq indent-line-function 'indent-relative-maybe))
-
-(defun paragraph-indent-text-mode ()
+ (make-local-variable 'text-mode-variant)
+ (setq text-mode-variant t)
+ (set (make-local-variable 'require-final-newline)
+ mode-require-final-newline)
+ (set (make-local-variable 'indent-line-function) 'indent-relative))
+
+(define-derived-mode paragraph-indent-text-mode text-mode "Parindent"
"Major mode for editing text, with leading spaces starting a paragraph.
In this mode, you do not need blank lines between paragraphs
when the first line of the following paragraph starts with whitespace.
\\{text-mode-map}
Turning on Paragraph-Indent Text mode runs the normal hooks
`text-mode-hook' and `paragraph-indent-text-mode-hook'."
- (interactive)
- (kill-all-local-variables)
- (use-local-map text-mode-map)
- (setq mode-name "Parindent")
- (setq major-mode 'paragraph-indent-text-mode)
- (setq local-abbrev-table text-mode-abbrev-table)
- (set-syntax-table text-mode-syntax-table)
- (run-hooks 'text-mode-hook 'paragraph-indent-text-mode-hook))
+ :abbrev-table nil :syntax-table nil
+ (paragraph-indent-minor-mode))
(defun paragraph-indent-minor-mode ()
"Minor mode for editing text, with leading spaces starting a paragraph.
In this mode, you do not need blank lines between paragraphs when the
first line of the following paragraph starts with whitespace, as with
-`paragraph-indent-mode'.
+`paragraph-indent-text-mode'.
Turning on Paragraph-Indent minor mode runs the normal hook
`paragraph-indent-text-mode-hook'."
(interactive)
(set (make-local-variable 'paragraph-start)
- (default-value 'paragraph-start))
- (set (make-local-variable 'paragraph-separate) paragraph-start)
+ (concat "[ \t\n\f]\\|" paragraph-start))
+ (set (make-local-variable 'indent-line-function) 'indent-to-left-margin)
(run-hooks 'paragraph-indent-text-mode-hook))
-
+
(defalias 'indented-text-mode 'text-mode)
+;; This can be made a no-op once all modes that use text-mode-hook
+;; are "derived" from text-mode.
(defun text-mode-hook-identify ()
"Mark that this mode has run `text-mode-hook'.
This is how `toggle-text-mode-auto-fill' knows which buffers to operate on."
- (make-local-variable 'text-mode-variant)
- (setq text-mode-variant t))
+ (set (make-local-variable 'text-mode-variant) t))
(add-hook 'text-mode-hook 'text-mode-hook-identify)
(setq nlines (1+ nlines))
(forward-line -1)))))
+;;; arch-tag: a07ccaad-da13-4d7b-9c61-cd04f5926aab
;;; text-mode.el ends here