Mercurial > emacs
annotate lisp/textmodes/texinfo.el @ 1717:aa7d6d57504b
* frame.h (struct frame): New fields `can_have_scrollbars' and
`has_vertical_scrollbars'.
(FRAME_CAN_HAVE_SCROLLBARS, FRAME_HAS_VERTICAL_SCROLLBARS): New
accessors, for both the MULTI_FRAME and non-MULTI_FRAME.
(VERTICAL_SCROLLBAR_WIDTH, WINDOW_VERTICAL_SCROLLBAR,
WINDOW_VERTICAL_SCROLLBAR_COLUMN,
WINDOW_VERTICAL_SCROLLBAR_HEIGHT): New macros.
* window.h (struct window): New field `vertical_scrollbar'.
* xterm.h (struct x_display): vertical_scrollbars,
judge_timestamp, vertical_scrollbar_extra: New fields.
(struct scrollbar): New struct.
(VERTICAL_SCROLLBAR_PIXEL_WIDTH, VERTICAL_SCROLLBAR_PIXEL_HEIGHT,
VERTICAL_SCROLLBAR_LEFT_BORDER, VERTICAL_SCROLLBAR_RIGHT_BORDER,
VERTICAL_SCROLLBAR_TOP_BORDER, VERTICAL_SCROLLBAR_BOTTOM_BORDER,
CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_WIDTH,
PIXEL_TO_CHAR_HEIGHT): New accessors and macros.
* frame.c (make_frame): Initialize the `can_have_scrollbars' and
`has_vertical_scrollbars' fields of the frame.
* term.c (term_init): Note that TERMCAP terminals don't support
scrollbars.
(mouse_position_hook): Document new args.
(set_vertical_scrollbar_hook, condemn_scrollbars_hook,
redeem_scrollbar_hook, judge_scrollbars_hook): New hooks.
* termhooks.h: Declare and document them.
(enum scrollbar_part): New type.
(struct input_event): Describe the new form of the scrollbar_click
event type. Change `part' from a Lisp_Object to an enum
scrollbar_part. Add a new field `scrollbar'.
* keyboard.c (kbd_buffer_get_event): Pass appropriate new
parameters to *mouse_position_hook, and make_lispy_movement.
* xfns.c (x_set_vertical_scrollbar): New function.
(x_figure_window_size): Use new macros to calculate frame size.
(Fx_create_frame): Note that X Windows frames do support scroll
bars. Default to "yes".
* xterm.c: #include <X11/cursorfont.h> and "window.h".
(x_vertical_scrollbar_cursor): New variable.
(x_term_init): Initialize it.
(last_mouse_bar, last_mouse_bar_frame, last_mouse_part,
last_mouse_scroll_range_start, last_mouse_scroll_range_end): New
variables.
(XTmouse_position): Use them to return scrollbar movement events.
Take new arguments, for that purpose.
(x_window_to_scrollbar, x_scrollbar_create,
x_scrollbar_set_handle, x_scrollbar_remove, x_scrollbar_move,
XTset_scrollbar, XTcondemn_scrollbars, XTredeem_scrollbar,
XTjudge_scrollbars, x_scrollbar_expose,
x_scrollbar_background_expose, x_scrollbar_handle_click,
x_scrollbar_handle_motion): New functions to implement scrollbars.
(x_term_init): Set the termhooks.h hooks to point to them.
(x_set_window_size): Use new macros to calculate frame size. Set
vertical_scrollbar_extra field.
(x_make_frame_visible): Use the frame accessor
FRAME_HAS_VERTICAL_SCROLLBARS to decide if we need to map the
frame's subwindows as well.
(XTread_socket): Use new size-calculation macros from xterm.h when
processing ConfigureNotify events.
(x_wm_set_size_hint): Use PIXEL_TO_CHAR_WIDTH and
PIXEL_TO_CHAR_HEIGHT macros.
* ymakefile (xdisp.o): This now depends on termhooks.h.
(xterm.o): This now depends on window.h.
| author | Jim Blandy <jimb@redhat.com> |
|---|---|
| date | Thu, 24 Dec 1992 06:17:18 +0000 |
| parents | a52da8d63ff3 |
| children | f79966ac4f9d |
| rev | line source |
|---|---|
|
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
1 ;;;; texinfo.el ---- major mode for editing Texinfo files. |
|
139
8e1e4ca81016
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
128
diff
changeset
|
2 |
|
840
113281b361ec
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
814
diff
changeset
|
3 ;; Copyright (C) 1985, 1988, 1989, 1990 Free Software Foundation, Inc. |
|
113281b361ec
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
814
diff
changeset
|
4 |
|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
5 ;; Author: Bob Chassell <bob@gnu.ai.mit.edu> |
|
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
6 ;; Version: 2.00 |
|
814
38b2499cb3e9
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
7 ;; Keywords: maint, tex, doc, wp |
|
139
8e1e4ca81016
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
128
diff
changeset
|
8 |
| 69 | 9 ;; This file is part of GNU Emacs. |
| 10 | |
| 11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
| 12 ;; 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:
657
diff
changeset
|
13 ;; the Free Software Foundation; either version 2, or (at your option) |
| 69 | 14 ;; any later version. |
| 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 | |
| 22 ;; along with GNU Emacs; see the file COPYING. If not, write to | |
| 23 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
| 24 | |
|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
25 ;;; Code: |
|
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
657
diff
changeset
|
26 |
| 69 | 27 (require 'texnfo-upd) |
| 28 (require 'tex-mode) | |
| 29 (defvar texinfo-mode-syntax-table nil) | |
| 30 | |
| 31 (if texinfo-mode-syntax-table | |
| 32 nil | |
| 33 (setq texinfo-mode-syntax-table (make-syntax-table)) | |
| 34 (modify-syntax-entry ?\" " " texinfo-mode-syntax-table) | |
| 35 (modify-syntax-entry ?\\ " " texinfo-mode-syntax-table) | |
| 36 (modify-syntax-entry ?@ "\\" texinfo-mode-syntax-table) | |
| 37 (modify-syntax-entry ?\^q "\\" texinfo-mode-syntax-table) | |
| 38 (modify-syntax-entry ?\[ "(]" texinfo-mode-syntax-table) | |
| 39 (modify-syntax-entry ?\] ")[" texinfo-mode-syntax-table) | |
| 40 (modify-syntax-entry ?{ "(}" texinfo-mode-syntax-table) | |
| 41 (modify-syntax-entry ?} "){" texinfo-mode-syntax-table) | |
| 42 (modify-syntax-entry ?\' "w" texinfo-mode-syntax-table)) | |
| 43 | |
| 44 (defvar texinfo-mode-map nil) | |
| 45 | |
| 46 ;; Mode documentation displays commands in reverse order | |
| 47 ;; from how they are listed in the texinfo-mode-map. | |
| 48 (if texinfo-mode-map | |
| 49 nil | |
| 50 (setq texinfo-mode-map (make-sparse-keymap)) | |
| 51 | |
|
113
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
52 (define-key texinfo-mode-map "\C-c\C-t\C-k" 'tex-kill-job) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
53 (define-key texinfo-mode-map "\C-c\C-t\C-l" 'tex-recenter-output-buffer) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
54 (define-key texinfo-mode-map "\C-c\C-t\C-q" 'tex-show-print-queue) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
55 (define-key texinfo-mode-map "\C-c\C-t\C-p" 'texinfo-tex-print) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
56 (define-key texinfo-mode-map "\C-c\C-t\C-i" 'texinfo-texindex) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
57 (define-key texinfo-mode-map "\C-c\C-t\C-t" 'texinfo-tex-buffer) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
58 (define-key texinfo-mode-map "\C-c\C-t\C-r" 'texinfo-tex-region) |
| 69 | 59 |
|
113
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
60 (define-key texinfo-mode-map "\C-c\C-i\C-r" 'texinfo-format-region) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
61 (define-key texinfo-mode-map "\C-c\C-i\C-b" 'texinfo-format-buffer) |
| 69 | 62 |
|
113
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
63 (define-key texinfo-mode-map "\C-c\C-u\C-m" 'texinfo-make-menu) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
64 (define-key texinfo-mode-map "\C-c\C-u\C-n" 'texinfo-update-node) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
65 (define-key texinfo-mode-map "\C-c\C-u\C-e" 'texinfo-every-node-update) |
|
9827cb0af717
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
76
diff
changeset
|
66 (define-key texinfo-mode-map "\C-c\C-u\C-a" 'texinfo-all-menus-update) |
| 69 | 67 |
| 68 (define-key texinfo-mode-map "\C-c\C-s" 'texinfo-show-structure) | |
| 69 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
70 (define-key texinfo-mode-map "\"" 'tex-insert-quote) |
| 893 | 71 (define-key texinfo-mode-map "\C-c}" 'up-list) |
| 72 (define-key texinfo-mode-map "\C-c{" 'texinfo-insert-braces) | |
| 69 | 73 |
| 74 (define-key texinfo-mode-map "\C-c\C-cv" 'texinfo-insert-@var) | |
| 75 (define-key texinfo-mode-map "\C-c\C-cs" 'texinfo-insert-@samp) | |
| 76 (define-key texinfo-mode-map "\C-c\C-co" 'texinfo-insert-@noindent) | |
| 77 (define-key texinfo-mode-map "\C-c\C-cn" 'texinfo-insert-@node) | |
| 78 (define-key texinfo-mode-map "\C-c\C-ck" 'texinfo-insert-@kbd) | |
| 79 (define-key texinfo-mode-map "\C-c\C-ci" 'texinfo-insert-@item) | |
| 80 (define-key texinfo-mode-map "\C-c\C-cx" 'texinfo-insert-@example) | |
| 81 (define-key texinfo-mode-map "\C-c\C-ce" 'texinfo-insert-@end-example) | |
| 82 (define-key texinfo-mode-map "\C-c\C-cd" 'texinfo-insert-@dfn) | |
| 83 (define-key texinfo-mode-map "\C-c\C-cc" 'texinfo-insert-@code)) | |
| 84 | |
| 85 (defun texinfo-insert-@var () | |
| 86 "Insert the string @var in a texinfo buffer." | |
| 87 (interactive) | |
| 88 (insert "@var{}") | |
| 89 (backward-char)) | |
| 90 | |
| 91 (defun texinfo-insert-@samp () | |
| 92 "Insert the string @samp in a texinfo buffer." | |
| 93 (interactive) | |
| 94 (insert "@samp{}") | |
| 95 (backward-char)) | |
| 96 | |
| 97 (defun texinfo-insert-@noindent () | |
| 98 "Insert the string @noindent in a texinfo buffer." | |
| 99 (interactive) | |
| 100 (insert "@noindent\n")) | |
| 101 | |
| 102 (defun texinfo-insert-@node () | |
| 103 "Insert the string @node in a texinfo buffer, | |
| 104 along with a comment indicating the arguments to @node." | |
| 105 (interactive) | |
| 106 (insert "@node \n@comment node-name, next, previous, up") | |
| 107 (forward-line -1) | |
| 108 (forward-char 6)) | |
| 109 | |
| 110 (defun texinfo-insert-@kbd () | |
| 111 "Insert the string @kbd in a texinfo buffer." | |
| 112 (interactive) | |
| 113 (insert "@kbd{}") | |
| 114 (backward-char)) | |
| 115 | |
| 116 (defun texinfo-insert-@item () | |
| 117 "Insert the string @item in a texinfo buffer." | |
| 118 (interactive) | |
| 119 (insert "@item") | |
| 120 (newline)) | |
| 121 | |
| 122 (defun texinfo-insert-@example () | |
| 123 "Insert the string @example in a texinfo buffer." | |
| 124 (interactive) | |
| 125 (insert "@example\n")) | |
| 126 | |
| 127 (defun texinfo-insert-@end-example () | |
| 128 "Insert the string @end example in a texinfo buffer." | |
| 129 (interactive) | |
| 130 (insert "@end example\n")) | |
| 131 | |
| 132 (defun texinfo-insert-@dfn () | |
| 133 "Insert the string @dfn in a texinfo buffer." | |
| 134 (interactive) | |
| 135 (insert "@dfn{}") | |
| 136 (backward-char)) | |
| 137 | |
| 138 (defun texinfo-insert-@code () | |
| 139 "Insert the string @code in a texinfo buffer." | |
| 140 (interactive) | |
| 141 (insert "@code{}") | |
| 142 (backward-char)) | |
| 143 | |
| 144 (defun texinfo-insert-braces () | |
| 145 "Make a pair of braces and be poised to type inside of them. | |
| 146 Use \\[up-list] to move forward out of the braces." | |
| 147 (interactive) | |
| 148 (insert "{}") | |
| 149 (backward-char)) | |
| 150 | |
| 258 | 151 ;;;###autoload |
| 69 | 152 (defun texinfo-mode () |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
153 "Major mode for editing Texinfo files. |
| 69 | 154 |
| 155 It has these extra commands: | |
| 156 \\{texinfo-mode-map} | |
| 157 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
158 These are files that are used as input for TeX to make printed manuals |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
159 and also to be turned into Info files by \\[texinfo-format-buffer] or |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
160 `makeinfo'. These files must be written in a very restricted and |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
161 modified version of TeX input format. |
| 69 | 162 |
| 163 Editing commands are like text-mode except that the syntax table is | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
164 set up so expression commands skip Texinfo bracket groups. To see |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
165 what the Info version of a region of the Texinfo file will look like, |
| 69 | 166 use \\[texinfo-format-region]. This command runs Info on the current region |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
167 of the Texinfo file and formats it properly. |
| 69 | 168 |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
169 You can show the structure of a Texinfo file with \\[texinfo-show-structure]. |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
170 This command shows the structure of a Texinfo file by listing the |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
171 lines with the @-sign commands for @chapter, @section, and the like. |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
172 These lines are displayed in another window called the *Occur* window. |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
173 In that window, you can position the cursor over one of the lines and |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
174 use \\[occur-mode-goto-occurrence], to jump to the corresponding spot |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
175 in the Texinfo file. |
| 69 | 176 |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
177 In addition, Texinfo mode provides commands that insert various |
| 69 | 178 frequently used @-sign commands into the buffer. You can use these |
| 179 commands to save keystrokes. And you can insert balanced braces with | |
| 180 \\[texinfo-insert-braces] and later use the command \\[up-list] to | |
| 181 move forward past the closing brace. | |
| 182 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
183 Also, Texinfo mode provides functions for automatically creating or |
| 69 | 184 updating menus and node pointers. These functions |
| 185 | |
| 186 * insert the `Next', `Previous' and `Up' pointers of a node, | |
| 187 * insert or update the menu for a section, and | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
188 * create a master menu for a Texinfo source file. |
| 69 | 189 |
| 190 Here are the functions: | |
| 191 | |
| 192 texinfo-update-node \\[texinfo-update-node] | |
| 193 texinfo-every-node-update \\[texinfo-every-node-update] | |
| 194 texinfo-sequential-node-update | |
| 195 | |
| 196 texinfo-make-menu \\[texinfo-make-menu] | |
| 197 texinfo-all-menus-update \\[texinfo-all-menus-update] | |
| 198 texinfo-master-menu | |
| 199 | |
| 200 texinfo-indent-menu-description (column &optional region-p) | |
| 201 | |
| 202 The `texinfo-column-for-description' variable specifies the column to | |
| 203 which menu descriptions are indented. | |
| 204 | |
| 205 Passed an argument (a prefix argument, if interactive), the | |
| 206 `texinfo-update-node' and `texinfo-make-menu' functions do their jobs | |
| 207 in the region. | |
| 208 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
209 To use the updating commands, you must structure your Texinfo file |
| 69 | 210 hierarchically, such that each `@node' line, with the exception of the |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
211 Top node, is accompanied by some kind of section line, such as an |
| 69 | 212 `@chapter' or `@section' line. |
| 213 | |
| 214 If the file has a `top' node, it must be called `top' or `Top' and | |
| 215 be the first node in the file. | |
| 216 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
217 Entering Texinfo mode calls the value of text-mode-hook, and then the |
| 69 | 218 value of texinfo-mode-hook." |
| 219 (interactive) | |
| 220 (text-mode) | |
|
1188
a6d32838af49
(texinfo-mode): Capitalize the mode name string.
Richard M. Stallman <rms@gnu.org>
parents:
893
diff
changeset
|
221 (setq mode-name "Texinfo") |
| 69 | 222 (setq major-mode 'texinfo-mode) |
| 223 (use-local-map texinfo-mode-map) | |
| 224 (set-syntax-table texinfo-mode-syntax-table) | |
| 225 (make-local-variable 'require-final-newline) | |
| 226 (setq require-final-newline t) | |
| 227 (make-local-variable 'paragraph-separate) | |
| 228 (setq paragraph-separate (concat "^\b\\|^@[a-zA-Z]*[ \n]\\|" paragraph-separate)) | |
| 229 (make-local-variable 'paragraph-start) | |
| 230 (setq paragraph-start (concat "^\b\\|^@[a-zA-Z]*[ \n]\\|" paragraph-start)) | |
| 231 (make-local-variable 'fill-column) | |
| 232 (setq fill-column 72) | |
| 233 (make-local-variable 'comment-start) | |
| 234 (setq comment-start "@c ") | |
| 235 (make-local-variable 'comment-start-skip) | |
| 236 (setq comment-start-skip "@c +") | |
| 237 (make-local-variable 'words-include-escapes) | |
| 238 (setq words-include-escapes t) | |
| 239 (make-local-variable 'tex-start-of-header) | |
| 240 (setq tex-start-of-header "%**start of header") | |
| 241 (make-local-variable 'tex-end-of-header) | |
| 242 (setq tex-end-of-header "%**end of header") | |
| 243 (make-local-variable 'tex-trailer) | |
| 244 (setq tex-trailer "@bye\n") | |
| 245 (run-hooks 'text-mode-hook 'texinfo-mode-hook)) | |
| 246 | |
| 247 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
248 ;;; Texinfo file structure |
| 69 | 249 |
| 250 ; The following is defined in `texnfo-upd.el' | |
| 251 ; (defvar texinfo-section-types-regexp | |
| 252 ; "^@\\(chapter \\|sect\\|sub\\|unnum\\|major\\|heading \\|appendix\\)" | |
| 253 ; "Regexp matching chapter, section, other headings (but not the top node).") | |
| 254 | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
255 (defun texinfo-show-structure (&optional nodes-too) |
| 69 | 256 "Show the structure of a Texinfo file. |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
257 List the lines in the file that begin with the @-sign commands for |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
258 @chapter, @section, and the like. |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
259 |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
260 With optional argument (prefix if interactive), list both the lines |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
261 with @-sign commands for @chapter, @section, and the like, and list |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
262 @node lines. |
| 69 | 263 |
| 264 Lines with structuring commands beginning in them are displayed in | |
| 265 another window called the *Occur* window. In that window, you can | |
| 266 position the cursor over one of the lines and use | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
267 \\[occur-mode-goto-occurrence], |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
268 to jump to the corresponding spot in the Texinfo file." |
| 69 | 269 |
| 270 (interactive "P") | |
| 271 (save-excursion | |
| 272 (goto-char (point-min)) | |
|
76
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
273 (if nodes-too |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
274 (occur (concat "\\(^@node\\)\\|" texinfo-section-types-regexp)) |
|
a983e9bbadc1
*** empty log message ***
Robert J. Chassell <bob@rattlesnake.com>
parents:
69
diff
changeset
|
275 (occur texinfo-section-types-regexp))) |
| 69 | 276 (pop-to-buffer "*Occur*") |
| 277 (goto-char (point-min)) | |
| 278 (flush-lines "-----")) | |
| 279 | |
| 280 | |
| 281 ;;; texinfo mode tex and hardcopy printing commands. | |
| 282 | |
| 283 ;; These commands are for running tex on a region of a texinfo file in | |
| 284 ;; GNU Emacs, or on the whole buffer, and for printing the resulting | |
| 285 ;; .dvi file. The three commands are: | |
| 286 | |
| 287 ; texinfo-tex-region to run tex on the current region. | |
| 288 ; texinfo-tex-buffer to run tex on the current buffer. | |
| 289 ; texinfo-tex-print to print the .dvi file made by tex | |
| 290 | |
| 291 ;;; Other useful functions | |
| 292 | |
| 293 ; These functions are provided by `tex-mode.el' but are bound to keys | |
| 294 ; in texinfo mode. | |
| 295 | |
| 296 ; tex-kill-job to kill the currently running tex job | |
| 297 ; tex-recenter-output-buffer to redisplay tex job output buffer | |
| 298 ; tex-show-print-queue to show the print queue | |
| 299 | |
| 300 ; Various variables are provided by `tex-mode.el' | |
| 301 | |
| 302 ; tex mode variable Default Value | |
| 303 | |
| 304 ; tex-dvi-print-command "lpr -d" | |
| 305 ; tex-directory "/tmp/" | |
| 306 ; tex-show-queue-command "lpq" | |
| 307 ; tex-shell-cd-command "cd" | |
| 308 ; tex-zap-file nil (created as needed) | |
| 309 | |
| 310 | |
| 311 ;;; The tex and print function definitions: | |
| 312 | |
| 313 (defvar texinfo-tex-command "tex" | |
| 314 "*Command used by texinfo-tex-region to run tex on a region.") | |
| 315 | |
| 316 (defvar texinfo-texindex-command "texindex" | |
| 317 "*Command used by texinfo-texindex to sort unsorted index files.") | |
| 318 | |
| 319 (defun texinfo-tex-region (beg end) | |
| 1577 | 320 "Run tex on the current region. |
| 321 A temporary file (`tex-zap-file') is written in directory `tex-directory', and | |
| 322 tex is run in that directory. The first line of the file is copied to the | |
| 323 temporary file; and if the buffer has a header, it is written to the | |
| 324 temporary file before the region itself. The buffer's header is all lines | |
| 325 between the strings defined by `tex-start-of-header' and `tex-end-of-header' | |
| 326 inclusive. The header must start in the first 100 lines. The value of | |
| 327 tex-trailer is appended to the temporary file after the region." | |
| 69 | 328 (interactive "r") |
| 329 (if (get-buffer "*tex-shell*") | |
| 330 (tex-kill-job) | |
| 331 (tex-start-shell)) | |
| 332 (or tex-zap-file (setq tex-zap-file (make-temp-name "#tz"))) | |
| 333 (let ((tex-out-file (concat tex-zap-file ".tex")) | |
| 334 (temp-buffer (get-buffer-create " tex-Output-Buffer")) | |
| 335 (zap-directory | |
| 336 (file-name-as-directory (expand-file-name tex-directory)))) | |
| 337 (save-excursion | |
| 338 (save-restriction | |
| 339 (widen) | |
| 340 (goto-char (point-min)) | |
| 341 (forward-line 100) | |
| 342 (let ((search-end (point)) | |
| 343 (hbeg (point-min)) (hend (point-min)) | |
| 344 (default-directory zap-directory)) | |
| 345 (goto-char (point-min)) | |
| 346 | |
| 347 ;; Copy first line, the `\input texinfo' line, to temp file | |
| 348 (write-region (point) | |
| 349 (save-excursion (end-of-line) (point)) | |
| 350 tex-out-file nil nil) | |
| 351 | |
| 352 ;; Don't copy first line twice if region includes it. | |
| 353 (forward-line 1) | |
| 354 (if (< beg (point)) (setq beg (point))) | |
| 355 | |
| 356 ;; Initialize the temp file with either the header or nothing | |
| 357 (if (search-forward tex-start-of-header search-end t) | |
| 358 (progn | |
| 359 (beginning-of-line) | |
| 360 (setq hbeg (point)) ; Mark beginning of header. | |
| 361 (if (search-forward tex-end-of-header nil t) | |
| 362 (progn (beginning-of-line) | |
| 363 (setq hend (point))) ; Mark end of header. | |
| 364 (setq hbeg (point-min))))) ; Else no header. | |
| 365 | |
| 366 ;; Copy header to temp file. | |
| 367 (write-region (min hbeg beg) hend tex-out-file t nil) | |
| 368 | |
| 369 ;; Copy region to temp file. | |
| 370 (write-region (max beg hend) end tex-out-file t nil)) | |
| 371 | |
| 372 ;; This is a kludge to insert the tex-trailer into the tex-out-file. | |
| 373 ;; We have to create a special buffer in which to insert | |
| 374 ;; the tex-trailer first because there is no function with | |
| 375 ;; which to append a literal string directly to a file. | |
| 376 (let ((local-tex-trailer tex-trailer)) | |
| 377 (set-buffer temp-buffer) | |
| 378 (erase-buffer) | |
| 379 ;; make sure trailer isn't hidden by a comment | |
| 380 (insert-string "\n") | |
| 381 (if local-tex-trailer (insert-string local-tex-trailer)) | |
| 382 (set-buffer-directory temp-buffer zap-directory) | |
| 383 (write-region (point-min) (point-max) tex-out-file t nil)))) | |
| 384 | |
| 385 (set-buffer-directory "*tex-shell*" zap-directory) | |
| 386 (send-string "tex-shell" (concat tex-shell-cd-command " " | |
| 387 zap-directory "\n")) | |
| 388 (send-string "tex-shell" (concat texinfo-tex-command " " | |
| 389 tex-out-file "\n"))) | |
| 390 (tex-recenter-output-buffer 0)) | |
| 391 | |
| 392 (defun texinfo-tex-buffer () | |
| 393 "Run tex on current buffer. | |
| 394 See \\[texinfo-tex-region] for more information." | |
| 395 (interactive) | |
| 396 (texinfo-tex-region (point-min) (point-max))) | |
| 397 | |
| 398 (defun texinfo-texindex () | |
| 399 "Run texindex on unsorted index files. | |
| 400 The index files are made by \\[texinfo-tex-region] or \\[texinfo-tex-buffer]. | |
| 1577 | 401 Runs the shell command defined by `texinfo-texindex-command'." |
| 69 | 402 (interactive) |
| 403 (send-string "tex-shell" | |
| 404 (concat texinfo-texindex-command | |
| 405 " " tex-zap-file ".??" "\n")) | |
| 406 (tex-recenter-output-buffer nil)) | |
| 407 | |
| 408 (defun texinfo-tex-print () | |
| 409 "Print .dvi file made by \\[texinfo-tex-region] or \\[texinfo-tex-buffer]. | |
| 1577 | 410 Runs the shell command defined by `tex-dvi-print-command'." |
| 69 | 411 (interactive) |
| 412 (send-string "tex-shell" | |
| 413 (concat tex-dvi-print-command | |
| 414 " " tex-zap-file ".dvi" "\n")) | |
| 415 (tex-recenter-output-buffer nil)) | |
| 416 | |
| 584 | 417 (provide 'texinfo) |
| 418 | |
|
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
419 ;;; texinfo.el ends here |
