|
|
1.1 root 1: .NH 1
2: Directory Handling
3: .XS \n(PN
4: \*(SN Directory Handling
5: .XE
6: .LP
7: To save having to use absolute pathnames when you want to edit a nearby file
8: \s-2JOVE\s0 allows you to move around the
9: .UX
10: filesystem just as the c-shell does.
11: These commands are:
12: .IP "cd dir" 15n
13: Change to the specified directory.
14: .IP "pushd [dir]"
15: Like \fIcd\fP, but save the old directory on the directory stack.
16: With no directory argument, simply exchange the top two directories
17: on the stack and \fIcd\fP to the new top.
18: .IP "popd"
19: Take the current directory off the stack and \fIcd\fP to the directory now
20: at the top.
21: .IP "dirs"
22: Display the contents of the directory stack.
23: .LP
24: The names and behavior of these commands were chosen to mimic those in the c-shell.
25: .NH 1
26: Editing C Programs
27: .XS \n(PN
28: \*(SN Editing C Programs
29: .XE
30: .LP
31: This section details the support provided by \s-2JOVE\s0
32: for working on C programs.
33: .NH 2
34: Indentation Commands
35: .XS \n(PN 5n
36: \*(SN Indentation Commands
37: .XE
38: .LP
39: To save having to lay out C programs "by hand", \s-2JOVE\s0
40: has an idea of the correct indentation of a line,
41: based on the surrounding context.
42: When you are in C Mode, \s-2JOVE\s0 treats tabs specially \(em
43: typing a tab at the beginning of a new line means "indent to
44: the right place".
45: Closing braces are also handled specially, and are indented
46: to match the corresponding open brace.
47: .NH 2
48: Parenthesis and Brace Matching
49: .XS \n(PN 5n
50: \*(SN Parenthesis and Brace Matching
51: .XE
52: .LP
53: To check that parentheses and braces match the way you think they do,
54: turn on \fIShow Match\fP mode (ESC X show-match-mode). Then, whenever
55: you type a close brace or parenthesis, the cursor moves momentarily to
56: the matching opener, if it's currently visible. If it's not visible,
57: \s-2JOVE\s0 displays the line containing the matching opener on the message
58: line.
59: .NH 2
60: C Tags
61: .XS \n(PN 5n
62: \*(SN C Tags
63: .XE
64: .LP
65: Often when you are editing a C program,
66: especially someone else's code,
67: you see a function call and wonder what that function does.
68: You then search for the function within the current file and if you're
69: lucky find
70: the definition, finally returning to the original spot when you are done.
71: However, if are unlucky, the function turns out to be external
72: (defined in another file) and
73: you have to suspend the edit,
74: \fIgrep\fP for the function name in every .c that might contain it,
75: and finally visit the appropriate file.
76: .LP
77: To avoid this diversion or the need to remember which
78: function is defined in which file,
79: Berkeley
80: .UX
81: has a program called \fIctags(1)\fP, which
82: takes a set of source files and looks for function
83: definitions, producing a file called \fItags\fP as its output.
84: .LP
85: \s-2JOVE\s0 has a command called C-X T (\fIfind-tag\fP)
86: that prompts you for the name of a function (a \fItag\fP), looks up
87: the tag reference in the previously constructed tags file,
88: then visits the file containing that tag in a new buffer,
89: with point positioned at the definition of the function.
90: There is another version of this command, namely \fIfind-tag-at-point\fP,
91: that uses the identifier at
92: .I point.
93: .LP
94: So, when you've added new functions to a module, or moved some old
95: ones around, run the \fIctags\fP program to regenerate the \fItags\fP file.
96: \s-2JOVE\s0 looks in the file specified in the \fItag-file\fP variable. The
97: default is "./tags", that is, the tag file in the current directory. If you
98: wish to use an alternate tag file, you use C-U\ C-X\ T, and \s-2JOVE\s0 will
99: prompt for a file name. If you find yourself specifying the same file again
100: and again, you can set \fItag-file\fP to that file, and run
101: \fIfind-tag\fP with no numeric argument.
102: .LP
103: To begin an editing session looking for a particular tag, use
104: the \fI\-t tag\fP command line option to \s-2JOVE\s0.
105: For example, say you wanted to look at the file containing the tag
106: \fISkipChar\fP, you would invoke \s-2JOVE\s0 as:
107: .DS I
108: .I
109: % jove \-t SkipChar
110: .R
111: .DE
112: .NH 2
113: Compiling Your Program
114: .XS \n(PN 5n
115: \*(SN Compiling Your Program
116: .XE
117: .LP
118: You've typed in a program or altered an existing one and now you
119: want to run it through the compiler to check for errors.
120: To save having to suspend the edit,
121: run the compiler,
122: scribble down error messages, and then resume the edit,
123: \s-2JOVE\s0 allows you to compile your code while in the editor.
124: This is done with the C-X C-E (\fIcompile-it\fP) command.
125: If you run \fIcompile-it\fP with no argument
126: it runs the
127: .UX
128: \fImake\fP
129: program into a buffer;
130: If you need a special command or want to pass arguments to \fImake\fP,
131: run \fIcompile-it\fP with any argument (C-U is good enough) and you
132: will be prompted for the command to execute.
133: .LP
134: If any error messages are produced, they are treated specially by \s-2JOVE\s0.
135: That treatment is the subject of the next section.
136: .NH 2
137: Error Message Parsing and Spelling Checking
138: .XS \n(PN
139: \*(SN Error Message Parsing
140: \*(SN Spelling Checking
141: .XE
142: .LP
143: \s-2JOVE\s0 knows how to interpret the error messages from many
144: .UX
145: commands;
146: In particular,
147: the messages from \fIcc\fP,
148: \fIgrep\fP and \fIlint\fP can be understood.
149: After running the \fIcompile-it\fP command,
150: the \fIparse-errors\fP command is automatically executed,
151: and any errors found are displayed in a new buffer.
152: The files whose names are found in parsing the error messages are each
153: brought into \s-2JOVE\s0 buffers and the point is positioned at the first error
154: in the first file.
155: The commands \fIcurrent-error\fP, C-X C-N (\fInext-error\fP), and
156: C-X C-P (\fIprevious-error\fP)
157: can be used to traverse the list of errors.
158: .LP
159: If you already have a file called
160: \fIerrs\fP containing, say, c compiler messages then you can get \s-2JOVE\s0 to interpret the messages by
161: invoking it as:
162: .DS I
163: .I
164: % jove \-p errs
165: .R
166: .DE
167: .LP
168: \s-2JOVE\s0 has a special mechanism for checking the the spelling of a document;
169: It runs the
170: .UX
171: spell program into a buffer.
172: You then delete from this buffer all those words that are not spelling
173: errors and then \s-2JOVE\s0 runs the \fIparse-spelling-errors\fP command to
174: yield a list of errors just as in the last section.
175: .NH 1
176: Simple Customization
177: .XS \n(PN
178: \*(SN Simple Customization
179: .XE
180: .LP
181: .NH 2
182: Major Modes
183: .XS \n(PN 5n
184: \*(SN Major Modes
185: .XE
186: .LP
187: To help with editing particular types of file, say a paper or a C program,
188: \s-2JOVE\s0 has several \fImajor modes\fP.
189: These are as follows:
190: .NH 3
191: Text mode
192: .XS \n(PN 10n
193: \*(SN Text mode
194: .XE
195: .LP
196: This is the default major mode. Nothing special is done.
197: .NH 3
198: C mode
199: .XS \n(PN 10n
200: \*(SN C mode
201: .XE
202: .LP
203: This mode affects the behavior of the tab and parentheses characters.
204: Instead of just inserting the tab, \s-2JOVE\s0 determines
205: where the text "ought" to line up for the C language and tabs to that position
206: instead. The same thing happens with the close brace and close parenthesis;
207: they are tabbed to the "right" place and then inserted.
208: Using the \fIauto-execute-command\fP command, you can make \s-2JOVE\s0 enter
209: \fIC Mode\fP whenever you edit a file whose name ends in \fI.c\fP.
210: .NH 3
211: Lisp mode
212: .XS \n(PN 10n
213: \*(SN Lisp mode
214: .XE
215: .LP
216: This mode is analogous to \fIC Mode\fP,
217: but performs the indentation needed to lay out Lisp programs properly.
218: Note also the \fIgrind-s-expr\fP command that prettyprints an
219: \fIs-expression\fP and the \fIkill-mode-expression\fP command.
220: .NH 2
221: Minor Modes
222: .XS \n(PN 5n
223: \*(SN Minor Modes
224: .XE
225: .LP
226: In addition to the major modes,
227: \s-2JOVE\s0 has a set of minor modes.
228: These are as follows:
229: .NH 3
230: Auto Indent
231: .XS \n(PN 10n
232: \*(SN Auto Indent
233: .XE
234: .LP
235: In this mode,
236: \s-2JOVE\s0 indents each line the same way as that above it. That is,
237: the Return key in this mode acts as the Linefeed key ordinarily does.
238: .NH 3
239: Show Match
240: .XS \n(PN 10n
241: \*(SN Show Match
242: .XE
243: .LP
244: Move the cursor momentarily to the matching opening parenthesis when a closing
245: parenthesis is typed.
246: .NH 3
247: Auto Fill
248: .XS \n(PN 10n
249: \*(SN Auto Fill
250: .XE
251: .LP
252: In \fIAuto Fill\fP mode,
253: a newline is automatically inserted when the line length
254: exceeds the right margin.
255: This way,
256: you can type a whole paper without having to use the Return key.
257: .NH 3
258: Over Write
259: .XS \n(PN 10n
260: \*(SN Over Write
261: .XE
262: .LP
263: In this mode,
264: any text typed in will replace the previous contents.
265: (The default is for new text to be inserted and "push" the old along.)
266: This is useful for editing an already-formatted diagram in which you
267: want to change some things without moving other things around on the
268: screen.
269: .NH 3
270: Word Abbrev
271: .XS \n(PN 10n
272: \*(SN Word Abbrev
273: .XE
274: .LP
275: In this mode, every word you type is compared to a list of word
276: abbreviations; whenever you type an abbreviation, it is replaced
277: by the text that it abbreviates.
278: This can save typing if a particular word or phrase must be entered
279: many times.
280: The abbreviations and their expansions are held in a file that looks like:
281: .DS I
282: abbrev:phrase
283: .DE
284: This file can be set up in your \fI~/.\|joverc\fP with the \fIread-word-abbrev-file\fP command.
285: Then, whenever you are editing a buffer in \fIWord Abbrev\fP mode,
286: \s-2JOVE\s0 checks for the abbreviations you've given.
287: See also the commands
288: \fIread-word-abbrev-file\fP,
289: \fIwrite-word-abbrev-file\fP,
290: \fIedit-word-abbrevs\fP,
291: \fIdefine-global-word-abbrev\fP,
292: \fIdefine-mode-word-abbrev\fP,
293: and \fIbind-macro-to-word-abbrev\fP,
294: and the variable \fIauto-case-abbrev\fP.
295: .NH 2
296: Variables
297: .XS \n(PN 5n
298: \*(SN Variables
299: .XE
300: .LP
301: \s-2JOVE\s0 can be tailored to suit your needs by changing the
302: values of variables.
303: A \s-2JOVE\s0 variable can be given a value with the \fIset\fP command,
304: and its value displayed with the \fIprint\fP command.
305: .LP
306: The variables \s-2JOVE\s0 understands are listed along with the commands
307: in the alphabetical list at the end of this document.
308: .NH 2
309: Key Re-binding
310: .XS \n(PN 5n
311: \*(SN Key Re-binding
312: .XE
313: .LP
314: Many of the commands built into \s-2JOVE\s0 are not bound to
315: specific keys.
316: The command handler in
317: \s-2JOVE\s0 is used to invoke these commands and is activated
318: by the \fIexecute-extended-command\fP command (ESC X).
319: When the name of a command typed in is unambiguous,
320: that command will be executed.
321: Since it is very slow to have
322: to type in the name of each command every time it is needed,
323: \s-2JOVE\s0 makes it possible to \fIbind\fP commands to keys.
324: When a command is
325: \fIbound\fP to a key any future hits on that key will invoke that command.
326: All the printing characters are initially bound to the
327: command \fIself-insert\fP.
328: Thus, typing any printing character causes it to be inserted into the text.
329: Any of the existing commands can be bound to any key.
330: (A \fIkey\fP may actually be a \fIcontrol character\fP
331: or an \fIescape sequence\fP as explained previously under
332: \fICommand Input Conventions\fP).
333: .LP
334: Since there are more commands than there are keys,
335: two keys are treated as \fIprefix\fP commands.
336: When a key bound to one of the prefix commands is typed,
337: the next character
338: typed is interpreted on the basis that it was preceded by one of the
339: prefix keys.
340: Initially ^X and ESC are the prefix keys and
341: many of the built in commands are initially bound to these "two stroke" keys.
342: (For historical reasons, the Escape key is often referred to as "Meta").
343: .NH 2
344: Keyboard Macros
345: .XS \n(PN 5n
346: \*(SN Keyboard Macros
347: .XE
348: .LP
349: Although \s-2JOVE\s0 has many powerful commands,
350: you often find that you have a task that no individual command can do.
351: \s-2JOVE\s0 allows you to define your own commands from sequences
352: of existing ones "by example";
353: Such a sequence is termed a \fImacro\fP.
354: The procedure is as follows:
355: First you type the \fIstart-remembering\fP command,
356: usually bound to C-X (.
357: Next you "perform" the commands which as they are being executed are
358: also
359: remembered, which will constitute the body of the macro.
360: Then you give the \fIstop-remembering\fP command, usually bound to
361: C-X ).
362: You now have a \fIkeyboard macro\fP.
363: To run this command sequence again,
364: use the command \fIexecute-keyboard-macro\fP, usually bound to
365: C-X E.
366: You may find this bothersome to type and re-type,
367: so there is a way to bind the macro to a key.
368: First,
369: you must give the keyboard macro a name using the
370: \fIname-keyboard-macro\fP command.
371: Then the binding is made with the \fIbind-macro-to-key\fP command.
372: We're still not finished because all this hard work will be lost
373: if you leave \s-2JOVE\s0.
374: What you do is to save your macros into a file
375: with the \fIwrite-macros-to-file\fP command.
376: To retrieve your macros in the next editing session (but not their bindings),
377: you can simply execute the \fIsource\fP command on that file.
378: .NH 2
379: Initialization Files
380: .XS \n(PN 5n
381: \*(SN Initialization Files
382: .XE
383: .LP
384: Users will likely want to modify the default key bindings to their liking.
385: Since it would be quite annoying to have to set up the bindings
386: each time \s-2JOVE\s0 is started up,
387: \s-2JOVE\s0 has the ability to read in a "startup" file.
388: Whenever \s-2JOVE\s0 is started,
389: it reads commands from the file \fI.\|joverc\fP in the user's home directory.
390: These commands are read as
391: if they were typed to the command handler (ESC X) during an edit.
392: There can be only one command per line in the startup file.
393: If there is a file \fI/usr/lib/jove/joverc\fP,
394: then this file will be read before the user's
395: .I .\|joverc
396: file.
397: This can be used to set up a system-wide default startup mode for
398: \s-2JOVE\s0
399: that is tailored to the needs of that system.
400: .LP
401: The \fIsource\fP command can be used to read commands from a specified file
402: at any time during an editing session,
403: even from inside the \fI.\|joverc\fP file.
404: This means that a macro can be used to change the key bindings,
405: e.g., to enter a mode,
406: by reading from a specified file which contains all the necessary bindings.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.