|
|
1.1 root 1: ;; Text mode, and its ideosyncratic commands.
2: ;; Copyright (C) 1985 Free Software Foundation, Inc.
3:
4: ;; This file is part of GNU Emacs.
5:
6: ;; GNU Emacs is free software; you can redistribute it and/or modify
7: ;; it under the terms of the GNU General Public License as published by
8: ;; the Free Software Foundation; either version 1, or (at your option)
9: ;; any later version.
10:
11: ;; GNU Emacs is distributed in the hope that it will be useful,
12: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: ;; GNU General Public License for more details.
15:
16: ;; You should have received a copy of the GNU General Public License
17: ;; along with GNU Emacs; see the file COPYING. If not, write to
18: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19:
20:
21: (defvar text-mode-syntax-table nil
22: "Syntax table used while in text mode.")
23:
24: (defvar text-mode-abbrev-table nil
25: "Abbrev table used while in text mode.")
26: (define-abbrev-table 'text-mode-abbrev-table ())
27:
28: (if text-mode-syntax-table
29: ()
30: (setq text-mode-syntax-table (make-syntax-table))
31: (modify-syntax-entry ?\" ". " text-mode-syntax-table)
32: (modify-syntax-entry ?\\ ". " text-mode-syntax-table)
33: (modify-syntax-entry ?' "w " text-mode-syntax-table))
34:
35: (defvar text-mode-map nil "")
36: (if text-mode-map
37: ()
38: (setq text-mode-map (make-sparse-keymap))
39: (define-key text-mode-map "\t" 'tab-to-tab-stop)
40: (define-key text-mode-map "\es" 'center-line)
41: (define-key text-mode-map "\eS" 'center-paragraph))
42:
43:
44: ;(defun non-saved-text-mode ()
45: ; "Like text-mode, but delete auto save file when file is saved for real."
46: ; (text-mode)
47: ; (make-local-variable 'delete-auto-save-files)
48: ; (setq delete-auto-save-files t))
49:
50: (defun text-mode ()
51: "Major mode for editing text intended for humans to read. Special commands:\\{text-mode-map}
52: Turning on text-mode calls the value of the variable text-mode-hook,
53: if that value is non-nil."
54: (interactive)
55: (kill-all-local-variables)
56: (use-local-map text-mode-map)
57: (setq mode-name "Text")
58: (setq major-mode 'text-mode)
59: (setq local-abbrev-table text-mode-abbrev-table)
60: (set-syntax-table text-mode-syntax-table)
61: (run-hooks 'text-mode-hook))
62:
63: (defvar indented-text-mode-map ())
64: (if indented-text-mode-map
65: ()
66: (setq indented-text-mode-map (make-sparse-keymap))
67: (define-key indented-text-mode-map "\t" 'indent-relative)
68: (define-key indented-text-mode-map "\es" 'center-line)
69: (define-key indented-text-mode-map "\eS" 'center-paragraph))
70:
71: (defun indented-text-mode ()
72: "Major mode for editing indented text intended for humans to read.\\{indented-text-mode-map}
73: Turning on indented-text-mode calls the value of the variable text-mode-hook,
74: if that value is non-nil."
75: (interactive)
76: (kill-all-local-variables)
77: (use-local-map text-mode-map)
78: (define-abbrev-table 'text-mode-abbrev-table ())
79: (setq local-abbrev-table text-mode-abbrev-table)
80: (set-syntax-table text-mode-syntax-table)
81: (make-local-variable 'indent-line-function)
82: (setq indent-line-function 'indent-relative-maybe)
83: (use-local-map indented-text-mode-map)
84: (setq mode-name "Indented Text")
85: (setq major-mode 'indented-text-mode)
86: (run-hooks 'text-mode-hook))
87:
88: (defun center-paragraph ()
89: "Center each line in the paragraph at or after point.
90: See center-line for more info."
91: (interactive)
92: (save-excursion
93: (forward-paragraph)
94: (or (bolp) (newline 1))
95: (let ((end (point)))
96: (backward-paragraph)
97: (center-region (point) end))))
98:
99: (defun center-region (from to)
100: "Center each line starting in the region.
101: See center-line for more info."
102: (interactive "r")
103: (if (> from to)
104: (let ((tem to))
105: (setq to from from tem)))
106: (save-excursion
107: (save-restriction
108: (narrow-to-region from to)
109: (goto-char from)
110: (while (not (eobp))
111: (center-line)
112: (forward-line 1)))))
113:
114: (defun center-line ()
115: "Center the line point is on, within the width specified by `fill-column'.
116: This means adjusting the indentation to match
117: the distance between the end of the text and `fill-column'."
118: (interactive)
119: (save-excursion
120: (let (line-length)
121: (beginning-of-line)
122: (delete-horizontal-space)
123: (end-of-line)
124: (delete-horizontal-space)
125: (setq line-length (current-column))
126: (beginning-of-line)
127: (indent-to
128: (+ left-margin
129: (/ (- fill-column left-margin line-length) 2))))))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.