annotate lisp/textmodes/nroff-mode.el @ 26059:2a7f35e0072b

(Fminibuffer_complete_and_exit): Supply value for new ESCAPE_FROM_EDGE parameter to Ffield_beginning. (Fminibuffer_complete_word): Use Ffield_beginning to find the prompt end. (Fminibuffer_complete_and_exit): Test for an empty input string by seeing where the field begins, instead of looking at text-properties. (read_minibuf): Don't save minibuffer prompt length on minibuf_save_list. Don't initialize minibuffer prompt length. Wrap prompt text-properties around the entire prompt. Add 'prompt text-property to prompt. Get final value with Ffield_string instead of make_buffer_string. (read_minibuf_unwind): Don't restore minibuffer prompt length from minibuf_save_list. (do_completion): Get minibuffer input with Ffield_string instead of Fbuffer_string. Erase minibuffer input with Ferase_field instead of erase_buffer. (Fminibuffer_complete_and_exit): Likewise. Test whether buffer is empty by looking for the 'prompt text property at the end. Set prompt length by looking for the end of the prompt text property, and save prompt length for later use (since there is no longer a buffer variable to get it from). (Fminibuffer_prompt_width, Fminibuffer_prompt_end): Functions removed. (syms_of_minibuf): Remove initializations of Sminibuffer_prompt_width and Sminibuffer_prompt_end.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 17 Oct 1999 12:55:49 +0000
parents 5aeeb9b32ee4
children 3fb24c8e721b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
12595
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
3 ;; Copyright (C) 1985, 1986, 1994, 1995 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
789
71d052f72ac1 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
5 ;; Maintainer: FSF
814
38b2499cb3e9 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
6 ;; Keywords: wp
789
71d052f72ac1 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
7
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 789
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 ;; any later version.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12595
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12595
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12595
diff changeset
23 ;; Boston, MA 02111-1307, USA.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24
2308
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
25 ;;; Commentary:
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
26
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
27 ;; 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
28 ;; 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
29 ;; 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
30 ;; 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
31 ;; 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
32
12595
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
33 ;; 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
34 ;; as they should.
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
35
789
71d052f72ac1 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
36 ;;; Code:
71d052f72ac1 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
37
19475
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
38 (defgroup nroff nil
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
39 "Nroff mode."
20082
5aeeb9b32ee4 (nroff): Moved from `editing' to `wp'.
Karl Heuer <kwzh@gnu.org>
parents: 19475
diff changeset
40 :group 'wp
19475
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
41 :prefix "nroff-")
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
42
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43 (defvar nroff-mode-abbrev-table nil
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 "Abbrev table used while in nroff mode.")
6488
c6cb2f4a7ae8 (nroff-mode-abbrev-table): Call define-abbrev-table.
Karl Heuer <kwzh@gnu.org>
parents: 6273
diff changeset
45 (define-abbrev-table 'nroff-mode-abbrev-table ())
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46
19475
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
47 (defcustom nroff-electric-mode nil
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
48 "*Non-nil means automatically closing requests when you insert an open."
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
49 :group 'nroff
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
50 :type 'boolean)
18425
847ee3e08152 (nroff-electric-mode): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
51
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52 (defvar nroff-mode-map nil
233
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
53 "Major mode keymap for nroff mode.")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 (if (not nroff-mode-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
56 (setq nroff-mode-map (make-sparse-keymap))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57 (define-key nroff-mode-map "\t" 'tab-to-tab-stop)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 (define-key nroff-mode-map "\es" 'center-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 (define-key nroff-mode-map "\e?" 'count-text-lines)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60 (define-key nroff-mode-map "\n" 'electric-nroff-newline)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61 (define-key nroff-mode-map "\en" 'forward-text-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 (define-key nroff-mode-map "\ep" 'backward-text-line)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63
12595
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
64 (defvar nroff-mode-syntax-table nil
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
65 "Syntax table used while in nroff mode.")
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
66
19475
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
67 (defcustom nroff-font-lock-keywords
12595
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
68 (list
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
69 ;; 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
70 ;; 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
71 ;; 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
72 ;; fontified as well.
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
73 "^[.']\\s-*\\sw+"
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
74 ;; 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
75 ;; like \-, \(em (standard troff) and \f[bar] (groff
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
76 ;; 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
77 ;; 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
78 ;; arguments in common cases, like \f.
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
79 (concat "\\\\" ; backslash
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
80 "\\(" ; followed by various possibilities
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
81 (mapconcat 'identity
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
82 '("[f*n]*\\[.+]" ; some groff extensions
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
83 "(.." ; two chars after (
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
84 "[^(\"]" ; single char escape
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
85 ) "\\|")
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
86 "\\)")
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
87 )
19475
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
88 "Font-lock highlighting control in nroff-mode."
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
89 :group 'nroff
c8c9212a86a7 Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18425
diff changeset
90 :type '(repeat regexp))
12595
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
91
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 233
diff changeset
92 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
93 (defun nroff-mode ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
94 "Major mode for editing text intended for nroff to format.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95 \\{nroff-mode-map}
233
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
96 Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'.
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
97 Also, try `nroff-electric-mode', for automatically inserting
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98 closing requests for requests that are used in matched pairs."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
100 (kill-all-local-variables)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101 (use-local-map nroff-mode-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102 (setq mode-name "Nroff")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 (setq major-mode 'nroff-mode)
12595
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
104 (if nroff-mode-syntax-table
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
105 ()
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
106 (setq nroff-mode-syntax-table (copy-syntax-table text-mode-syntax-table))
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
107 ;; " isn't given string quote syntax in text-mode but it
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
108 ;; (arguably) should be for use round nroff arguments (with ` and
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
109 ;; ' used otherwise).
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
110 (modify-syntax-entry ?\" "\" 2" nroff-mode-syntax-table)
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
111 ;; Comments are delimited by \" and newline.
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
112 (modify-syntax-entry ?\\ "\\ 1" nroff-mode-syntax-table)
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
113 (modify-syntax-entry ?\n "> 1" nroff-mode-syntax-table))
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
114 (set-syntax-table nroff-mode-syntax-table)
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
115 (make-local-variable 'font-lock-defaults)
cf258211ea5b (font-lock-defaults): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10886
diff changeset
116 (setq font-lock-defaults '(nroff-font-lock-keywords nil t))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117 (setq local-abbrev-table nroff-mode-abbrev-table)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 (make-local-variable 'nroff-electric-mode)
3143
40f18bdaf972 (nroff-mode): Don't leave nroff-electric-mode void.
Richard M. Stallman <rms@gnu.org>
parents: 2308
diff changeset
119 (setq nroff-electric-mode nil)
6075
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
120 (make-local-variable 'outline-regexp)
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
121 (setq outline-regexp "\\.H[ ]+[1-7]+ ")
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
122 (make-local-variable 'outline-level)
6273
e645df5b5148 (nroff-mode): Deleted garbage character.
Karl Heuer <kwzh@gnu.org>
parents: 6075
diff changeset
123 (setq outline-level 'nroff-outline-level)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124 ;; now define a bunch of variables for use by commands in this mode
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 (make-local-variable 'page-delimiter)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 (setq page-delimiter "^\\.\\(bp\\|SK\\|OP\\)")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 (make-local-variable 'paragraph-start)
10886
7872c31968be (nroff-mode): Remove ^ from paragraph-start & paragraph-separate.
Boris Goldowsky <boris@gnu.org>
parents: 7300
diff changeset
128 (setq paragraph-start (concat "[.']\\|" paragraph-start))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129 (make-local-variable 'paragraph-separate)
10886
7872c31968be (nroff-mode): Remove ^ from paragraph-start & paragraph-separate.
Boris Goldowsky <boris@gnu.org>
parents: 7300
diff changeset
130 (setq paragraph-separate (concat "[.']\\|" paragraph-separate))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131 ;; comment syntax added by mit-erl!gildea 18 Apr 86
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132 (make-local-variable 'comment-start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133 (setq comment-start "\\\" ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134 (make-local-variable 'comment-start-skip)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 (setq comment-start-skip "\\\\\"[ \t]*")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 (make-local-variable 'comment-column)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 (setq comment-column 24)
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
138 (make-local-variable 'comment-indent-function)
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
139 (setq comment-indent-function 'nroff-comment-indent)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 (run-hooks 'text-mode-hook 'nroff-mode-hook))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141
6075
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
142 (defun nroff-outline-level ()
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
143 (save-excursion
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
144 (looking-at outline-regexp)
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
145 (skip-chars-forward ".H ")
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
146 (string-to-int (buffer-substring (point) (+ 1 (point))))))
b23452652292 (nroff-mode): Set outline-regexp and outline-level.
Richard M. Stallman <rms@gnu.org>
parents: 3143
diff changeset
147
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 ;;; Compute how much to indent a comment in nroff/troff source.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149 ;;; By mit-erl!gildea April 86
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 (defun nroff-comment-indent ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 "Compute indent for an nroff/troff comment.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 Puts a full-stop before comments on a line by themselves."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153 (let ((pt (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 (unwind-protect
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 (skip-chars-backward " \t")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
157 (if (bolp)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
159 (setq pt (1+ pt))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160 (insert ?.)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162 (if (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163 (backward-char 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 (looking-at "^[.']"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165 1
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166 (max comment-column
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167 (* 8 (/ (+ (current-column)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 9) 8)))))) ; add 9 to ensure at least two blanks
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
169 (goto-char pt))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
170
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 (defun count-text-lines (start end &optional print)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 "Count lines in region, except for nroff request lines.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
173 All lines not starting with a period are counted up.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 Interactively, print result in echo area.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175 Noninteractively, return number of non-request lines from START to END."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
176 (interactive "r\np")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177 (if print
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178 (message "Region has %d text lines" (count-text-lines start end))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 (save-restriction
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 (narrow-to-region start end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 (goto-char (point-min))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 (- (buffer-size) (forward-text-line (buffer-size)))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 (defun forward-text-line (&optional cnt)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 "Go forward one nroff text line, skipping lines of nroff requests.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 An argument is a repeat count; if negative, move backward."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 (if (not cnt) (setq cnt 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 (while (and (> cnt 0) (not (eobp)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192 (while (and (not (eobp)) (looking-at "[.']."))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 (forward-line 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 (setq cnt (- cnt 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195 (while (and (< cnt 0) (not (bobp)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 (forward-line -1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 (while (and (not (bobp))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198 (looking-at "[.']."))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 (forward-line -1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 (setq cnt (+ cnt 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201 cnt)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 (defun backward-text-line (&optional cnt)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204 "Go backward one nroff text line, skipping lines of nroff requests.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 An argument is a repeat count; negative means move forward."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
206 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
207 (forward-text-line (- cnt)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
208
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
209 (defconst nroff-brace-table
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
210 '((".(b" . ".)b")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211 (".(l" . ".)l")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 (".(q" . ".)q")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 (".(c" . ".)c")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 (".(x" . ".)x")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 (".(z" . ".)z")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216 (".(d" . ".)d")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 (".(f" . ".)f")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218 (".LG" . ".NL")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 (".SM" . ".NL")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 (".LD" . ".DE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 (".CD" . ".DE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 (".BD" . ".DE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 (".DS" . ".DE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 (".DF" . ".DE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
225 (".FS" . ".FE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226 (".KS" . ".KE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 (".KF" . ".KE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
228 (".LB" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229 (".AL" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 (".BL" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
231 (".DL" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232 (".ML" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
233 (".RL" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 (".VL" . ".LE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
235 (".RS" . ".RE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
236 (".TS" . ".TE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237 (".EQ" . ".EN")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238 (".PS" . ".PE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239 (".BS" . ".BE")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240 (".G1" . ".G2") ; grap
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241 (".na" . ".ad b")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
242 (".nf" . ".fi")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
243 (".de" . "..")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 (defun electric-nroff-newline (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246 "Insert newline for nroff mode; special if electric-nroff mode.
233
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
247 In `electric-nroff-mode', if ending a line containing an nroff opening request,
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
248 automatically inserts the matching closing request after point."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250 (let ((completion (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
251 (beginning-of-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
252 (and (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253 nroff-electric-mode
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
254 (<= (point) (- (point-max) 3))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
255 (cdr (assoc (buffer-substring (point)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
256 (+ 3 (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257 nroff-brace-table)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258 (needs-nl (not (looking-at "[ \t]*$"))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
259 (if (null completion)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 (newline (prefix-numeric-value arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
262 (insert "\n\n" completion)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263 (if needs-nl (insert "\n")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
264 (forward-char 1))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
265
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
266 (defun electric-nroff-mode (&optional arg)
233
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
267 "Toggle `nroff-electric-newline' minor mode.
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
268 `nroff-electric-newline' forces Emacs to check for an nroff request at the
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
269 beginning of the line, and insert the matching closing request if necessary.
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
270 This command toggles that mode (off->on, on->off), with an argument,
3f28d7f1c174 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 36
diff changeset
271 turns it on iff arg is positive, otherwise off."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
272 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 (or (eq major-mode 'nroff-mode) (error "Must be in nroff mode"))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
274 (or (assq 'nroff-electric-mode minor-mode-alist)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
275 (setq minor-mode-alist (append minor-mode-alist
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
276 (list '(nroff-electric-mode
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
277 " Electric")))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
278 (setq nroff-electric-mode
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
279 (cond ((null arg) (null nroff-electric-mode))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
280 (t (> (prefix-numeric-value arg) 0)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
281
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
282 (provide 'nroff-mode)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
283
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 233
diff changeset
284 ;;; nroff-mode.el ends here