Mercurial > emacs
annotate lisp/textmodes/nroff-mode.el @ 107189:a48b193e3b5f
(tramp-handle-insert-file-contents): Set always the permissions of the
temporary file to "0600". In case the remote
file has no read permissions for the owner, there might be
problems otherwise. Reported by Ole Laursen <olau@iola.dk>.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Thu, 18 Feb 2010 11:03:12 +0100 |
parents | 1d1d5d9bd884 |
children | ad86f610b2b3 376148b31b5e |
rev | line source |
---|---|
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
233
diff
changeset
|
1 ;;; nroff-mode.el --- GNU Emacs major mode for editing nroff source |
789
71d052f72ac1
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
2 |
64751
5b1a238fcbb4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
3 ;; Copyright (C) 1985, 1986, 1994, 1995, 1997, 2001, 2002, 2003, |
106815 | 4 ;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
845 | 5 |
789
71d052f72ac1
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
6 ;; Maintainer: FSF |
814
38b2499cb3e9
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
7 ;; Keywords: wp |
789
71d052f72ac1
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
8 |
36 | 9 ;; This file is part of GNU Emacs. |
10 | |
94670
f4a69fedbd46
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93674
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
36 | 12 ;; it under the terms of the GNU General Public License as published by |
94670
f4a69fedbd46
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93674
diff
changeset
|
13 ;; the Free Software Foundation, either version 3 of the License, or |
f4a69fedbd46
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93674
diff
changeset
|
14 ;; (at your option) any later version. |
36 | 15 |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
94670
f4a69fedbd46
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93674
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
36 | 23 |
2308
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
24 ;;; Commentary: |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
25 |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
26 ;; This package is a major mode for editing nroff source code. It knows |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
27 ;; about various nroff constructs, ms, mm, and me macros, and will fill |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
28 ;; and indent paragraphs properly in their presence. It also includes |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
29 ;; a command to count text lines (excluding nroff constructs), a command |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
30 ;; to center a line, and movement commands that know how to skip macros. |
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
31 |
12595
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
32 ;; Paragraph filling and line-counting currently don't respect comments, |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
33 ;; as they should. |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
34 |
789
71d052f72ac1
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
35 ;;; Code: |
71d052f72ac1
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
36 |
19475 | 37 (defgroup nroff nil |
38 "Nroff mode." | |
66963
a11fdee52c05
Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents:
64751
diff
changeset
|
39 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces) |
20082
5aeeb9b32ee4
(nroff): Moved from `editing' to `wp'.
Karl Heuer <kwzh@gnu.org>
parents:
19475
diff
changeset
|
40 :group 'wp |
19475 | 41 :prefix "nroff-") |
42 | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
43 |
19475 | 44 (defcustom nroff-electric-mode nil |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
45 "Non-nil means automatically closing requests when you insert an open." |
19475 | 46 :group 'nroff |
47 :type 'boolean) | |
18425
847ee3e08152
(nroff-electric-mode): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18383
diff
changeset
|
48 |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
49 (defvar nroff-mode-map |
93674
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
50 (let ((map (make-sparse-keymap)) |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
51 (menu-map (make-sparse-keymap))) |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
52 (define-key map "\t" 'tab-to-tab-stop) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
53 (define-key map "\es" 'center-line) |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
54 (define-key map "\e?" 'nroff-count-text-lines) |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
55 (define-key map "\n" 'nroff-electric-newline) |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
56 (define-key map "\en" 'nroff-forward-text-line) |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
57 (define-key map "\ep" 'nroff-backward-text-line) |
93674
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
58 (define-key map [menu-bar nroff-mode] (cons "Nroff" menu-map)) |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
59 (define-key menu-map [nn] |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
60 '(menu-item "Newline" nroff-electric-newline |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
61 :help "Insert newline for nroff mode; special if nroff-electric mode")) |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
62 (define-key menu-map [nc] |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
63 '(menu-item "Count text lines" nroff-count-text-lines |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
64 :help "Count lines in region, except for nroff request lines.")) |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
65 (define-key menu-map [nf] |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
66 '(menu-item "Forward text line" nroff-forward-text-line |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
67 :help "Go forward one nroff text line, skipping lines of nroff requests")) |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
68 (define-key menu-map [nb] |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
69 '(menu-item "Backward text line" nroff-backward-text-line |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
70 :help "Go backward one nroff text line, skipping lines of nroff requests")) |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
71 (define-key menu-map [ne] |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
72 '(menu-item "Electric newline mode" |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
73 nroff-electric-mode |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
74 :help "Auto insert closing requests if necessary" |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
75 :button (:toggle . nroff-electric-mode))) |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
76 map) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
77 "Major mode keymap for `nroff-mode'.") |
36 | 78 |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
79 (defvar nroff-mode-syntax-table |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
80 (let ((st (copy-syntax-table text-mode-syntax-table))) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
81 ;; " isn't given string quote syntax in text-mode but it |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
82 ;; (arguably) should be for use round nroff arguments (with ` and |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
83 ;; ' used otherwise). |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
84 (modify-syntax-entry ?\" "\" 2" st) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
85 ;; Comments are delimited by \" and newline. |
81650 | 86 ;; And in groff also \# to newline. |
87 (modify-syntax-entry ?# ". 2" st) | |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
88 (modify-syntax-entry ?\\ "\\ 1" st) |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
89 (modify-syntax-entry ?\n ">" st) |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
90 st) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
91 "Syntax table used while in `nroff-mode'.") |
12595
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
92 |
49025 | 93 (defvar nroff-imenu-expression |
94 ;; man headers: | |
95 '((nil "^\\.SH \"?\\([^\"\n]*\\)\"?$" 1))) | |
96 | |
19475 | 97 (defcustom nroff-font-lock-keywords |
12595
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
98 (list |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
99 ;; Directives are . or ' at start of line, followed by |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
100 ;; optional whitespace, then command (which my be longer than |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
101 ;; 2 characters in groff). Perhaps the arguments should be |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
102 ;; fontified as well. |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
103 "^[.']\\s-*\\sw+" |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
104 ;; There are numerous groff escapes; the following get things |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
105 ;; like \-, \(em (standard troff) and \f[bar] (groff |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
106 ;; variants). This won't currently do groff's \A'foo' and |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
107 ;; the like properly. One might expect it to highlight an escape's |
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
108 ;; arguments in common cases, like \f. |
68599
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
109 (concat "\\\\" ; backslash |
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
110 "\\(" ; followed by various possibilities |
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
111 (mapconcat 'identity |
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
112 '("[f*n]*\\[.+?]" ; some groff extensions |
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
113 "(.." ; two chars after ( |
81650 | 114 "[^(\"#]" ; single char escape |
68599
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
115 ) "\\|") |
8b39fc927b5e
* textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
Werner LEMBERG <wl@gnu.org>
parents:
66963
diff
changeset
|
116 "\\)") |
12595
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
117 ) |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
118 "Font-lock highlighting control in `nroff-mode'." |
19475 | 119 :group 'nroff |
120 :type '(repeat regexp)) | |
12595
cf258211ea5b
(font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10886
diff
changeset
|
121 |
49025 | 122 (defcustom nroff-mode-hook nil |
123 "Hook run by function `nroff-mode'." | |
124 :type 'hook | |
125 :group 'nroff) | |
126 | |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
233
diff
changeset
|
127 ;;;###autoload |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
128 (define-derived-mode nroff-mode text-mode "Nroff" |
36 | 129 "Major mode for editing text intended for nroff to format. |
130 \\{nroff-mode-map} | |
233 | 131 Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'. |
132 Also, try `nroff-electric-mode', for automatically inserting | |
36 | 133 closing requests for requests that are used in matched pairs." |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
134 (set (make-local-variable 'font-lock-defaults) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
135 ;; SYNTAX-BEGIN is set to backward-paragraph to avoid slow-down |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
136 ;; near the end of large buffers due to searching to buffer's |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
137 ;; beginning. |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
138 '(nroff-font-lock-keywords nil t nil backward-paragraph)) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
139 (set (make-local-variable 'outline-regexp) "\\.H[ ]+[1-7]+ ") |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
140 (set (make-local-variable 'outline-level) 'nroff-outline-level) |
36 | 141 ;; now define a bunch of variables for use by commands in this mode |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
142 (set (make-local-variable 'page-delimiter) "^\\.\\(bp\\|SK\\|OP\\)") |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
143 (set (make-local-variable 'paragraph-start) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
144 (concat "[.']\\|" paragraph-start)) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
145 (set (make-local-variable 'paragraph-separate) |
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
146 (concat "[.']\\|" paragraph-separate)) |
97577
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
147 ;; Don't auto-fill directive lines starting . or ' since they normally |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
148 ;; have to be one line. But do auto-fill comments .\" .\# and '''. |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
149 ;; Comment directives (those starting . or ') are [.'][ \t]*\\[#"] |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
150 ;; or ''', and this regexp is everything except those. So [.'] |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
151 ;; followed by not backslash and not ' or followed by backslash but |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
152 ;; then not # or " |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
153 (set (make-local-variable 'auto-fill-inhibit-regexp) |
cc3ca7429977
(nroff-mode): Avoid auto-filling on directive lines.
Chong Yidong <cyd@stupidchicken.com>
parents:
94670
diff
changeset
|
154 "[.'][ \t]*\\([^ \t\\']\\|\\\\[^#\"]\\)") |
36 | 155 ;; comment syntax added by mit-erl!gildea 18 Apr 86 |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
156 (set (make-local-variable 'comment-start) "\\\" ") |
81650 | 157 (set (make-local-variable 'comment-start-skip) "\\\\[\"#][ \t]*") |
39570
d16a58a98f40
(nroff-mode-abbrev-table, nroff-mode): Use define-derived-mode.
Gerd Moellmann <gerd@gnu.org>
parents:
35895
diff
changeset
|
158 (set (make-local-variable 'comment-column) 24) |
49025 | 159 (set (make-local-variable 'comment-indent-function) 'nroff-comment-indent) |
85906
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
160 (set (make-local-variable 'comment-insert-comment-function) |
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
161 'nroff-insert-comment-function) |
49025 | 162 (set (make-local-variable 'imenu-generic-expression) nroff-imenu-expression)) |
36 | 163 |
6075
b23452652292
(nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents:
3143
diff
changeset
|
164 (defun nroff-outline-level () |
b23452652292
(nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents:
3143
diff
changeset
|
165 (save-excursion |
b23452652292
(nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents:
3143
diff
changeset
|
166 (looking-at outline-regexp) |
b23452652292
(nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents:
3143
diff
changeset
|
167 (skip-chars-forward ".H ") |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
52401
diff
changeset
|
168 (string-to-number (buffer-substring (point) (+ 1 (point)))))) |
6075
b23452652292
(nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents:
3143
diff
changeset
|
169 |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
170 ;; Compute how much to indent a comment in nroff/troff source. |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
171 ;; By mit-erl!gildea April 86 |
36 | 172 (defun nroff-comment-indent () |
173 "Compute indent for an nroff/troff comment. | |
174 Puts a full-stop before comments on a line by themselves." | |
175 (let ((pt (point))) | |
176 (unwind-protect | |
177 (progn | |
178 (skip-chars-backward " \t") | |
179 (if (bolp) | |
180 (progn | |
85906
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
181 ;; FIXME delete-horizontal-space? |
36 | 182 (setq pt (1+ pt)) |
183 (insert ?.) | |
184 1) | |
185 (if (save-excursion | |
186 (backward-char 1) | |
187 (looking-at "^[.']")) | |
188 1 | |
189 (max comment-column | |
190 (* 8 (/ (+ (current-column) | |
191 9) 8)))))) ; add 9 to ensure at least two blanks | |
192 (goto-char pt)))) | |
193 | |
79308
c9be678e700b
(nroff-mode): Set indent-line-function.
Glenn Morris <rgm@gnu.org>
parents:
78482
diff
changeset
|
194 ;; http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01869.html |
85906
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
195 (defun nroff-insert-comment-function () |
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
196 "Function for `comment-insert-comment-function' in `nroff-mode'." |
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
197 (indent-to (nroff-comment-indent)) |
e8570ba362b2
(nroff-mode): Set comment-insert-comment-function rather than
Glenn Morris <rgm@gnu.org>
parents:
85858
diff
changeset
|
198 (insert comment-start)) |
79308
c9be678e700b
(nroff-mode): Set indent-line-function.
Glenn Morris <rgm@gnu.org>
parents:
78482
diff
changeset
|
199 |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
200 (defun nroff-count-text-lines (start end &optional print) |
36 | 201 "Count lines in region, except for nroff request lines. |
202 All lines not starting with a period are counted up. | |
203 Interactively, print result in echo area. | |
204 Noninteractively, return number of non-request lines from START to END." | |
205 (interactive "r\np") | |
206 (if print | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
207 (message "Region has %d text lines" (nroff-count-text-lines start end)) |
36 | 208 (save-excursion |
209 (save-restriction | |
210 (narrow-to-region start end) | |
211 (goto-char (point-min)) | |
79308
c9be678e700b
(nroff-mode): Set indent-line-function.
Glenn Morris <rgm@gnu.org>
parents:
78482
diff
changeset
|
212 (- (buffer-size) (nroff-forward-text-line (buffer-size))))))) |
36 | 213 |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
214 (defun nroff-forward-text-line (&optional cnt) |
36 | 215 "Go forward one nroff text line, skipping lines of nroff requests. |
216 An argument is a repeat count; if negative, move backward." | |
217 (interactive "p") | |
218 (if (not cnt) (setq cnt 1)) | |
219 (while (and (> cnt 0) (not (eobp))) | |
220 (forward-line 1) | |
221 (while (and (not (eobp)) (looking-at "[.'].")) | |
222 (forward-line 1)) | |
223 (setq cnt (- cnt 1))) | |
224 (while (and (< cnt 0) (not (bobp))) | |
225 (forward-line -1) | |
226 (while (and (not (bobp)) | |
227 (looking-at "[.'].")) | |
228 (forward-line -1)) | |
229 (setq cnt (+ cnt 1))) | |
230 cnt) | |
231 | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
232 (defun nroff-backward-text-line (&optional cnt) |
36 | 233 "Go backward one nroff text line, skipping lines of nroff requests. |
234 An argument is a repeat count; negative means move forward." | |
235 (interactive "p") | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
236 (nroff-forward-text-line (- cnt))) |
36 | 237 |
238 (defconst nroff-brace-table | |
239 '((".(b" . ".)b") | |
240 (".(l" . ".)l") | |
241 (".(q" . ".)q") | |
242 (".(c" . ".)c") | |
243 (".(x" . ".)x") | |
244 (".(z" . ".)z") | |
245 (".(d" . ".)d") | |
246 (".(f" . ".)f") | |
247 (".LG" . ".NL") | |
248 (".SM" . ".NL") | |
249 (".LD" . ".DE") | |
250 (".CD" . ".DE") | |
251 (".BD" . ".DE") | |
252 (".DS" . ".DE") | |
253 (".DF" . ".DE") | |
254 (".FS" . ".FE") | |
255 (".KS" . ".KE") | |
256 (".KF" . ".KE") | |
257 (".LB" . ".LE") | |
258 (".AL" . ".LE") | |
259 (".BL" . ".LE") | |
260 (".DL" . ".LE") | |
261 (".ML" . ".LE") | |
262 (".RL" . ".LE") | |
263 (".VL" . ".LE") | |
264 (".RS" . ".RE") | |
265 (".TS" . ".TE") | |
266 (".EQ" . ".EN") | |
267 (".PS" . ".PE") | |
268 (".BS" . ".BE") | |
269 (".G1" . ".G2") ; grap | |
270 (".na" . ".ad b") | |
271 (".nf" . ".fi") | |
272 (".de" . ".."))) | |
273 | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
274 (defun nroff-electric-newline (arg) |
93674
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
275 "Insert newline for nroff mode; special if nroff-electric mode. |
44fab469d68d
* outline.el (outline-mode-menu-bar-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
87649
diff
changeset
|
276 In `nroff-electric-mode', if ending a line containing an nroff opening request, |
36 | 277 automatically inserts the matching closing request after point." |
278 (interactive "P") | |
279 (let ((completion (save-excursion | |
280 (beginning-of-line) | |
281 (and (null arg) | |
282 nroff-electric-mode | |
283 (<= (point) (- (point-max) 3)) | |
284 (cdr (assoc (buffer-substring (point) | |
285 (+ 3 (point))) | |
286 nroff-brace-table))))) | |
287 (needs-nl (not (looking-at "[ \t]*$")))) | |
288 (if (null completion) | |
289 (newline (prefix-numeric-value arg)) | |
290 (save-excursion | |
291 (insert "\n\n" completion) | |
292 (if needs-nl (insert "\n"))) | |
293 (forward-char 1)))) | |
294 | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
295 (define-minor-mode nroff-electric-mode |
233 | 296 "Toggle `nroff-electric-newline' minor mode. |
297 `nroff-electric-newline' forces Emacs to check for an nroff request at the | |
298 beginning of the line, and insert the matching closing request if necessary. | |
299 This command toggles that mode (off->on, on->off), with an argument, | |
78482
80e300a489d6
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78225
diff
changeset
|
300 turns it on if arg is positive, otherwise off." |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
301 :lighter " Electric" |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
302 (or (derived-mode-p 'nroff-mode) (error "Must be in nroff mode"))) |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
303 |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
304 ;; Old names that were not namespace clean. |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
305 (define-obsolete-function-alias 'count-text-lines 'nroff-count-text-lines "22.1") |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
306 (define-obsolete-function-alias 'forward-text-line 'nroff-forward-text-line "22.1") |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
307 (define-obsolete-function-alias 'backward-text-line 'nroff-backward-text-line "22.1") |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
308 (define-obsolete-function-alias 'electric-nroff-newline 'nroff-electric-newline "22.1") |
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
309 (define-obsolete-function-alias 'electric-nroff-mode 'nroff-electric-mode "22.1") |
36 | 310 |
18383 | 311 (provide 'nroff-mode) |
312 | |
68660
a747e863fd26
Clean up name space.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68599
diff
changeset
|
313 ;; arch-tag: 6e276340-6c65-4f65-b4e3-0ca431ddfb6c |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
233
diff
changeset
|
314 ;;; nroff-mode.el ends here |