commit 43701a84367b76ccc93ad46f89110486988eec10 (HEAD, refs/remotes/origin/master) Author: Eli Zaretskii Date: Thu May 13 19:58:30 2021 +0300 ; * doc/misc/calc.texi (Date Arithmetic): Fix order in @menu. diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index 5af546f762..e11267e7a2 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -16890,8 +16890,8 @@ additional argument from the top of the stack. @menu * Date Conversions:: * Date Functions:: -* Time Zones:: * Business Days:: +* Time Zones:: @end menu @node Date Conversions commit 5cfb9a507d9d186364da31fe605e0f6071296bb8 Author: Glenn Morris Date: Thu May 13 09:26:47 2021 -0700 * doc/misc/calc.texi: Remove most hand-written node pointers. The complex, conditional node layout makes this one of the very few cases that can't be done entirely automatically. diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index b409c1f9c4..5af546f762 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -588,7 +588,7 @@ there are Quick mode, Keypad mode, and Embedded mode. * Other C-x * Commands:: @end menu -@node Starting Calc, The Standard Interface, Using Calc, Using Calc +@node Starting Calc @subsection Starting Calc @noindent @@ -619,7 +619,7 @@ type the full command (like @kbd{calc-keypad}) and press Return. The same commands (like @kbd{C-x * c} or @kbd{C-x * *}) that start the Calculator also turn it off if it is already on. -@node The Standard Interface, Quick Mode Overview, Starting Calc, Using Calc +@node The Standard Interface @subsection The Standard Calc Interface @noindent @@ -713,7 +713,7 @@ switch you to the Calc Trail window. So @kbd{C-x * o} is a handy way to switch out of Calc momentarily to edit your file; you can then type @kbd{C-x * c} to switch back into Calc when you are done. -@node Quick Mode Overview, Keypad Mode Overview, The Standard Interface, Using Calc +@node Quick Mode Overview @subsection Quick Mode (Overview) @noindent @@ -736,7 +736,7 @@ go into regular Calc (with @kbd{C-x * c}) to change the mode settings. @c [fix-ref Quick Calculator mode] @xref{Quick Calculator}, for further information. -@node Keypad Mode Overview, Standalone Operation, Quick Mode Overview, Using Calc +@node Keypad Mode Overview @subsection Keypad Mode (Overview) @noindent @@ -814,7 +814,7 @@ left, the stack in the lower right, and the trail on top. @c [fix-ref Keypad Mode] @xref{Keypad Mode}, for further information. -@node Standalone Operation, Embedded Mode Overview, Keypad Mode Overview, Using Calc +@node Standalone Operation @subsection Standalone Operation @noindent @@ -841,7 +841,7 @@ In standalone operation, quitting the Calculator (by pressing @kbd{q} or clicking on the keypad @key{EXIT} button) quits Emacs itself. -@node Embedded Mode Overview, Other C-x * Commands, Standalone Operation, Using Calc +@node Embedded Mode Overview @subsection Embedded Mode (Overview) @noindent @@ -972,7 +972,7 @@ A slope of one-third corresponds to an angle of 18.4349488229 degrees. @c [fix-ref Embedded Mode] @xref{Embedded Mode}, for full details. -@node Other C-x * Commands, , Embedded Mode Overview, Using Calc +@node Other C-x * Commands @subsection Other @kbd{C-x *} Commands @noindent @@ -1329,7 +1329,7 @@ Calc. * Answers to Exercises:: @end menu -@node Basic Tutorial, Arithmetic Tutorial, Tutorial, Tutorial +@node Basic Tutorial @section Basic Tutorial @noindent @@ -1344,7 +1344,7 @@ to control various modes of the Calculator. * Modes Tutorial:: Common mode-setting commands. @end menu -@node RPN Tutorial, Algebraic Tutorial, Basic Tutorial, Basic Tutorial +@node RPN Tutorial @subsection RPN Calculations and the Stack @cindex RPN notation @@ -1738,7 +1738,7 @@ Another common idiom is @kbd{M-0 @key{DEL}}, which clears the stack. (The @kbd{M-0} numeric prefix tells @key{DEL} to operate on the entire stack.) -@node Algebraic Tutorial, Undo Tutorial, RPN Tutorial, Basic Tutorial +@node Algebraic Tutorial @subsection Algebraic-Style Calculations @noindent @@ -2038,7 +2038,7 @@ You can also ``unstore'' a variable when you are through with it: We will encounter formulas involving variables and functions again when we discuss the algebra and calculus features of the Calculator. -@node Undo Tutorial, Modes Tutorial, Algebraic Tutorial, Basic Tutorial +@node Undo Tutorial @subsection Undo and Redo @noindent @@ -2175,7 +2175,7 @@ new number. This works for formulas, vectors, and all other types of values you can put on the stack. The @kbd{`} key also works during entry of a number or algebraic formula. -@node Modes Tutorial, , Undo Tutorial, Basic Tutorial +@node Modes Tutorial @subsection Mode-Setting Commands @noindent @@ -2655,7 +2655,7 @@ again when we change to Fraction mode. All @samp{=>} expressions on the stack are recomputed every time you change any mode that might affect their values. -@node Arithmetic Tutorial, Vector/Matrix Tutorial, Basic Tutorial, Tutorial +@node Arithmetic Tutorial @section Arithmetic Tutorial @noindent @@ -3041,7 +3041,7 @@ like @code{pv}, @code{rate}, and @code{sln}). @xref{Binary Functions}, to read about the commands for operating on binary numbers (like @code{and}, @code{xor}, and @code{lsh}). -@node Vector/Matrix Tutorial, Types Tutorial, Arithmetic Tutorial, Tutorial +@node Vector/Matrix Tutorial @section Vector/Matrix Tutorial @noindent @@ -3056,7 +3056,7 @@ a vector as a list of objects. * List Tutorial:: @end menu -@node Vector Analysis Tutorial, Matrix Tutorial, Vector/Matrix Tutorial, Vector/Matrix Tutorial +@node Vector Analysis Tutorial @subsection Vector Analysis @noindent @@ -3181,7 +3181,7 @@ probabilities for the particle to be at the corresponding positions. Find the average position of the particle. @xref{Vector Answer 2, 2}. (@bullet{}) -@node Matrix Tutorial, List Tutorial, Vector Analysis Tutorial, Vector/Matrix Tutorial +@node Matrix Tutorial @subsection Matrices @noindent @@ -3507,7 +3507,7 @@ $$ @noindent @xref{Matrix Answer 3, 3}. (@bullet{}) -@node List Tutorial, , Matrix Tutorial, Vector/Matrix Tutorial +@node List Tutorial @subsection Vectors as Lists @noindent @@ -4214,7 +4214,7 @@ walk to walk a unit distance, but in a random direction, at each step. (Hint: The @code{sincos} function returns a vector of the cosine and sine of an angle.) @xref{List Answer 14, 14}. (@bullet{}) -@node Types Tutorial, Algebra Tutorial, Vector/Matrix Tutorial, Tutorial +@node Types Tutorial @section Types Tutorial @noindent @@ -4738,7 +4738,7 @@ Power Pill he eats doubles his speed. How many Power Pills can he swallow and still travel legally on most US highways? @xref{Types Answer 15, 15}. (@bullet{}) -@node Algebra Tutorial, Programming Tutorial, Types Tutorial, Tutorial +@node Algebra Tutorial @section Algebra and Calculus Tutorial @noindent @@ -4751,7 +4751,7 @@ formulas. * Rewrites Tutorial:: @end menu -@node Basic Algebra Tutorial, Rewrites Tutorial, Algebra Tutorial, Algebra Tutorial +@node Basic Algebra Tutorial @subsection Basic Algebra @noindent @@ -5246,7 +5246,7 @@ details and examples. @c hard exercise: simplify (2^(n r) - 2^(r*(n - 1))) / (2^r - 1) 2^(n - 1) @c to 2^((n-1)*(r-1)). -@node Rewrites Tutorial, , Basic Algebra Tutorial, Algebra Tutorial +@node Rewrites Tutorial @subsection Rewrite Rules @noindent @@ -5687,7 +5687,7 @@ a nasty surprise when you use Calc to balance your checkbook!) @xref{Rewrite Rules}, for the whole story on rewrite rules. -@node Programming Tutorial, Answers to Exercises, Algebra Tutorial, Tutorial +@node Programming Tutorial @section Programming Tutorial @noindent @@ -6346,7 +6346,7 @@ The rest of this manual tells the whole story. @c Volume II of this manual, the @dfn{Calc Reference}, tells the whole story. @page -@node Answers to Exercises, , Programming Tutorial, Tutorial +@node Answers to Exercises @section Answers to Exercises @noindent @@ -6433,7 +6433,7 @@ This section includes answers to all the exercises in the Calc tutorial. \gdef\chapternofonts{\let\write=\skipwrite\oldchapternofonts} @end tex -@node RPN Answer 1, RPN Answer 2, Answers to Exercises, Answers to Exercises +@node RPN Answer 1 @subsection RPN Tutorial Exercise 1 @noindent @@ -6443,7 +6443,7 @@ The result is @texline @math{1 - (2 \times (3 + 4)) = -13}. @infoline @expr{1 - (2 * (3 + 4)) = -13}. -@node RPN Answer 2, RPN Answer 3, RPN Answer 1, Answers to Exercises +@node RPN Answer 2 @subsection RPN Tutorial Exercise 2 @noindent @@ -6500,7 +6500,7 @@ advantage of using only three stack levels. But since Calc's stack can grow arbitrarily large this isn't really an issue. Which method you choose is purely a matter of taste. -@node RPN Answer 3, RPN Answer 4, RPN Answer 2, Answers to Exercises +@node RPN Answer 3 @subsection RPN Tutorial Exercise 3 @noindent @@ -6531,7 +6531,7 @@ Similarly, @kbd{M-@key{TAB}} gives you access to the number in level 3. @end group @end smallexample -@node RPN Answer 4, Algebraic Answer 1, RPN Answer 3, Answers to Exercises +@node RPN Answer 4 @subsection RPN Tutorial Exercise 4 @noindent @@ -6569,7 +6569,7 @@ enough that Calc provides a special key, @kbd{M-@key{DEL}}, to do just that. @kbd{M-@key{DEL}} is just like @kbd{@key{TAB} @key{DEL}}, except that it doesn't exhibit the ``feature'' that tripped poor Joe.) -@node Algebraic Answer 1, Algebraic Answer 2, RPN Answer 4, Answers to Exercises +@node Algebraic Answer 1 @subsection Algebraic Entry Tutorial Exercise 1 @noindent @@ -6582,7 +6582,7 @@ Or, RPN style, @kbd{0.5 ^}. a closer equivalent, since @samp{9^0.5} yields @expr{3.0} whereas @samp{sqrt(9)} and @samp{9^1:2} yield the exact integer @expr{3}.) -@node Algebraic Answer 2, Algebraic Answer 3, Algebraic Answer 1, Answers to Exercises +@node Algebraic Answer 2 @subsection Algebraic Entry Tutorial Exercise 2 @noindent @@ -6591,7 +6591,7 @@ name with @samp{1+y} as its argument. Assigning a value to a variable has no relation to a function by the same name. Joe needed to use an explicit @samp{*} symbol here: @samp{2 x*(1+y)}. -@node Algebraic Answer 3, Modes Answer 1, Algebraic Answer 2, Answers to Exercises +@node Algebraic Answer 3 @subsection Algebraic Entry Tutorial Exercise 3 @noindent @@ -6608,7 +6608,7 @@ multiply infinity by zero, Calc uses another special new symbol to show that the answer is ``indeterminate.'' @xref{Infinities}, for further discussion of infinite and indeterminate values. -@node Modes Answer 1, Modes Answer 2, Algebraic Answer 3, Answers to Exercises +@node Modes Answer 1 @subsection Modes Tutorial Exercise 1 @noindent @@ -6669,7 +6669,7 @@ in binary, octal, or hexadecimal is also exact in decimal, so the kinds of problems we saw in this exercise are likely to be severe only when you use a relatively unusual radix like 3. -@node Modes Answer 2, Modes Answer 3, Modes Answer 1, Answers to Exercises +@node Modes Answer 2 @subsection Modes Tutorial Exercise 2 If the radix is 15 or higher, we can't use the letter @samp{e} to mark @@ -6689,7 +6689,7 @@ it by the floating-point @samp{16#1.23}). While this wouldn't normally matter for display purposes, it could give you a nasty surprise if you copied that number into a file and later moved it back into Calc. -@node Modes Answer 3, Modes Answer 4, Modes Answer 2, Answers to Exercises +@node Modes Answer 3 @subsection Modes Tutorial Exercise 3 @noindent @@ -6731,7 +6731,7 @@ exactly was the quantity 45 degrees, so the precision must be raised before anything is done after the number 45 has been entered in order for the higher precision to be meaningful. -@node Modes Answer 4, Arithmetic Answer 1, Modes Answer 3, Answers to Exercises +@node Modes Answer 4 @subsection Modes Tutorial Exercise 4 @noindent @@ -6752,7 +6752,7 @@ Also, rational numbers cannot express the results of all calculations. There is no fractional form for the square root of two, so if you type @w{@kbd{2 Q}}, Calc has no choice but to give you a floating-point answer. -@node Arithmetic Answer 1, Arithmetic Answer 2, Modes Answer 4, Answers to Exercises +@node Arithmetic Answer 1 @subsection Arithmetic Tutorial Exercise 1 @noindent @@ -6772,7 +6772,7 @@ produces the exact fraction @expr{123456789:2}, which can be rounded down by the @kbd{F} command without ever switching to floating-point format. -@node Arithmetic Answer 2, Vector Answer 1, Arithmetic Answer 1, Answers to Exercises +@node Arithmetic Answer 2 @subsection Arithmetic Tutorial Exercise 2 @noindent @@ -6784,7 +6784,7 @@ or (when in Fraction mode) the reciprocal of an integer. But there is no efficient way to search the space of all possible rational numbers for an exact answer, so Calc doesn't try. -@node Vector Answer 1, Vector Answer 2, Arithmetic Answer 2, Answers to Exercises +@node Vector Answer 1 @subsection Vector Tutorial Exercise 1 @noindent @@ -6804,7 +6804,7 @@ by its length: @kbd{@key{RET} A /}. The final @kbd{A} command shows that the normalized vector does indeed have unit length. -@node Vector Answer 2, Matrix Answer 1, Vector Answer 1, Answers to Exercises +@node Vector Answer 2 @subsection Vector Tutorial Exercise 2 @noindent @@ -6813,14 +6813,14 @@ positions times their corresponding probabilities. This is the definition of the dot product operation. So all you need to do is to put the two vectors on the stack and press @kbd{*}. -@node Matrix Answer 1, Matrix Answer 2, Vector Answer 2, Answers to Exercises +@node Matrix Answer 1 @subsection Matrix Tutorial Exercise 1 @noindent The trick is to multiply by a vector of ones. Use @kbd{r 4 [1 1 1] *} to get the row sum. Similarly, use @kbd{[1 1] r 4 *} to get the column sum. -@node Matrix Answer 2, Matrix Answer 3, Matrix Answer 1, Answers to Exercises +@node Matrix Answer 2 @subsection Matrix Tutorial Exercise 2 @ifnottex @@ -6866,7 +6866,7 @@ mode: Type @kbd{d N} to return to Normal display mode afterwards. -@node Matrix Answer 3, List Answer 1, Matrix Answer 2, Answers to Exercises +@node Matrix Answer 3 @subsection Matrix Tutorial Exercise 3 @noindent @@ -6984,7 +6984,7 @@ the original system of equations to see how well they match. This is reasonably close to our original @expr{B} vector, @expr{[6, 2, 3, 11]}. -@node List Answer 1, List Answer 2, Matrix Answer 3, Answers to Exercises +@node List Answer 1 @subsection List Tutorial Exercise 1 @noindent @@ -7016,7 +7016,7 @@ vector. @end group @end smallexample -@node List Answer 2, List Answer 3, List Answer 1, Answers to Exercises +@node List Answer 2 @subsection List Tutorial Exercise 2 @noindent @@ -7099,7 +7099,7 @@ arithmetic functions! In fact, there is a built-in @kbd{a F} command that does least-squares fits. @xref{Curve Fitting}. -@node List Answer 3, List Answer 4, List Answer 2, Answers to Exercises +@node List Answer 3 @subsection List Tutorial Exercise 3 @noindent @@ -7143,7 +7143,7 @@ how many numbers are in this list. Then we could type: You could also type @kbd{& ^} to take the reciprocal of 9 and then raise the number to that power.) -@node List Answer 4, List Answer 5, List Answer 3, Answers to Exercises +@node List Answer 4 @subsection List Tutorial Exercise 4 @noindent @@ -7183,7 +7183,7 @@ The first divisor function is the sum of the divisors. Once again, the last two steps just compute a dot product for which a simple @kbd{*} would have worked equally well. -@node List Answer 5, List Answer 6, List Answer 4, Answers to Exercises +@node List Answer 5 @subsection List Tutorial Exercise 5 @noindent @@ -7222,14 +7222,14 @@ Incidentally, Calc provides the @dfn{Möbius μ} function which is zero if and only if its argument is square-free. It would be a much more convenient way to do the above test in practice. -@node List Answer 6, List Answer 7, List Answer 5, Answers to Exercises +@node List Answer 6 @subsection List Tutorial Exercise 6 @noindent First use @kbd{v x 6 @key{RET}} to get a list of integers, then @kbd{V M v x} to get a list of lists of integers! -@node List Answer 7, List Answer 8, List Answer 6, Answers to Exercises +@node List Answer 7 @subsection List Tutorial Exercise 7 @noindent @@ -7302,7 +7302,7 @@ triangular list. since each element of the main vector is itself a small vector, @kbd{V R +} computes the sum of its elements.) -@node List Answer 8, List Answer 9, List Answer 7, Answers to Exercises +@node List Answer 8 @subsection List Tutorial Exercise 8 @noindent @@ -7391,7 +7391,7 @@ The output from @kbd{a X} is a vector containing the value of @expr{x} that maximizes the function, and the function's value at that maximum. As you can see, our simple search got quite close to the right answer. -@node List Answer 9, List Answer 10, List Answer 8, Answers to Exercises +@node List Answer 9 @subsection List Tutorial Exercise 9 @noindent @@ -7513,7 +7513,7 @@ Another way to do this final step would be to reduce the formula @end group @end smallexample -@node List Answer 10, List Answer 11, List Answer 9, Answers to Exercises +@node List Answer 10 @subsection List Tutorial Exercise 10 @noindent @@ -7544,7 +7544,7 @@ Here's a more correct method: @end group @end smallexample -@node List Answer 11, List Answer 12, List Answer 10, Answers to Exercises +@node List Answer 11 @subsection List Tutorial Exercise 11 @noindent @@ -7611,7 +7611,7 @@ will be slightly different from the one shown here!) If you typed @kbd{v .} and @kbd{t .} before, type them again to return to full-sized display of vectors. -@node List Answer 12, List Answer 13, List Answer 11, Answers to Exercises +@node List Answer 12 @subsection List Tutorial Exercise 12 @noindent @@ -7722,7 +7722,7 @@ exercise 10, of Knuth's @emph{Art of Computer Programming}, volume II. If you typed @kbd{v .} and @kbd{t .} before, type them again to return to full-sized display of vectors. -@node List Answer 13, List Answer 14, List Answer 12, Answers to Exercises +@node List Answer 13 @subsection List Tutorial Exercise 13 @noindent @@ -7862,7 +7862,7 @@ Later in the tutorial we will encounter @dfn{modulo forms}, which basically automate the idea of reducing every intermediate result modulo some value @var{m}. -@node List Answer 14, Types Answer 1, List Answer 13, Answers to Exercises +@node List Answer 14 @subsection List Tutorial Exercise 14 We want to use @kbd{H V U} to nest a function which adds a random @@ -7927,7 +7927,7 @@ and in the second we could use polar complex numbers with random phase angles. (This exercise was first suggested in this form by Randal Schwartz.) -@node Types Answer 1, Types Answer 2, List Answer 14, Answers to Exercises +@node Types Answer 1 @subsection Types Tutorial Exercise 1 @noindent @@ -7971,7 +7971,7 @@ Notice that we didn't need to re-round the number when we reduced the precision. Remember, arithmetic operations always round their inputs to the current precision before they begin. -@node Types Answer 2, Types Answer 3, Types Answer 1, Answers to Exercises +@node Types Answer 2 @subsection Types Tutorial Exercise 2 @noindent @@ -8007,7 +8007,7 @@ input. As in the @expr{1 / 0} case, Calc will only use infinities here if you have turned on Infinite mode. Otherwise, it will treat @samp{ln(0)} as an error. -@node Types Answer 3, Types Answer 4, Types Answer 2, Answers to Exercises +@node Types Answer 3 @subsection Types Tutorial Exercise 3 @noindent @@ -8029,7 +8029,7 @@ for infinities (only the direction counts, not the ``size''); but Calc is careful to write @code{nan} any time this simple model is unable to tell what the true answer is. -@node Types Answer 4, Types Answer 5, Types Answer 3, Answers to Exercises +@node Types Answer 4 @subsection Types Tutorial Exercise 4 @smallexample @@ -8058,7 +8058,7 @@ The average song length is two minutes and 47.4 seconds. @noindent The album would be 53 minutes and 6 seconds long. -@node Types Answer 5, Types Answer 6, Types Answer 4, Answers to Exercises +@node Types Answer 5 @subsection Types Tutorial Exercise 5 @noindent @@ -8110,7 +8110,7 @@ Et voilà, September 13, 1991 is a Friday. @noindent And the answer to our original question: 242 days to go. -@node Types Answer 6, Types Answer 7, Types Answer 5, Answers to Exercises +@node Types Answer 6 @subsection Types Tutorial Exercise 6 @noindent @@ -8156,7 +8156,7 @@ of course, that the algorithm for computing leap years remains unchanged for that long. @xref{Date Forms}, for some interesting background information in that regard.) -@node Types Answer 7, Types Answer 8, Types Answer 6, Answers to Exercises +@node Types Answer 7 @subsection Types Tutorial Exercise 7 @noindent @@ -8201,7 +8201,7 @@ well as a vector. This saves us some retyping of numbers. @noindent Thus the volume is 6316 cubic centimeters, within about 11 percent. -@node Types Answer 8, Types Answer 9, Types Answer 7, Answers to Exercises +@node Types Answer 8 @subsection Types Tutorial Exercise 8 @noindent @@ -8233,7 +8233,7 @@ It may be disappointing to hear ``the answer lies somewhere between minus infinity and plus infinity, inclusive,'' but that's the best that interval arithmetic can do in this case. -@node Types Answer 9, Types Answer 10, Types Answer 8, Answers to Exercises +@node Types Answer 9 @subsection Types Tutorial Exercise 9 @smallexample @@ -8257,7 +8257,7 @@ for different numbers. The same issue arises when you try to square an error form. -@node Types Answer 10, Types Answer 11, Types Answer 9, Answers to Exercises +@node Types Answer 10 @subsection Types Tutorial Exercise 10 @noindent @@ -8305,7 +8305,7 @@ numbers it does an exact test; for large numbers it uses a variant of the Fermat test we used here. You can use @kbd{k p} repeatedly to prove that a large integer is prime with any desired probability. -@node Types Answer 11, Types Answer 12, Types Answer 10, Answers to Exercises +@node Types Answer 11 @subsection Types Tutorial Exercise 11 @noindent @@ -8353,7 +8353,7 @@ HMS form: The @kbd{=} key is necessary to evaluate the symbol @samp{pi} to the actual number 3.14159... -@node Types Answer 12, Types Answer 13, Types Answer 11, Answers to Exercises +@node Types Answer 12 @subsection Types Tutorial Exercise 12 @noindent @@ -8383,13 +8383,13 @@ each. @noindent No matter how long it is, the album will fit nicely on one CD. -@node Types Answer 13, Types Answer 14, Types Answer 12, Answers to Exercises +@node Types Answer 13 @subsection Types Tutorial Exercise 13 @noindent Type @kbd{' 1 yr @key{RET} u c s @key{RET}}. The answer is 31557600 seconds. -@node Types Answer 14, Types Answer 15, Types Answer 13, Answers to Exercises +@node Types Answer 14 @subsection Types Tutorial Exercise 14 @noindent @@ -8423,7 +8423,7 @@ Thus a signal could take up to 81 percent of a clock cycle just to go from one place to another inside the computer, assuming the signal could actually attain the full speed of light. Pretty tight! -@node Types Answer 15, Algebra Answer 1, Types Answer 14, Answers to Exercises +@node Types Answer 15 @subsection Types Tutorial Exercise 15 @noindent @@ -8457,7 +8457,7 @@ answer, assuming that each successive pill doubles his speed. @noindent Thus Sam can take up to 14 pills without a worry. -@node Algebra Answer 1, Algebra Answer 2, Types Answer 15, Answers to Exercises +@node Algebra Answer 1 @subsection Algebra Tutorial Exercise 1 @noindent @@ -8469,7 +8469,7 @@ simplified to @samp{abs(x)}, but for general complex arguments even that is not safe. (@xref{Declarations}, for a way to tell Calc that @expr{x} is known to be real.) -@node Algebra Answer 2, Algebra Answer 3, Algebra Answer 1, Answers to Exercises +@node Algebra Answer 2 @subsection Algebra Tutorial Exercise 2 @noindent @@ -8512,7 +8512,7 @@ familiar form. Sure enough, our answer (multiplied by a suitable constant) is the same as the original polynomial. -@node Algebra Answer 3, Algebra Answer 4, Algebra Answer 2, Answers to Exercises +@node Algebra Answer 3 @subsection Algebra Tutorial Exercise 3 @smallexample @@ -8575,7 +8575,7 @@ same as the original polynomial. @end group @end smallexample -@node Algebra Answer 4, Rewrites Answer 1, Algebra Answer 3, Answers to Exercises +@node Algebra Answer 4 @subsection Algebra Tutorial Exercise 4 @noindent @@ -8645,7 +8645,7 @@ same thing. @noindent Wow! That's even better than the result from the Taylor series method. -@node Rewrites Answer 1, Rewrites Answer 2, Algebra Answer 4, Answers to Exercises +@node Rewrites Answer 1 @subsection Rewrites Tutorial Exercise 1 @noindent @@ -8697,7 +8697,7 @@ The multiply-by-conjugate rule turns out to be useful in many different circumstances, such as when the denominator involves sines and cosines or the imaginary constant @code{i}. -@node Rewrites Answer 2, Rewrites Answer 3, Rewrites Answer 1, Answers to Exercises +@node Rewrites Answer 2 @subsection Rewrites Tutorial Exercise 2 @noindent @@ -8733,7 +8733,7 @@ help keep this from happening by accident would be to use something like @samp{ZzFib} instead of @code{fib} as the name of the three-argument function. -@node Rewrites Answer 3, Rewrites Answer 4, Rewrites Answer 2, Answers to Exercises +@node Rewrites Answer 3 @subsection Rewrites Tutorial Exercise 3 @noindent @@ -8755,7 +8755,7 @@ to it. While this may seem odd, it's just as valid a solution as the on the lefthand side, so that the rule matches the actual variable @samp{x} rather than letting @samp{x} stand for something else.) -@node Rewrites Answer 4, Rewrites Answer 5, Rewrites Answer 3, Answers to Exercises +@node Rewrites Answer 4 @subsection Rewrites Tutorial Exercise 4 @noindent @@ -8828,7 +8828,7 @@ will not get into an infinite loop. Calc will not be able to prove the symbol @samp{x} is either even or odd, so none of the rules will apply and the rewrites will stop right away. -@node Rewrites Answer 5, Rewrites Answer 6, Rewrites Answer 4, Answers to Exercises +@node Rewrites Answer 5 @subsection Rewrites Tutorial Exercise 5 @noindent @@ -8852,7 +8852,7 @@ Here we have taken advantage of the fact that earlier rules always match before later rules; @samp{nterms(x)} will only be tried if we already know that @samp{x} is not a sum. -@node Rewrites Answer 6, Programming Answer 1, Rewrites Answer 5, Answers to Exercises +@node Rewrites Answer 6 @subsection Rewrites Tutorial Exercise 6 @noindent @@ -8927,7 +8927,7 @@ for a way to do this in Calc, although for something as involved as this it would probably be better to write the formatting routine in Lisp.) -@node Programming Answer 1, Programming Answer 2, Rewrites Answer 6, Answers to Exercises +@node Programming Answer 1 @subsection Programming Tutorial Exercise 1 @noindent @@ -8940,7 +8940,7 @@ to be used within @code{ninteg}. The exact keystrokes are @kbd{Z F s Si @key{RET} @key{RET} C-b C-b @key{DEL} @key{DEL} @key{RET} y}. (The @kbd{C-b C-b @key{DEL} @key{DEL}} are what fix the argument list.) -@node Programming Answer 2, Programming Answer 3, Programming Answer 1, Answers to Exercises +@node Programming Answer 2 @subsection Programming Tutorial Exercise 2 @noindent @@ -8957,7 +8957,7 @@ which is just what we want: @kbd{C-x ( M-- 3 n C-x )}. Just for kicks, let's also do it algebraically: @w{@kbd{C-x ( ' -$$$, $$, $ @key{RET} C-x )}}. -@node Programming Answer 3, Programming Answer 4, Programming Answer 2, Answers to Exercises +@node Programming Answer 3 @subsection Programming Tutorial Exercise 3 @noindent @@ -8993,13 +8993,13 @@ next command.) Using algebraic entry: @kbd{C-x ( ' index($) @key{RET} C-x )}. -@node Programming Answer 4, Programming Answer 5, Programming Answer 3, Answers to Exercises +@node Programming Answer 4 @subsection Programming Tutorial Exercise 4 @noindent Here's one way: @kbd{C-x ( @key{RET} V R + @key{TAB} v l / C-x )}. -@node Programming Answer 5, Programming Answer 6, Programming Answer 4, Answers to Exercises +@node Programming Answer 5 @subsection Programming Tutorial Exercise 5 @smallexample @@ -9015,7 +9015,7 @@ Here's one way: @kbd{C-x ( @key{RET} V R + @key{TAB} v l / C-x )}. @noindent This answer is quite accurate. -@node Programming Answer 6, Programming Answer 7, Programming Answer 5, Answers to Exercises +@node Programming Answer 6 @subsection Programming Tutorial Exercise 6 @noindent @@ -9044,7 +9044,7 @@ number (a 209-digit integer!)@: in about 10 steps; even though the @kbd{Z < ... Z >} solution had much simpler steps, it would have required so many steps that it would not have been practical. -@node Programming Answer 7, Programming Answer 8, Programming Answer 6, Answers to Exercises +@node Programming Answer 7 @subsection Programming Tutorial Exercise 7 @noindent @@ -9085,7 +9085,7 @@ loop counter exceeds 4. Thus we find that the 30th harmonic number is 3.99, and the 31st harmonic number is 4.02. -@node Programming Answer 8, Programming Answer 9, Programming Answer 7, Answers to Exercises +@node Programming Answer 8 @subsection Programming Tutorial Exercise 8 @noindent @@ -9201,7 +9201,7 @@ Also, of course, @kbd{a R} is a built-in command that uses Newton's method (among others) to look for numerical solutions to any equation. @xref{Root Finding}. -@node Programming Answer 9, Programming Answer 10, Programming Answer 8, Answers to Exercises +@node Programming Answer 9 @subsection Programming Tutorial Exercise 9 @noindent @@ -9324,7 +9324,7 @@ C-x ) @end group @end example -@node Programming Answer 10, Programming Answer 11, Programming Answer 9, Answers to Exercises +@node Programming Answer 10 @subsection Programming Tutorial Exercise 10 @noindent @@ -9422,7 +9422,7 @@ C-x ( 1 + 0 @key{RET} 1 C-u v x ' x @key{RET} @key{TAB} V M ^ * C-x ) @end group @end example -@node Programming Answer 11, Programming Answer 12, Programming Answer 10, Answers to Exercises +@node Programming Answer 11 @subsection Programming Tutorial Exercise 11 @noindent @@ -9527,7 +9527,7 @@ first, because @code{read-kbd-macro} doesn't need to execute the definition as it reads it in. For this reason, @code{C-x * m} is often the easiest way to create recursive programs in Calc. -@node Programming Answer 12, , Programming Answer 11, Answers to Exercises +@node Programming Answer 12 @subsection Programming Tutorial Exercise 12 @noindent @@ -9568,7 +9568,7 @@ the last rule. @c [reference] -@node Introduction, Data Types, Tutorial, Top +@node Introduction @chapter Introduction @noindent @@ -9593,7 +9593,7 @@ numeric entry, undo, numeric prefix arguments, etc. * Troubleshooting Commands:: @end menu -@node Basic Commands, Help Commands, Introduction, Introduction +@node Basic Commands @section Basic Commands @noindent @@ -9762,7 +9762,7 @@ the stack but resets everything else to its initial state; with a negative prefix argument, @kbd{C-x * 0} preserves the contents of the stack but resets everything else to its default state. -@node Help Commands, Stack Basics, Basic Commands, Introduction +@node Help Commands @section Help Commands @noindent @@ -9907,7 +9907,7 @@ distribution, and warranty information about Calc. These work by pulling up the appropriate parts of the ``Copying'' or ``Reporting Bugs'' sections of the manual. -@node Stack Basics, Numeric Entry, Help Commands, Introduction +@node Stack Basics @section Stack Basics @noindent @@ -9959,7 +9959,7 @@ The @key{TAB} key swaps the top two objects on the stack. @xref{Stack and Trail}, for descriptions of these and other stack-related commands. -@node Numeric Entry, Algebraic Entry, Stack Basics, Introduction +@node Numeric Entry @section Numeric Entry @noindent @@ -9996,7 +9996,7 @@ data types. @xref{Data Types}. During numeric entry, the only editing key available is @key{DEL}. -@node Algebraic Entry, Quick Calculator, Numeric Entry, Introduction +@node Algebraic Entry @section Algebraic Entry @noindent @@ -10114,7 +10114,7 @@ is being pushed on the stack. Thus @kbd{' 1+2 @key{RET}} pushes 3 on the stack, but @kbd{' 1+2 @key{LFD}} pushes the formula @expr{1+2}; you might then press @kbd{=} when it is time to evaluate this formula. -@node Quick Calculator, Prefix Arguments, Algebraic Entry, Introduction +@node Quick Calculator @section ``Quick Calculator'' Mode @noindent @@ -10183,7 +10183,7 @@ or computing the answer than the full Calculator; the name ``quick'' merely refers to the fact that it's much less hassle to use for small calculations. -@node Prefix Arguments, Undo, Quick Calculator, Introduction +@node Prefix Arguments @section Numeric Prefix Arguments @noindent @@ -10231,7 +10231,7 @@ to the fourth power and set the precision to that value. Conversely, if you have typed a numeric prefix argument the @kbd{~} key pushes it onto the stack in the form of an integer. -@node Undo, Error Messages, Prefix Arguments, Introduction +@node Undo @section Undoing Mistakes @noindent @@ -10289,7 +10289,7 @@ It is also possible to recall previous results or inputs using the trail. The standard Emacs @kbd{C-_} undo key is recognized as a synonym for @kbd{U}. -@node Error Messages, Multiple Calculators, Undo, Introduction +@node Error Messages @section Error Messages @noindent @@ -10320,7 +10320,7 @@ after your computation finishes.) By default, this occurs only for @emph{all} messages automatically, or to report none automatically (so that you must always press @kbd{w} yourself to see the messages). -@node Multiple Calculators, Troubleshooting Commands, Error Messages, Introduction +@node Multiple Calculators @section Multiple Calculators @noindent @@ -10347,7 +10347,7 @@ the stack and mode settings of the buffer being quit as the new defaults. There is only one trail buffer, @file{*Calc Trail*}, used by all Calculator buffers. -@node Troubleshooting Commands, , Multiple Calculators, Introduction +@node Troubleshooting Commands @section Troubleshooting Commands @noindent @@ -10364,7 +10364,7 @@ to a bug or deficiency in Calc. * Debugging Calc:: @end menu -@node Autoloading Problems, Recursion Depth, Troubleshooting Commands, Troubleshooting Commands +@node Autoloading Problems @subsection Autoloading Problems @noindent @@ -10381,7 +10381,7 @@ If this happens, the easiest workaround is to type @kbd{C-x * L} loaded right away. This will cause Emacs to take up a lot more memory than it would otherwise, but it's guaranteed to fix the problem. -@node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands +@node Recursion Depth @subsection Recursion Depth @noindent @@ -10409,7 +10409,7 @@ The default value is 1000. These commands also double or halve @code{max-specpdl-size}, another internal Lisp recursion limit. The minimum value for this limit is 600. -@node Caches, Debugging Calc, Recursion Depth, Troubleshooting Commands +@node Caches @subsection Caches @noindent @@ -10438,7 +10438,7 @@ If you suspect a Calculator cache has become corrupt, you can use the The @kbd{C-x * 0} (with the zero key) command also resets caches along with all other aspects of the Calculator's state. -@node Debugging Calc, , Caches, Troubleshooting Commands +@node Debugging Calc @subsection Debugging Calc @noindent @@ -10491,7 +10491,7 @@ error. After you have executed @code{calc-pass-errors}, Lisp errors will be reported correctly but the user-friendly message will be lost. -@node Data Types, Stack and Trail, Introduction, Top +@node Data Types @chapter Data Types @noindent @@ -10526,7 +10526,7 @@ matrices, or algebraic formulas. * Formulas:: @end menu -@node Integers, Fractions, Data Types, Data Types +@node Integers @section Integers @noindent @@ -10552,7 +10552,7 @@ to set the default radix for display of integers. Numbers of any radix may be entered at any time. If you press @kbd{#} at the beginning of a number, the current display radix is used. -@node Fractions, Floats, Integers, Data Types +@node Fractions @section Fractions @noindent @@ -10573,7 +10573,7 @@ Non-decimal fractions are entered and displayed as @samp{@var{radix}#@var{num}:@var{denom}} (or in the analogous three-part form). The numerator and denominator always use the same radix. -@node Floats, Complex Numbers, Fractions, Data Types +@node Floats @section Floats @noindent @@ -10647,7 +10647,7 @@ the letter @samp{e} is a digit, so scientific notation must be written out, e.g., @samp{16#123.4567*16^2}. The first two exercises of the Modes Tutorial explore some of the properties of non-decimal floats. -@node Complex Numbers, Infinities, Floats, Data Types +@node Complex Numbers @section Complex Numbers @noindent @@ -10685,7 +10685,7 @@ A complex result in which the imaginary part is zero (or the phase angle is 0 or 180 degrees or @cpi{} radians) is automatically converted to a real number. -@node Infinities, Vectors and Matrices, Complex Numbers, Data Types +@node Infinities @section Infinities @noindent @@ -10772,7 +10772,7 @@ expressions are @samp{inf - inf} and @samp{inf ^ 0}. Also, Infinities are especially useful as parts of @dfn{intervals}. @xref{Interval Forms}. -@node Vectors and Matrices, Strings, Infinities, Data Types +@node Vectors and Matrices @section Vectors and Matrices @noindent @@ -10814,7 +10814,7 @@ to build @samp{[a, b, c]}, @samp{cvec(a, n, m)} to build an matrix of @samp{a}s, and @samp{index(n)} to build a vector of integers from 1 to @samp{n}. -@node Strings, HMS Forms, Vectors and Matrices, Data Types +@node Strings @section Strings @noindent @@ -10891,7 +10891,7 @@ the resulting string is breakable across multiple lines if it doesn't fit all on one line. Potential break points occur at every space character in the string. -@node HMS Forms, Date Forms, Strings, Data Types +@node HMS Forms @section HMS Forms @noindent @@ -10953,7 +10953,7 @@ two HMS forms produces a real-valued ratio of the two angles. Just for kicks, @kbd{M-x calc-time} pushes the current time of day on the stack as an HMS form. -@node Date Forms, Modulo Forms, HMS Forms, Data Types +@node Date Forms @section Date Forms @noindent @@ -11109,7 +11109,7 @@ for California time. The same is usually true of Julian day counts.) The built-in @kbd{t U} command performs these conversions. -@node Modulo Forms, Error Forms, Date Forms, Data Types +@node Modulo Forms @section Modulo Forms @noindent @@ -11193,7 +11193,7 @@ You can use @kbd{v p} and @kbd{%} to modify modulo forms. The algebraic function @samp{makemod(a, m)} builds the modulo form @w{@samp{a mod m}}. -@node Error Forms, Interval Forms, Modulo Forms, Data Types +@node Error Forms @section Error Forms @noindent @@ -11308,7 +11308,7 @@ the mean and the error should be HMS forms if either one is. @tindex sdev The algebraic function @samp{sdev(a, b)} builds the error form @samp{a +/- b}. -@node Interval Forms, Incomplete Objects, Error Forms, Data Types +@node Interval Forms @section Interval Forms @noindent @@ -11423,7 +11423,7 @@ should yield the interval @samp{[1..2]} again, but in fact it yields the (slightly too small) interval @samp{[1..1.9999999]} due to roundoff error. -@node Incomplete Objects, Variables, Interval Forms, Data Types +@node Incomplete Objects @section Incomplete Objects @noindent @@ -11486,7 +11486,7 @@ the @code{calc-dots} command. If you find incomplete entry distracting, you may wish to enter vectors and complex numbers as algebraic formulas by pressing the apostrophe key. -@node Variables, Formulas, Incomplete Objects, Data Types +@node Variables @section Variables @noindent @@ -11557,7 +11557,7 @@ a value into any of these special variables. @xref{Store and Recall}, for a discussion of commands dealing with variables. -@node Formulas, , Variables, Data Types +@node Formulas @section Formulas @noindent @@ -11715,7 +11715,7 @@ formats. @xref{Algebra}, for commands for manipulating formulas symbolically. -@node Stack and Trail, Mode Settings, Data Types, Top +@node Stack and Trail @chapter Stack and Trail Commands @noindent @@ -11730,7 +11730,7 @@ type, such as numbers, vectors, formulas, and incomplete objects.) * Keep Arguments:: @end menu -@node Stack Manipulation, Editing Stack Entries, Stack and Trail, Stack and Trail +@node Stack Manipulation @section Stack Manipulation Commands @noindent @@ -11859,7 +11859,7 @@ the line containing @samp{30}, @kbd{C-u 2 C-x C-t} creates @samp{10 40 20 30 50}. With an argument of 0, @kbd{C-x C-t} will switch the stack objects at the levels determined by the point and the mark. -@node Editing Stack Entries, Trail Commands, Stack Manipulation, Stack and Trail +@node Editing Stack Entries @section Editing Stack Entries @noindent @@ -11913,7 +11913,7 @@ The @kbd{`} key also works during numeric or algebraic entry. The text entered so far is moved to the @file{*Calc Edit*} buffer for more extensive editing than is convenient in the minibuffer. -@node Trail Commands, Keep Arguments, Editing Stack Entries, Stack and Trail +@node Trail Commands @section Trail Commands @noindent @@ -12034,7 +12034,7 @@ kills the @var{n} lines below or above the selected one. The @kbd{t .} (@code{calc-full-trail-vectors}) command is described elsewhere; @pxref{Vector and Matrix Formats}. -@node Keep Arguments, , Trail Commands, Stack and Trail +@node Keep Arguments @section Keep Arguments @noindent @@ -12077,7 +12077,7 @@ onto the stack. Note that the order of things on the stack will be different than with @kbd{K}: @kbd{2 @key{RET} 3 + M-@key{RET}} leaves @samp{5 2 3} on the stack instead of @samp{2 3 5}. @xref{Undo}. -@node Mode Settings, Arithmetic, Stack and Trail, Top +@node Mode Settings @chapter Mode Settings @noindent @@ -12098,7 +12098,7 @@ the @emph{appearance} or @emph{interpretation} of the stack's contents. * Calc Mode Line:: @end menu -@node General Mode Commands, Precision, Mode Settings, Mode Settings +@node General Mode Commands @section General Mode Commands @noindent @@ -12180,7 +12180,7 @@ the @kbd{z} and @kbd{Z} prefix keys are always distinct. Also, the @kbd{h} prefix is not affected by this mode. Press @kbd{m S} again to disable shifted-prefix mode. -@node Precision, Inverse and Hyperbolic, General Mode Commands, Mode Settings +@node Precision @section Precision @noindent @@ -12237,7 +12237,7 @@ would round this to 150 cents, i.e., $1.50. @xref{Floats}, for still more on floating-point precision and related issues. -@node Inverse and Hyperbolic, Calculation Modes, Precision, Mode Settings +@node Inverse and Hyperbolic @section Inverse and Hyperbolic Flags @noindent @@ -12280,7 +12280,7 @@ to subtract and keep arguments). Another Calc prefix flag, @kbd{K} (keep-arguments), is discussed elsewhere. @xref{Keep Arguments}. -@node Calculation Modes, Simplification Modes, Inverse and Hyperbolic, Mode Settings +@node Calculation Modes @section Calculation Modes @noindent @@ -12300,7 +12300,7 @@ The @samp{m a} (@code{calc-algebraic-mode}) command is described elsewhere * Working Message:: @end menu -@node Angular Modes, Polar Mode, Calculation Modes, Calculation Modes +@node Angular Modes @subsection Angular Modes @noindent @@ -12331,7 +12331,7 @@ and @kbd{m h} (@code{calc-hms-mode}) commands control the angular mode. The current angular mode is displayed on the Emacs mode line. The default angular mode is Degrees. -@node Polar Mode, Fraction Mode, Angular Modes, Calculation Modes +@node Polar Mode @subsection Polar Mode @noindent @@ -12348,7 +12348,7 @@ The @kbd{m p} (@code{calc-polar-mode}) command toggles complex-number preference between rectangular and polar forms. In Polar mode, all of the above example situations would produce polar complex numbers. -@node Fraction Mode, Infinite Mode, Polar Mode, Calculation Modes +@node Fraction Mode @subsection Fraction Mode @noindent @@ -12374,7 +12374,7 @@ At any time you can use @kbd{c f} (@code{calc-float}) to convert a fraction to a float, or @kbd{c F} (@code{calc-fraction}) to convert a float to a fraction. @xref{Conversions}. -@node Infinite Mode, Symbolic Mode, Fraction Mode, Calculation Modes +@node Infinite Mode @subsection Infinite Mode @noindent @@ -12414,7 +12414,7 @@ single symbol, @samp{0}. One consequence of this is that, while you might expect @samp{1 / -0 = -inf}, actually @samp{1 / -0} is equivalent to @samp{1 / 0}, which is equal to positive @code{inf}. -@node Symbolic Mode, Matrix Mode, Infinite Mode, Calculation Modes +@node Symbolic Mode @subsection Symbolic Mode @noindent @@ -12447,7 +12447,7 @@ contains, you can use the key sequence @kbd{m s a v m s} (this uses @code{calc-alg-evaluate}, which resimplifies but doesn't evaluate variables.) -@node Matrix Mode, Automatic Recomputation, Symbolic Mode, Calculation Modes +@node Matrix Mode @subsection Matrix and Scalar Modes @noindent @@ -12519,7 +12519,7 @@ of the formula without affecting the rest just select that part, change into Scalar mode and press @kbd{=} to resimplify the part under this mode, then change back to Matrix mode before deselecting. -@node Automatic Recomputation, Working Message, Matrix Mode, Calculation Modes +@node Automatic Recomputation @subsection Automatic Recomputation @noindent @@ -12543,7 +12543,7 @@ To update @samp{=>} operators in an Embedded buffer while automatic recomputation is off, use @w{@kbd{C-x * u}}. @xref{Embedded Mode}. -@node Working Message, , Automatic Recomputation, Calculation Modes +@node Working Message @subsection Working Messages @noindent @@ -12570,7 +12570,7 @@ considerably, experiments have shown that their impact is actually quite small. But if your terminal is slow you may find that it helps to turn the messages off. -@node Simplification Modes, Declarations, Calculation Modes, Mode Settings +@node Simplification Modes @section Simplification Modes @noindent @@ -12651,7 +12651,7 @@ A common technique is to set the simplification mode down to the lowest amount of simplification you will allow to be applied automatically, then use manual commands like @kbd{a s} and @kbd{c c} (@code{calc-clean}) to perform higher types of simplifications on demand. -@node Declarations, Display Modes, Simplification Modes, Mode Settings +@node Declarations @section Declarations @noindent @@ -12666,7 +12666,7 @@ take the fully general situation into account. * Functions for Declarations:: @end menu -@node Declaration Basics, Kinds of Declarations, Declarations, Declarations +@node Declaration Basics @subsection Declaration Basics @noindent @@ -12731,7 +12731,7 @@ are explicitly declared without @code{real} in some other row. The @kbd{s d} command declares @code{All} if you give a blank response to the variable-name prompt. -@node Kinds of Declarations, Functions for Declarations, Declaration Basics, Declarations +@node Kinds of Declarations @subsection Kinds of Declarations @noindent @@ -12921,7 +12921,7 @@ using a variable for a new purpose, it is best to use @kbd{s d} or @kbd{s D} to check to make sure you don't still have an old declaration for the variable that will conflict with its new meaning. -@node Functions for Declarations, , Kinds of Declarations, Declarations +@node Functions for Declarations @subsection Functions for Declarations @noindent @@ -13060,7 +13060,7 @@ provably scalar, and @samp{!dscalar(a)} is ``true'' only if @code{a} is provably non-scalar; both are ``false'' if there is insufficient information to tell. -@node Display Modes, Language Modes, Declarations, Mode Settings +@node Display Modes @section Display Modes @noindent @@ -13105,7 +13105,7 @@ words, @kbd{I d s} is equivalent to @kbd{H d s d @key{RET} H d (@var{old mode})} * Labels:: @end menu -@node Radix Modes, Grouping Digits, Display Modes, Display Modes +@node Radix Modes @subsection Radix Modes @noindent @@ -13190,7 +13190,7 @@ to will be represented using Calc's usual notation (in the appropriate radix). -@node Grouping Digits, Float Formats, Radix Modes, Display Modes +@node Grouping Digits @subsection Grouping Digits @noindent @@ -13228,7 +13228,7 @@ if re-read in textual form, say by the use of @kbd{C-x * y} and @kbd{C-x * g}. the @samp{\,} separator, which doesn't interfere with parsing because it is ignored by @TeX{} language mode. -@node Float Formats, Complex Formats, Grouping Digits, Display Modes +@node Float Formats @subsection Float Formats @noindent @@ -13294,7 +13294,7 @@ may wish to change this to a comma. Note that this is only a display style; on entry, periods must always be used to denote floating-point numbers, and commas to separate elements in a list. -@node Complex Formats, Fraction Formats, Float Formats, Display Modes +@node Complex Formats @subsection Complex Formats @noindent @@ -13325,7 +13325,7 @@ to @samp{(2,3)}. Other commands (like @code{calc-sin}) will @emph{not} interpret the formula @samp{2 + 3 * i} as a complex number. @xref{Variables}, under ``special constants.'' -@node Fraction Formats, HMS Formats, Complex Formats, Display Modes +@node Fraction Formats @subsection Fraction Formats @noindent @@ -13362,7 +13362,7 @@ The fraction format does not affect the way fractions or integers are stored, only the way they appear on the screen. The fraction format never affects floats. -@node HMS Formats, Date Formats, Fraction Formats, Display Modes +@node HMS Formats @subsection HMS Formats @noindent @@ -13389,7 +13389,7 @@ The @kbd{'} key is recognized as ``minutes'' only if @kbd{@@} (or @kbd{h} or @kbd{o}) has already been pressed; otherwise it means to switch to algebraic entry. -@node Date Formats, Truncating the Stack, HMS Formats, Display Modes +@node Date Formats @subsection Date Formats @noindent @@ -13420,7 +13420,7 @@ functions, your date formats should avoid using the @samp{#} character. * Standard Date Formats:: @end menu -@node ISO 8601, Date Formatting Codes, Date Formats, Date Formats +@node ISO 8601 @subsubsection ISO 8601 @noindent @@ -13498,7 +13498,7 @@ and seconds can be omitted, and decimals can be added. If a date with a time is represented, they should be separated by a literal ``T'', so noon on December 13, 2012 can be represented as 2012-12-13T12:00. -@node Date Formatting Codes, Free-Form Dates, ISO 8601, Date Formats +@node Date Formatting Codes @subsubsection Date Formatting Codes @noindent @@ -13689,7 +13689,7 @@ The ``j,'' ``J,'' and ``U'' formats do not make any time zone adjustment. They effectively use @samp{julian(x,0)} and @samp{unixtime(x,0)} to make the conversion; @pxref{Date Arithmetic}. -@node Free-Form Dates, Standard Date Formats, Date Formatting Codes, Date Formats +@node Free-Form Dates @subsubsection Free-Form Dates @noindent @@ -13755,7 +13755,7 @@ minus sign on the year value. If you always enter a four-digit year, and use a name instead of a number for the month, there is no danger of ambiguity. -@node Standard Date Formats, , Free-Form Dates, Date Formats +@node Standard Date Formats @subsubsection Standard Date Formats @noindent @@ -13798,7 +13798,7 @@ command (@pxref{Mode Settings}). @samp{IYYY-Iww-w} (ISO 8601 week numbering format) @end table -@node Truncating the Stack, Justification, Date Formats, Display Modes +@node Truncating the Stack @subsection Truncating the Stack @noindent @@ -13833,7 +13833,7 @@ The @kbd{d [} (@code{calc-truncate-up}) and @kbd{d ]} (@code{calc-truncate-down}) commands move the @samp{.} up or down one line at a time (or several lines with a prefix argument). -@node Justification, Labels, Truncating the Stack, Display Modes +@node Justification @subsection Justification @noindent @@ -13894,7 +13894,7 @@ when positioning by explicit origins and widths. In the latter case, the display is formatted as specified, and then uniformly shifted over four spaces to fit the line numbers. -@node Labels, , Justification, Display Modes +@node Labels @subsection Labels @noindent @@ -13925,7 +13925,7 @@ document (possibly using Embedded mode). The equations would typically be centered, and the equation numbers would be on the left or right as you prefer. -@node Language Modes, Modes Variable, Display Modes, Mode Settings +@node Language Modes @section Language Modes @noindent @@ -13978,7 +13978,7 @@ shifted letter key. * Syntax Tables:: @end menu -@node Normal Language Modes, C FORTRAN Pascal, Language Modes, Language Modes +@node Normal Language Modes @subsection Normal Language Modes @noindent @@ -14080,7 +14080,7 @@ all four modes, and unformatted notation works in any language mode (except that Mathematica mode expects square brackets instead of parentheses). -@node C FORTRAN Pascal, TeX and LaTeX Language Modes, Normal Language Modes, Language Modes +@node C FORTRAN Pascal @subsection C, FORTRAN, and Pascal Modes @noindent @@ -14155,7 +14155,7 @@ modes will use upper-case letters exclusively for display, and will convert to lower-case on input. With a negative prefix, these modes convert to lower-case for display and input. -@node TeX and LaTeX Language Modes, Eqn Language Mode, C FORTRAN Pascal, Language Modes +@node TeX and LaTeX Language Modes @subsection @TeX{} and @LaTeX{} Language Modes @noindent @@ -14575,7 +14575,7 @@ $$ \pmatrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$ @sp 2 @end iftex -@node Eqn Language Mode, Yacas Language Mode, TeX and LaTeX Language Modes, Language Modes +@node Eqn Language Mode @subsection Eqn Language Mode @noindent @@ -14651,7 +14651,7 @@ The words @code{lcol} and @code{rcol} are recognized as synonyms for @code{ccol} during input, and are generated instead of @code{ccol} if the matrix justification mode so specifies. -@node Yacas Language Mode, Maxima Language Mode, Eqn Language Mode, Language Modes +@node Yacas Language Mode @subsection Yacas Language Mode @noindent @@ -14681,7 +14681,7 @@ use square brackets. If, for example, @samp{A} represents the list @samp{@{a,2,c,4@}}, then @samp{A[3]} would equal @samp{c}. -@node Maxima Language Mode, Giac Language Mode, Yacas Language Mode, Language Modes +@node Maxima Language Mode @subsection Maxima Language Mode @noindent @@ -14706,7 +14706,7 @@ Maxima uses square brackets for lists and vectors, and matrices are written as calls to the function @code{matrix}, given the row vectors of the matrix as arguments. Square brackets are also used as subscripts. -@node Giac Language Mode, Mathematica Language Mode, Maxima Language Mode, Language Modes +@node Giac Language Mode @subsection Giac Language Mode @noindent @@ -14731,7 +14731,7 @@ Calc reads @samp{2 .. 3} as the closed interval @samp{[2 .. 3]} and writes any kind of interval as @samp{2 .. 3}. This means you cannot see the difference between an open and a closed interval while in Giac mode. -@node Mathematica Language Mode, Maple Language Mode, Giac Language Mode, Language Modes +@node Mathematica Language Mode @subsection Mathematica Language Mode @noindent @@ -14754,7 +14754,7 @@ Non-decimal numbers are written, e.g., @samp{16^^7fff}. Floating-point numbers in scientific notation are written @samp{1.23*10.^3}. Subscripts use double square brackets: @samp{a[[i]]}. -@node Maple Language Mode, Compositions, Mathematica Language Mode, Language Modes +@node Maple Language Mode @subsection Maple Language Mode @noindent @@ -14788,7 +14788,7 @@ Among things not currently handled by Calc's Maple mode are the various quote symbols, procedures and functional operators, and inert (@samp{&}) operators. -@node Compositions, Syntax Tables, Maple Language Mode, Language Modes +@node Compositions @subsection Compositions @noindent @@ -14824,7 +14824,7 @@ the language modes. * User-Defined Compositions:: @end menu -@node Composition Basics, Horizontal Compositions, Compositions, Compositions +@node Composition Basics @subsubsection Composition Basics @noindent @@ -14965,7 +14965,7 @@ in a function call), then the break points in that @code{bstring} will be on the same level as the break points of the surrounding object. -@node Horizontal Compositions, Vertical Compositions, Composition Basics, Compositions +@node Horizontal Compositions @subsubsection Horizontal Compositions @noindent @@ -15009,7 +15009,7 @@ formats as @samp{2 (a + b c + (d = e))}. The baseline of a horizontal composition is the same as the baselines of the component compositions, which are all aligned. -@node Vertical Compositions, Other Compositions, Horizontal Compositions, Compositions +@node Vertical Compositions @subsubsection Vertical Compositions @noindent @@ -15130,7 +15130,7 @@ Like @code{choriz}, the vertical compositions accept a second argument which gives the precedence to use when formatting the components. Vertical compositions do not support separator strings. -@node Other Compositions, Information about Compositions, Vertical Compositions, Compositions +@node Other Compositions @subsubsection Other Compositions @noindent @@ -15224,7 +15224,7 @@ b - @end group @end example -@node Information about Compositions, User-Defined Compositions, Other Compositions, Compositions +@node Information about Compositions @subsubsection Information about Compositions @noindent @@ -15266,7 +15266,7 @@ For @samp{a / b} in Big mode, @code{cascent} returns 2 and @code{cdescent} returns 1. The only formula for which @code{cascent} will return zero is @samp{cvspace(0)} or equivalents. -@node User-Defined Compositions, , Information about Compositions, Compositions +@node User-Defined Compositions @subsubsection User-Defined Compositions @noindent @@ -15397,7 +15397,7 @@ produce a large, unwieldy integer. You can save your display formats permanently using the @kbd{Z P} command (@pxref{Creating User Keys}). -@node Syntax Tables, , Compositions, Language Modes +@node Syntax Tables @subsection Syntax Tables @noindent @@ -15427,7 +15427,7 @@ the syntax tables along with the other mode settings; * Conditional Syntax Rules:: @end menu -@node Syntax Table Basics, Precedence in Syntax Tables, Syntax Tables, Syntax Tables +@node Syntax Table Basics @subsubsection Syntax Table Basics @noindent @@ -15575,7 +15575,7 @@ respectively). Finally, the notation @samp{%%} anywhere in a syntax table causes the rest of the line to be ignored as a comment. -@node Precedence in Syntax Tables, Advanced Syntax Patterns, Syntax Table Basics, Syntax Tables +@node Precedence in Syntax Tables @subsubsection Precedence @noindent @@ -15610,7 +15610,7 @@ can create a right-associative operator. standard Calc operators. For the precedences of operators in other language modes, look in the Calc source file @file{calc-lang.el}. -@node Advanced Syntax Patterns, Conditional Syntax Rules, Precedence in Syntax Tables, Syntax Tables +@node Advanced Syntax Patterns @subsubsection Advanced Syntax Patterns @noindent @@ -15730,7 +15730,7 @@ backs up and tries the other alternative. Thus Calc has ``partial'' backtracking. A fully backtracking parser would go on to make sure the rest of the pattern matched before finalizing the choice. -@node Conditional Syntax Rules, , Advanced Syntax Patterns, Syntax Tables +@node Conditional Syntax Rules @subsubsection Conditional Syntax Rules @noindent @@ -15804,7 +15804,7 @@ Normal language mode for editing expressions in syntax rules, so we must use regular Calc notation for the interval @samp{[b..c]} that will correspond to the Maple mode interval @samp{1..10}. -@node Modes Variable, Calc Mode Line, Language Modes, Mode Settings +@node Modes Variable @section The @code{Modes} Variable @noindent @@ -15906,7 +15906,7 @@ would not work for fixed-point mode, but it wouldn't be hard to do a full emulation with the help of the @kbd{Z [} and @kbd{Z ]} programming commands. @xref{Conditionals in Macros}.) -@node Calc Mode Line, , Modes Variable, Mode Settings +@node Calc Mode Line @section The Calc Mode Line @noindent @@ -16125,7 +16125,7 @@ Stack is truncated (@kbd{d t}; @pxref{Truncating the Stack}). In addition, the symbols @code{Active} and @code{~Active} can appear as minor modes on an Embedded buffer's mode line. @xref{Embedded Mode}. -@node Arithmetic, Scientific Functions, Mode Settings, Top +@node Arithmetic @chapter Arithmetic Functions @noindent @@ -16155,7 +16155,7 @@ interpret a prefix argument. * Binary Functions:: @end menu -@node Basic Arithmetic, Integer Truncation, Arithmetic, Arithmetic +@node Basic Arithmetic @section Basic Arithmetic @noindent @@ -16512,7 +16512,7 @@ way floating-point numbers work. Incrementing a date/time form adjusts it by a certain number of seconds. Incrementing a pure date form adjusts it by a certain number of days. -@node Integer Truncation, Complex Number Functions, Basic Arithmetic, Arithmetic +@node Integer Truncation @section Integer Truncation @noindent @@ -16635,7 +16635,7 @@ and @kbd{f Q} (integer square root) commands, which are analogous to @kbd{/}, @kbd{B}, and @kbd{Q}, respectively, except that they take integer arguments and return the result rounded down to an integer. -@node Complex Number Functions, Conversions, Integer Truncation, Arithmetic +@node Complex Number Functions @section Complex Number Functions @noindent @@ -16703,7 +16703,7 @@ The @kbd{v u} (@code{calc-unpack}) command takes the complex number (or other composite object) on the top of the stack and unpacks it into its separate components. -@node Conversions, Date Arithmetic, Complex Number Functions, Arithmetic +@node Conversions @section Conversions @noindent @@ -16866,7 +16866,7 @@ you wouldn't want it automatically converted to a 100-digit integer). With the Hyperbolic flag, @kbd{H c c} and @kbd{H c 0} through @kbd{H c 9} operate non-pervasively [@code{clean}]. -@node Date Arithmetic, Financial Functions, Conversions, Arithmetic +@node Date Arithmetic @section Date Arithmetic @noindent @@ -16894,7 +16894,7 @@ additional argument from the top of the stack. * Business Days:: @end menu -@node Date Conversions, Date Functions, Date Arithmetic, Date Arithmetic +@node Date Conversions @subsection Date Conversions @noindent @@ -16982,7 +16982,7 @@ zone is used for that prompt. You can also answer the first prompt with @kbd{$} to take the two time zone names from the stack (and the date to be converted from the third stack level). -@node Date Functions, Business Days, Date Conversions, Date Arithmetic +@node Date Functions @subsection Date Functions @noindent @@ -17146,7 +17146,7 @@ serves this purpose. Similarly, instead of @code{incday} and @xref{Basic Arithmetic}, for the @kbd{f ]} [@code{incr}] command which can adjust a date/time form by a certain number of seconds. -@node Business Days, Time Zones, Date Functions, Date Arithmetic +@node Business Days @subsection Business Days @noindent @@ -17289,7 +17289,7 @@ any date form and returns 1 if that date falls on a weekend or holiday, as defined in @code{Holidays}, or 0 if the date is a business day. -@node Time Zones, , Business Days, Date Arithmetic +@node Time Zones @subsection Time Zones @noindent @@ -17511,7 +17511,7 @@ daylight saving time (e.g., @code{PDT} or @code{PST}) the the algorithms described above are used. If @var{zone} is omitted, the computation is done for the current time zone. -@node Financial Functions, Binary Functions, Date Arithmetic, Arithmetic +@node Financial Functions @section Financial Functions @noindent @@ -17538,7 +17538,7 @@ of this section to make sure the functions have the meaning you expect. * Definitions of Financial Functions:: @end menu -@node Percentages, Future Value, Financial Functions, Financial Functions +@node Percentages @subsection Percentages @kindex M-% @@ -17603,7 +17603,7 @@ in the second case, we're decreasing by 20% of 50.) The effect of @kbd{40 @key{RET} 50 b %} is to compute @expr{(50-40)/40}, converting the answer to percentage form as if by @kbd{c %}. -@node Future Value, Present Value, Percentages, Financial Functions +@node Future Value @subsection Future Value @noindent @@ -17665,7 +17665,7 @@ now counting the payment at year five (which, since it didn't have a chance to earn interest, counts as $1000). Indeed, @expr{5569.96 = 5870.73 - 1300.78 + 1000} (give or take a bit of roundoff error). -@node Present Value, Related Financial Functions, Future Value, Financial Functions +@node Present Value @subsection Present Value @noindent @@ -17749,7 +17749,7 @@ The @kbd{I b N} [@code{npvb}] command computes the net present value where payments occur at the beginning of each interval rather than at the end. -@node Related Financial Functions, Depreciation Functions, Present Value, Financial Functions +@node Related Financial Functions @subsection Related Financial Functions @noindent @@ -17837,7 +17837,7 @@ this rate is known as the @dfn{internal rate of return}. The @kbd{I b I} [@code{irrb}] command computes the internal rate of return assuming payments occur at the beginning of each period. -@node Depreciation Functions, Definitions of Financial Functions, Related Financial Functions, Financial Functions +@node Depreciation Functions @subsection Depreciation Functions @noindent @@ -17908,7 +17908,7 @@ Summing columns with @kbd{V R : +} yields @expr{[10000, 10000, 10000]}; the total depreciation in any method is (by definition) the difference between the cost and the salvage value. -@node Definitions of Financial Functions, , Depreciation Functions, Financial Functions +@node Definitions of Financial Functions @subsection Definitions @noindent @@ -18062,7 +18062,7 @@ and the depreciation is zero for all subsequent periods. The @code{ddb} function returns the amount the book value decreased in the specified period. -@node Binary Functions, , Financial Functions, Arithmetic +@node Binary Functions @section Binary Number Functions @noindent @@ -18252,7 +18252,7 @@ unpack; type @kbd{31 @key{TAB} -} to replace each bit-number in the set with 31 minus that bit-number; type @kbd{b p} to pack the set back into a binary integer. -@node Scientific Functions, Matrix Functions, Arithmetic, Top +@node Scientific Functions @chapter Scientific Functions @noindent @@ -18319,7 +18319,7 @@ interpret a prefix argument. * Probability Distribution Functions:: @end menu -@node Logarithmic Functions, Trigonometric and Hyperbolic Functions, Scientific Functions, Scientific Functions +@node Logarithmic Functions @section Logarithmic Functions @noindent @@ -18413,7 +18413,7 @@ The @kbd{f L} (@code{calc-lnp1}) [@code{lnp1}] command computes @infoline @expr{ln(x+1)}, producing a more accurate answer when @expr{x} is close to zero. -@node Trigonometric and Hyperbolic Functions, Advanced Math Functions, Logarithmic Functions, Scientific Functions +@node Trigonometric and Hyperbolic Functions @section Trigonometric/Hyperbolic Functions @noindent @@ -18590,7 +18590,7 @@ counterparts, which are also available separately as @code{calc-sech} [@code{sech}], @code{calc-csch} [@code{csch}] and @code{calc-coth} [@code{coth}]. (These commands do not accept the Inverse flag.) -@node Advanced Math Functions, Branch Cuts, Trigonometric and Hyperbolic Functions, Scientific Functions +@node Advanced Math Functions @section Advanced Mathematical Functions @noindent @@ -18727,7 +18727,7 @@ Calc's implementation of the Bessel functions currently limits the precision to 8 digits, and may not be exact even to that precision. Use with care! -@node Branch Cuts, Random Numbers, Advanced Math Functions, Scientific Functions +@node Branch Cuts @section Branch Cuts and Principal Values @noindent @@ -18871,7 +18871,7 @@ The ``advanced math'' functions (gamma, Bessel, etc.@:) are also defined for general complex arguments, but their branch cuts and principal values are not rigorously specified at present. -@node Random Numbers, Combinatorial Functions, Branch Cuts, Scientific Functions +@node Random Numbers @section Random Numbers @noindent @@ -18999,7 +18999,7 @@ elements of this vector. @xref{Matrix Functions}. * Random Number Generator:: (Complete description of Calc's algorithm) @end menu -@node Random Number Generator, , Random Numbers, Random Numbers +@node Random Number Generator @subsection Random Number Generator Calc's random number generator uses several methods to ensure that @@ -19097,7 +19097,7 @@ The Gaussian random numbers generated by @samp{random(0.0)} use the generates a pair of Gaussian random numbers at a time, so only every other call to @samp{random(0.0)} will require significant calculations. -@node Combinatorial Functions, Probability Distribution Functions, Random Numbers, Scientific Functions +@node Combinatorial Functions @section Combinatorial Functions @noindent @@ -19313,7 +19313,7 @@ distinct factors, this is @expr{(-1)^k}. If the input number has any duplicate factors (i.e., can be divided by the same prime more than once), the result is zero. -@node Probability Distribution Functions, , Combinatorial Functions, Scientific Functions +@node Probability Distribution Functions @section Probability Distribution Functions @noindent @@ -19464,7 +19464,7 @@ Since the distribution functions are monotonic, @kbd{a R} is guaranteed to be able to find a solution given any initial guess. @xref{Numerical Solutions}. -@node Matrix Functions, Algebra, Scientific Functions, Top +@node Matrix Functions @chapter Vector/Matrix Functions @noindent @@ -19492,7 +19492,7 @@ vector of matrices, and so on.) * Vector and Matrix Formats:: @end menu -@node Packing and Unpacking, Building Vectors, Matrix Functions, Matrix Functions +@node Packing and Unpacking @section Packing and Unpacking @noindent @@ -19712,7 +19712,7 @@ Subscript notation is a useful way to extract a particular part of an object. For example, to get the numerator of a rational number, you can use @samp{unpack(-10, @var{x})_1}. -@node Building Vectors, Extracting Elements, Packing and Unpacking, Matrix Functions +@node Building Vectors @section Building Vectors @noindent @@ -19880,7 +19880,7 @@ representing the remainder of the vector. Thus the vector Also, @samp{head([a, b, c, d]) = a}, @samp{tail([a, b, c, d]) = [b, c, d]}, @samp{rhead([a, b, c, d]) = [a, b, c]}, and @samp{rtail([a, b, c, d]) = d}. -@node Extracting Elements, Manipulating Vectors, Building Vectors, Matrix Functions +@node Extracting Elements @section Extracting Vector Elements @noindent @@ -19986,7 +19986,7 @@ produces @samp{[a, d, e]}. It is always true that @code{subvec} and @xref{Selecting Subformulas}, for an alternative way to operate on vectors one element at a time. -@node Manipulating Vectors, Vector and Matrix Arithmetic, Extracting Elements, Matrix Functions +@node Manipulating Vectors @section Manipulating Vectors @noindent @@ -20218,7 +20218,7 @@ operation across the two vectors. @xref{Logical Operations}. Note that the @code{? :} operation also discussed there allows other types of masking using vectors. -@node Vector and Matrix Arithmetic, Set Operations, Manipulating Vectors, Matrix Functions +@node Vector and Matrix Arithmetic @section Vector and Matrix Arithmetic @noindent @@ -20340,7 +20340,7 @@ elements of the matrix. The @kbd{V K} (@code{calc-kron}) [@code{kron}] command computes the Kronecker product of two matrices. -@node Set Operations, Statistical Operations, Vector and Matrix Arithmetic, Matrix Functions +@node Set Operations @section Set Operations using Vectors @noindent @@ -20530,7 +20530,7 @@ representation @texline (@math{2^{100}}, a 31-digit integer, in this case). @infoline (@expr{2^100}, a 31-digit integer, in this case). -@node Statistical Operations, Reducing and Mapping, Set Operations, Matrix Functions +@node Statistical Operations @section Statistical Operations on Vectors @noindent @@ -20559,7 +20559,7 @@ probability distribution functions. * Paired-Sample Statistics:: @end menu -@node Single-Variable Statistics, Paired-Sample Statistics, Statistical Operations, Statistical Operations +@node Single-Variable Statistics @subsection Single-Variable Statistics @noindent @@ -20828,7 +20828,7 @@ arguments, interpreted in the same way as the other functions in this section. For example, @samp{vflat(1, [2, [3, 4]], 5)} returns @samp{[1, 2, 3, 4, 5]}. -@node Paired-Sample Statistics, , Single-Variable Statistics, Statistical Operations +@node Paired-Sample Statistics @subsection Paired-Sample Statistics @noindent @@ -20889,7 +20889,7 @@ between sample or population statistics here.) $$ r_{x\!y} = { \sigma_{x\!y}^2 \over \sigma_x^2 \sigma_y^2 } $$ @end tex -@node Reducing and Mapping, Vector and Matrix Formats, Statistical Operations, Matrix Functions +@node Reducing and Mapping @section Reducing and Mapping Vectors @noindent @@ -20919,7 +20919,7 @@ While @kbd{V A} is useful in some cases, you will usually find that either * Generalized Products:: @end menu -@node Specifying Operators, Mapping, Reducing and Mapping, Reducing and Mapping +@node Specifying Operators @subsection Specifying Operators @noindent @@ -21070,7 +21070,7 @@ a function, since the name @code{gcd} corresponds to the Lisp variable automatically makes this translation, so you don't have to worry about it.) -@node Mapping, Reducing, Specifying Operators, Reducing and Mapping +@node Mapping @subsection Mapping @noindent @@ -21167,7 +21167,7 @@ mapping command. The default @kbd{V M} always means map-by-elements. @xref{Storing Variables}, for the @kbd{s m} command which modifies a variable's stored value using a @kbd{V M}-like operator. -@node Reducing, Nesting and Fixed Points, Mapping, Reducing and Mapping +@node Reducing @subsection Reducing @noindent @@ -21248,7 +21248,7 @@ The commands @kbd{C-x * :} and @kbd{C-x * _} are equivalent to typing @kbd{V R : +} or @kbd{V R _ +}, respectively, to sum the columns or rows of the matrix. @xref{Grabbing From Buffers}. -@node Nesting and Fixed Points, Generalized Products, Reducing, Reducing and Mapping +@node Nesting and Fixed Points @subsection Nesting and Fixed Points @noindent @@ -21328,7 +21328,7 @@ computes the square root of @samp{A} given the initial guess @samp{B}, stopping when the result is correct within the specified tolerance, or when 20 steps have been taken, whichever is sooner. -@node Generalized Products, , Nesting and Fixed Points, Reducing and Mapping +@node Generalized Products @subsection Generalized Products @kindex v O @@ -21365,7 +21365,7 @@ use @kbd{$} twice to take both operator formulas from the stack, the first (multiplicative) operator is taken from the top of the stack and the second (additive) operator is taken from second-to-top. -@node Vector and Matrix Formats, , Reducing and Mapping, Matrix Functions +@node Vector and Matrix Formats @section Vector and Matrix Display Formats @noindent @@ -21512,7 +21512,7 @@ line. This mode causes all vectors, whether matrices or not, to be displayed with a single element per line. Sub-vectors within the vectors will still use the normal linear form. -@node Algebra, Units, Matrix Functions, Top +@node Algebra @chapter Algebra @noindent @@ -21552,7 +21552,7 @@ of these modes. You may also wish to select Big display mode (@kbd{d B}). * Rewrite Rules:: @end menu -@node Selecting Subformulas, Algebraic Manipulation, Algebra, Algebra +@node Selecting Subformulas @section Selecting Sub-Formulas @noindent @@ -21578,7 +21578,7 @@ on one element of a vector in-place, simply select that element as a * Rearranging with Selections:: @end menu -@node Making Selections, Changing Selections, Selecting Subformulas, Selecting Subformulas +@node Making Selections @subsection Making Selections @noindent @@ -21739,7 +21739,7 @@ position. The @kbd{j c} (@code{calc-clear-selections}) command unselects all stack elements. -@node Changing Selections, Displaying Selections, Making Selections, Selecting Subformulas +@node Changing Selections @subsection Changing Selections @noindent @@ -21828,7 +21828,7 @@ The Info @kbd{m} command is somewhat similar to Calc's @kbd{j s} and @kbd{j l}; in each case, you can jump directly to a sub-component of the hierarchy simply by pointing to it with the cursor. -@node Displaying Selections, Operating on Selections, Changing Selections, Selecting Subformulas +@node Displaying Selections @subsection Displaying Selections @noindent @@ -21859,7 +21859,7 @@ and the selected sub-formula will be highlighted by using a more noticeable face (@code{calc-selected-face}) instead of @samp{#} signs. (@pxref{Customizing Calc}.) -@node Operating on Selections, Rearranging with Selections, Displaying Selections, Selecting Subformulas +@node Operating on Selections @subsection Operating on Selections @noindent @@ -22016,7 +22016,7 @@ to be simplified. @end group @end smallexample -@node Rearranging with Selections, , Operating on Selections, Selecting Subformulas +@node Rearranging with Selections @subsection Rearranging Formulas using Selections @noindent @@ -22265,7 +22265,7 @@ The @kbd{j "} (@code{calc-sel-expand-formula}) command is to @kbd{a "} You can use the @kbd{j r} (@code{calc-rewrite-selection}) command to define other algebraic operations on sub-formulas. @xref{Rewrite Rules}. -@node Algebraic Manipulation, Simplifying Formulas, Selecting Subformulas, Algebra +@node Algebraic Manipulation @section Algebraic Manipulation @noindent @@ -22429,7 +22429,7 @@ evaluated immediately, even if its arguments are variables, so if you wish to put a call to @code{subst} onto the stack you must turn the default simplifications off first (with @kbd{m O}). -@node Simplifying Formulas, Polynomials, Algebraic Manipulation, Algebra +@node Simplifying Formulas @section Simplifying Formulas @noindent @@ -22478,7 +22478,7 @@ combinations of @samp{sinh}s and @samp{cosh}s before simplifying. * Simplification of Units:: @end menu -@node Basic Simplifications, Algebraic Simplifications, Simplifying Formulas, Simplifying Formulas +@node Basic Simplifications @subsection Basic Simplifications @noindent @@ -22808,7 +22808,7 @@ Most other Calc functions have few if any basic simplifications defined, aside of course from evaluation when the arguments are suitable numbers. -@node Algebraic Simplifications, Unsafe Simplifications, Basic Simplifications, Simplifying Formulas +@node Algebraic Simplifications @subsection Algebraic Simplifications @noindent @@ -23041,7 +23041,7 @@ all simplified to 0, but @expr{x > 3} is simplified to 1. By a similar analysis, @expr{abs(x) >= 0} is simplified to 1, as is @expr{x^2 >= 0} if @expr{x} is known to be real. -@node Unsafe Simplifications, Simplification of Units, Algebraic Simplifications, Simplifying Formulas +@node Unsafe Simplifications @subsection ``Unsafe'' Simplifications @noindent @@ -23134,7 +23134,7 @@ on whether you believe @expr{x} is positive or negative). The @kbd{a M /} command can be used to divide a factor out of both sides of an inequality. -@node Simplification of Units, , Unsafe Simplifications, Simplifying Formulas +@node Simplification of Units @subsection Simplification of Units @noindent @@ -23219,7 +23219,7 @@ that have angular units like @code{rad} or @code{arcmin} are simplified by converting to base units (radians), then evaluating with the angular mode temporarily set to radians. -@node Polynomials, Calculus, Simplifying Formulas, Algebra +@node Polynomials @section Polynomials A @dfn{polynomial} is a sum of terms which are coefficients times @@ -23443,7 +23443,7 @@ polynomial routines used in the above commands. @xref{Decomposing Polynomials}, for several useful functions for extracting the individual coefficients of a polynomial. -@node Calculus, Solving Equations, Polynomials, Algebra +@node Calculus @section Calculus @noindent @@ -23461,7 +23461,7 @@ readable way. * Taylor Series:: @end menu -@node Differentiation, Integration, Calculus, Calculus +@node Differentiation @subsection Differentiation @noindent @@ -23519,7 +23519,7 @@ Various higher-order derivatives can be formed in the obvious way, e.g., @samp{f'@var{}'2'3(x,y,z)} (@code{f} differentiated with respect to each argument once). -@node Integration, Customizing the Integrator, Differentiation, Calculus +@node Integration @subsection Integration @noindent @@ -23606,7 +23606,7 @@ table-lookup solutions of integrals. You might then wish to define rewrite rules for integration by parts, various kinds of substitutions, and so on. @xref{Rewrite Rules}. -@node Customizing the Integrator, Numerical Integration, Integration, Calculus +@node Customizing the Integrator @subsection Customizing the Integrator @noindent @@ -23732,7 +23732,7 @@ of times until no further changes are possible. Rewriting by finished, not at every step as for @code{IntegRules} and @code{IntegSimpRules}. -@node Numerical Integration, Taylor Series, Customizing the Integrator, Calculus +@node Numerical Integration @subsection Numerical Integration @noindent @@ -23770,7 +23770,7 @@ The integral of @samp{1/sqrt(x)} from 0 to 1 exists (it can be found by Calc's symbolic integrator, for example), but @kbd{a I} will fail because the integrand goes to infinity at one of the endpoints. -@node Taylor Series, , Numerical Integration, Calculus +@node Taylor Series @subsection Taylor Series @noindent @@ -23791,7 +23791,7 @@ If the @kbd{a i} command is unable to find a symbolic integral for a function, you can get an approximation by integrating the function's Taylor series. -@node Solving Equations, Numerical Solutions, Calculus, Algebra +@node Solving Equations @section Solving Equations @noindent @@ -23835,7 +23835,7 @@ another formula with @expr{x} set equal to @expr{y/3 - 2}. * Decomposing Polynomials:: @end menu -@node Multiple Solutions, Solving Systems of Equations, Solving Equations, Solving Equations +@node Multiple Solutions @subsection Multiple Solutions @noindent @@ -23949,7 +23949,7 @@ formula on the stack with Symbolic mode temporarily off.) Naturally, @kbd{a P} can only provide numerical roots if the polynomial coefficients are all numbers (real or complex). -@node Solving Systems of Equations, Decomposing Polynomials, Multiple Solutions, Solving Equations +@node Solving Systems of Equations @subsection Solving Systems of Equations @noindent @@ -24016,7 +24016,7 @@ Another way to deal with certain kinds of overdetermined systems of equations is the @kbd{a F} command, which does least-squares fitting to satisfy the equations. @xref{Curve Fitting}. -@node Decomposing Polynomials, , Solving Systems of Equations, Solving Equations +@node Decomposing Polynomials @subsection Decomposing Polynomials @noindent @@ -24160,7 +24160,7 @@ if necessary) by its content. If the input polynomial has rational coefficients, the result will have integer coefficients in simplest terms. -@node Numerical Solutions, Curve Fitting, Solving Equations, Algebra +@node Numerical Solutions @section Numerical Solutions @noindent @@ -24179,7 +24179,7 @@ on numerical data.) * Numerical Systems of Equations:: @end menu -@node Root Finding, Minimization, Numerical Solutions, Numerical Solutions +@node Root Finding @subsection Root Finding @noindent @@ -24255,7 +24255,7 @@ form on the stack, it will normally display an explanation for why no root was found. If you miss this explanation, press @kbd{w} (@code{calc-why}) to get it back. -@node Minimization, Numerical Systems of Equations, Root Finding, Numerical Solutions +@node Minimization @subsection Minimization @noindent @@ -24327,7 +24327,7 @@ the initial guess is a complex number the variable will be minimized over the complex numbers; if it is real or an interval it will be minimized over the reals. -@node Numerical Systems of Equations, , Minimization, Numerical Solutions +@node Numerical Systems of Equations @subsection Systems of Equations @noindent @@ -24353,7 +24353,7 @@ multidimensional @kbd{a R}, the formula being minimized should still be a single formula, @emph{not} a vector. Beware that multidimensional minimization is currently @emph{very} slow. -@node Curve Fitting, Summations, Numerical Solutions, Algebra +@node Curve Fitting @section Curve Fitting @noindent @@ -24379,7 +24379,7 @@ plotted after the formula is determined. This will be indicated by a * Interpolation:: @end menu -@node Linear Fits, Polynomial and Multilinear Fits, Curve Fitting, Curve Fitting +@node Linear Fits @subsection Linear Fits @noindent @@ -24545,7 +24545,7 @@ vector of @expr{y} values. If there is only one independent variable, the @expr{x} values can be either a one-row matrix or a plain vector, in which case the @kbd{C-u} prefix is the same as a @w{@kbd{C-u 2}} prefix. -@node Polynomial and Multilinear Fits, Error Estimates for Fits, Linear Fits, Curve Fitting +@node Polynomial and Multilinear Fits @subsection Polynomial and Multilinear Fits @noindent @@ -24660,7 +24660,7 @@ would enter @kbd{a F ' 2.3 + a x}. Another class of models that will work but must be entered by hand are multinomial fits, e.g., @expr{a + b x + c y + d x^2 + e y^2 + f x y}. -@node Error Estimates for Fits, Standard Nonlinear Models, Polynomial and Multilinear Fits, Curve Fitting +@node Error Estimates for Fits @subsection Error Estimates for Fits @noindent @@ -24821,7 +24821,7 @@ in the input, and thus there is no redundant information left over to use for a confidence test. @end enumerate -@node Standard Nonlinear Models, Curve Fitting Details, Error Estimates for Fits, Curve Fitting +@node Standard Nonlinear Models @subsection Standard Nonlinear Models @noindent @@ -25005,7 +25005,7 @@ Fourier analysis, which is beyond the scope of the @kbd{a F} command. (Unfortunately, Calc does not currently have any facilities for taking Fourier and related transforms.) -@node Curve Fitting Details, Interpolation, Standard Nonlinear Models, Curve Fitting +@node Curve Fitting Details @subsection Curve Fitting Details @noindent @@ -25397,7 +25397,7 @@ linearizer was unable to put the model into the required form. The @code{efit} (corresponding to @kbd{H a F}) and @code{xfit} (for @kbd{I a F}) functions are completely analogous. -@node Interpolation, , Curve Fitting Details, Curve Fitting +@node Interpolation @subsection Polynomial Interpolation @kindex a p @@ -25454,7 +25454,7 @@ used by @kbd{H a p}. (The algorithm never generates these coefficients explicitly, and quotients of polynomials are beyond @w{@kbd{a F}}'s capabilities to fit.) -@node Summations, Logical Operations, Curve Fitting, Algebra +@node Summations @section Summations @noindent @@ -25615,7 +25615,7 @@ like @code{sum} and @code{prod}, but its result is simply a vector of the results. For example, @samp{table(a_i, i, 1, 7, 2)} produces @samp{[a_1, a_3, a_5, a_7]}. -@node Logical Operations, Rewrite Rules, Summations, Algebra +@node Logical Operations @section Logical Operations @noindent @@ -25993,7 +25993,7 @@ declarations are used when deciding whether a formula is true; it returns 0 when @code{dnonzero} would return 0 or leave itself in symbolic form.) -@node Rewrite Rules, , Logical Operations, Algebra +@node Rewrite Rules @section Rewrite Rules @noindent @@ -26035,7 +26035,7 @@ Calc formulas. * Examples of Rewrite Rules:: @end menu -@node Entering Rewrite Rules, Basic Rewrite Rules, Rewrite Rules, Rewrite Rules +@node Entering Rewrite Rules @subsection Entering Rewrite Rules @noindent @@ -26101,7 +26101,7 @@ Calc also accepts an obsolete notation for rules, as vectors @samp{[@var{old}, @var{new}]}. But because it is easily confused with a vector of two rules, the use of this notation is no longer recommended. -@node Basic Rewrite Rules, Conditional Rewrite Rules, Entering Rewrite Rules, Rewrite Rules +@node Basic Rewrite Rules @subsection Basic Rewrite Rules @noindent @@ -26145,7 +26145,7 @@ throughout the target formula until no further changes are possible (up to a limit of 100 times). Use @kbd{C-u 1 a r} to make only one change at a time. -@node Conditional Rewrite Rules, Algebraic Properties of Rewrite Rules, Basic Rewrite Rules, Rewrite Rules +@node Conditional Rewrite Rules @subsection Conditional Rewrite Rules @noindent @@ -26228,7 +26228,7 @@ the condition @samp{1} is always true (nonzero) so it has no effect on the functioning of the rule. (The rewrite compiler will ensure that it doesn't even impact the speed of matching the rule.) -@node Algebraic Properties of Rewrite Rules, Other Features of Rewrite Rules, Conditional Rewrite Rules, Rewrite Rules +@node Algebraic Properties of Rewrite Rules @subsection Algebraic Properties of Rewrite Rules @noindent @@ -26567,7 +26567,7 @@ In this example, we are still allowing the pattern-matcher to use all the algebra it can muster, but the righthand side will always simplify to a literal addition like @samp{f((-y) + x)}. -@node Other Features of Rewrite Rules, Composing Patterns in Rewrite Rules, Algebraic Properties of Rewrite Rules, Rewrite Rules +@node Other Features of Rewrite Rules @subsection Other Features of Rewrite Rules @noindent @@ -26969,7 +26969,7 @@ rule remembers only every fourth result. Note that @samp{remember(1)} is equivalent to @samp{remember}, and @samp{remember(0)} has no effect. @end table -@node Composing Patterns in Rewrite Rules, Nested Formulas with Rewrite Rules, Other Features of Rewrite Rules, Rewrite Rules +@node Composing Patterns in Rewrite Rules @subsection Composing Patterns in Rewrite Rules @noindent @@ -27138,7 +27138,7 @@ disastrous: since @code{a} was unbound so far, the pattern @samp{a} would have matched anything at all, and the pattern @samp{!!!a} therefore would @emph{not} have matched anything at all! -@node Nested Formulas with Rewrite Rules, Multi-Phase Rewrite Rules, Composing Patterns in Rewrite Rules, Rewrite Rules +@node Nested Formulas with Rewrite Rules @subsection Nested Formulas with Rewrite Rules @noindent @@ -27222,7 +27222,7 @@ integer, or @samp{inf} or @samp{-inf}. If @var{n} is omitted the @code{iterations} value from the rule set is used; if both are omitted, 100 is used. -@node Multi-Phase Rewrite Rules, Selections with Rewrite Rules, Nested Formulas with Rewrite Rules, Rewrite Rules +@node Multi-Phase Rewrite Rules @subsection Multi-Phase Rewrite Rules @noindent @@ -27343,7 +27343,7 @@ rules were finished, some components might be put away into vectors before they had a chance to recombine. By putting these rules in two separate phases, this problem is neatly avoided. -@node Selections with Rewrite Rules, Matching Commands, Multi-Phase Rewrite Rules, Rewrite Rules +@node Selections with Rewrite Rules @subsection Selections with Rewrite Rules @noindent @@ -27416,7 +27416,7 @@ purpose rules with @samp{select( )} hints inside them so that they will ``do the right thing'' in both @kbd{a r} and @kbd{j r}, both with and without selections. -@node Matching Commands, Automatic Rewrites, Selections with Rewrite Rules, Rewrite Rules +@node Matching Commands @subsection Matching Commands @noindent @@ -27468,7 +27468,7 @@ the meta-variables instead of the number 1. For example, @samp{vmatches(f(1,2), f(a,b))} returns @samp{[a := 1, b := 2]}. If the match fails, the function returns the number 0. -@node Automatic Rewrites, Debugging Rewrites, Matching Commands, Rewrite Rules +@node Automatic Rewrites @subsection Automatic Rewrites @noindent @@ -27642,7 +27642,7 @@ also apply @code{EvalRules} and @code{AlgSimpRules}. The variable @code{IntegSimpRules} contains simplification rules that are used only during integration by @kbd{a i}. -@node Debugging Rewrites, Examples of Rewrite Rules, Automatic Rewrites, Rewrite Rules +@node Debugging Rewrites @subsection Debugging Rewrites @noindent @@ -27662,7 +27662,7 @@ buffer (with @kbd{C-x k *Trace* @key{RET}}). If you leave it in existence and forget about it, all your future rewrite commands will be needlessly slow. -@node Examples of Rewrite Rules, , Debugging Rewrites, Rewrite Rules +@node Examples of Rewrite Rules @subsection Examples of Rewrite Rules @noindent @@ -27752,7 +27752,7 @@ results in the four-argument form, just append the two items of the rule set. (But remember that multi-phase rule sets don't work in @code{EvalRules}.) -@node Units, Store and Recall, Algebra, Top +@node Units @chapter Operating on Units @noindent @@ -27771,7 +27771,7 @@ begin with the @kbd{u} prefix key. * Musical Notes:: @end menu -@node Basic Operations on Units, The Units Table, Units, Units +@node Basic Operations on Units @section Basic Operations on Units @noindent @@ -27976,7 +27976,7 @@ is also the actual name of another unit; @samp{1e-15 t} would normally be considered a ``femto-ton,'' but it is written as @samp{1000 at} (1000 atto-tons) instead because @code{ft} would be confused with feet. -@node The Units Table, Predefined Units, Basic Operations on Units, Units +@node The Units Table @section The Units Table @noindent @@ -28033,7 +28033,7 @@ for the expression @samp{62 km^2 g / s^2 mol K}, the description is command uses the English descriptions that appear in the righthand column of the Units Table. -@node Predefined Units, User-Defined Units, The Units Table, Units +@node Predefined Units @section Predefined Units @noindent @@ -28130,7 +28130,7 @@ really is unitless.) @c Describe angular units, luminosity vs. steradians problem. -@node User-Defined Units, Logarithmic Units, Predefined Units, Units +@node User-Defined Units @section User-Defined Units @noindent @@ -28214,7 +28214,7 @@ was already a set of user-defined units in your Calc init file, it is replaced by the new set. (@xref{General Mode Commands}, for a way to tell Calc to use a different file for the Calc init file.) -@node Logarithmic Units, Musical Notes, User-Defined Units, Units +@node Logarithmic Units @section Logarithmic Units The units @code{dB} (decibels) and @code{Np} (nepers) are logarithmic @@ -28453,7 +28453,7 @@ number; the @kbd{l /} (@code{calc-lu-divide}) [@code{lupdiv}] and unit by a number. Note that the reference quantities don't play a role in this arithmetic. -@node Musical Notes, , Logarithmic Units, Units +@node Musical Notes @section Musical Notes Calc can convert between musical notes and their associated @@ -28521,7 +28521,7 @@ notation @code{B_3 + 99.9962592773 cents}; with the default value of @code{1}, Calc converts @code{261.625 Hz} to @code{C_4}. -@node Store and Recall, Graphics, Units, Top +@node Store and Recall @chapter Storing and Recalling @noindent @@ -28538,7 +28538,7 @@ to variables use the @kbd{s} prefix key. * Evaluates-To Operator:: @end menu -@node Storing Variables, Recalling Variables, Store and Recall, Store and Recall +@node Storing Variables @section Storing Variables @noindent @@ -28766,7 +28766,7 @@ stored in the Calc variable @code{pi}. If one of the other special variables, @code{inf}, @code{uinf} or @code{nan}, is given a value, its original behavior can be restored by voiding it with @kbd{s u}. -@node Recalling Variables, Operations on Variables, Storing Variables, Store and Recall +@node Recalling Variables @section Recalling Variables @noindent @@ -28789,7 +28789,7 @@ latter will produce an error message. The @kbd{r} prefix may be followed by a digit, so that @kbd{r 9} is equivalent to @kbd{s r 9}. -@node Operations on Variables, Let Command, Recalling Variables, Store and Recall +@node Operations on Variables @section Other Operations on Variables @noindent @@ -28946,7 +28946,7 @@ omits the same set of variables as @w{@kbd{s p @key{RET}}}; the difference is that @kbd{s i} will store the variables in any buffer, and it also stores in a more human-readable format.) -@node Let Command, Evaluates-To Operator, Operations on Variables, Store and Recall +@node Let Command @section The Let Command @noindent @@ -28984,7 +28984,7 @@ example, letting @expr{n=2} in @samp{f(n pi)} with @kbd{a b} will produce @samp{f(2 pi)}, whereas @kbd{s l} would give @samp{f(6.28)} since the evaluation step will also evaluate @code{pi}. -@node Evaluates-To Operator, , Let Command, Store and Recall +@node Evaluates-To Operator @section The Evaluates-To Operator @noindent @@ -29110,7 +29110,7 @@ and value from the stack and replaces them with an assignment. @TeX{} language output. The @dfn{eqn} mode gives similar treatment to @samp{=>}. -@node Graphics, Kill and Yank, Store and Recall, Top +@node Graphics @chapter Graphics @noindent @@ -29141,7 +29141,7 @@ POSIX-compatible terminal. * Devices:: @end menu -@node Basic Graphics, Three Dimensional Graphics, Graphics, Graphics +@node Basic Graphics @section Basic Graphics @noindent @@ -29227,7 +29227,7 @@ to use @kbd{g c} if you don't want to---if you give another @kbd{g f} or @kbd{g p} command later on, it will reuse the existing graphics window if there is one. -@node Three Dimensional Graphics, Managing Curves, Basic Graphics, Graphics +@node Three Dimensional Graphics @section Three-Dimensional Graphics @kindex g F @@ -29295,7 +29295,7 @@ helix (a three-dimensional spiral). As for @kbd{g f}, each of ``x'', ``y'', and ``z'' may instead be variables containing the relevant data. -@node Managing Curves, Graphics Options, Three Dimensional Graphics, Graphics +@node Managing Curves @section Managing Curves @noindent @@ -29454,7 +29454,7 @@ Provided everything is set up properly, @kbd{g p} will plot to the screen unless you have specified otherwise and @kbd{g P} will always plot to the printer. -@node Graphics Options, Devices, Managing Curves, Graphics +@node Graphics Options @section Graphics Options @noindent @@ -29620,7 +29620,7 @@ lines, and the third curve to have lines in style 3. Point styles will still be assigned automatically, but you could store another vector in @code{PointStyles} to define them, too. -@node Devices, , Graphics Options, Graphics +@node Devices @section Graphical Devices @noindent @@ -29813,7 +29813,7 @@ except that it also views the @file{*Gnuplot Trail*} buffer so that you can see the process being killed. This is better if you are killing GNUPLOT because you think it has gotten stuck. -@node Kill and Yank, Keypad Mode, Graphics, Top +@node Kill and Yank @chapter Kill and Yank Functions @noindent @@ -29833,7 +29833,7 @@ work with Calc from a regular editing buffer. @xref{Embedded Mode}. * X Cut and Paste:: @end menu -@node Killing From Stack, Yanking Into Stack, Kill and Yank, Kill and Yank +@node Killing From Stack @section Killing from the Stack @noindent @@ -29877,7 +29877,7 @@ with no argument copies only the number itself into the kill ring, whereas @kbd{C-k} with a prefix argument of 1 copies the number with its trailing newline. -@node Yanking Into Stack, Saving Into Registers, Killing From Stack, Kill and Yank +@node Yanking Into Stack @section Yanking into the Stack @noindent @@ -29909,7 +29909,7 @@ allow the text being yanked to be read in a different base (such as if the text is an algebraic expression), then the prefix will have no effect. -@node Saving Into Registers, Inserting From Registers, Yanking Into Stack, Kill and Yank +@node Saving Into Registers @section Saving into Registers @noindent @@ -29943,7 +29943,7 @@ region to the beginning of the register contents. Both commands take @kbd{C-u} arguments, which will cause the region to be deleted after being added to the register. -@node Inserting From Registers, Grabbing From Buffers, Saving Into Registers, Kill and Yank +@node Inserting From Registers @section Inserting from Registers @noindent @kindex r i @@ -29955,7 +29955,7 @@ within Calc, then the full internal structure of the contents will be inserted into the Calculator, otherwise whatever text is in the register is reparsed and then inserted into the Calculator. -@node Grabbing From Buffers, Yanking Into Buffers, Inserting From Registers, Kill and Yank +@node Grabbing From Buffers @section Grabbing from Other Buffers @noindent @@ -30072,7 +30072,7 @@ handy way to find the product of a vector or matrix of numbers. @xref{Statistical Operations}. Another approach would be to use an explicit column reduction command, @kbd{V R : *}. -@node Yanking Into Buffers, X Cut and Paste, Grabbing From Buffers, Kill and Yank +@node Yanking Into Buffers @section Yanking into Other Buffers @noindent @@ -30126,7 +30126,7 @@ The @kbd{C-x * y} key sequence is equivalent to @kbd{y} except that it can be typed anywhere, not just in Calc. This provides an easy way to guarantee that Calc knows which editing buffer you want to use! -@node X Cut and Paste, , Yanking Into Buffers, Kill and Yank +@node X Cut and Paste @section X Cut and Paste @noindent @@ -30155,7 +30155,7 @@ whole line. So you can usually transfer a single number into Calc just by double-clicking on it in the shell, then middle-clicking in the Calc window. -@node Keypad Mode, Embedded Mode, Kill and Yank, Top +@node Keypad Mode @chapter Keypad Mode @noindent @@ -30207,7 +30207,7 @@ original buffer. * Keypad Modes Menu:: @end menu -@node Keypad Main Menu, Keypad Functions Menu, Keypad Mode, Keypad Mode +@node Keypad Main Menu @section Main Menu @smallexample @@ -30338,7 +30338,7 @@ running standalone (the @code{full-calc-keypad} command appeared in the command line that started Emacs), then @kbd{OFF} is replaced with @kbd{EXIT}; clicking on this actually exits Emacs itself. -@node Keypad Functions Menu, Keypad Binary Menu, Keypad Main Menu, Keypad Mode +@node Keypad Functions Menu @section Functions Menu @smallexample @@ -30381,7 +30381,7 @@ same limit as last time. @key{NXTP} finds the next prime after a number. @kbd{INV NXTP} finds the previous prime. -@node Keypad Binary Menu, Keypad Vectors Menu, Keypad Functions Menu, Keypad Mode +@node Keypad Binary Menu @section Binary Menu @smallexample @@ -30414,7 +30414,7 @@ and allows you to enter a new word size. You can respond to the prompt using either the keyboard or the digits and @key{ENTER} from the keypad. The initial word size is 32 bits. -@node Keypad Vectors Menu, Keypad Modes Menu, Keypad Binary Menu, Keypad Mode +@node Keypad Vectors Menu @section Vectors Menu @smallexample @@ -30496,7 +30496,7 @@ With @key{INV}, @key{HYP}, or @key{INV} and @key{HYP}, the @kbd{"x"} key pushes the variable names @expr{y}, @expr{z}, and @expr{t}, respectively. -@node Keypad Modes Menu, , Keypad Vectors Menu, Keypad Mode +@node Keypad Modes Menu @section Modes Menu @smallexample @@ -30552,7 +30552,7 @@ The @key{STO} and @key{RCL} keys are analogous to @kbd{s t} and variables are not available in Keypad mode.) You can also use, for example, @kbd{STO + 3} to add to register 3. -@node Embedded Mode, Programming, Keypad Mode, Top +@node Embedded Mode @chapter Embedded Mode @noindent @@ -30569,7 +30569,7 @@ linked to the stack and this copying is taken care of automatically. * Customizing Embedded Mode:: @end menu -@node Basic Embedded Mode, More About Embedded Mode, Embedded Mode, Embedded Mode +@node Basic Embedded Mode @section Basic Embedded Mode @noindent @@ -30733,7 +30733,7 @@ own Undo command (typed before you turn Embedded mode back off) will not do you any good, because as far as Calc is concerned you haven't done anything with this formula yet. -@node More About Embedded Mode, Assignments in Embedded Mode, Basic Embedded Mode, Embedded Mode +@node More About Embedded Mode @section More About Embedded Mode @noindent @@ -30917,7 +30917,7 @@ embedded formula at the current point as if by @kbd{`} (@code{calc-edit}). Embedded mode does not have to be enabled for this to work. Press @kbd{C-c C-c} to finish the edit, or @kbd{C-x k} to cancel. -@node Assignments in Embedded Mode, Mode Settings in Embedded Mode, More About Embedded Mode, Embedded Mode +@node Assignments in Embedded Mode @section Assignments in Embedded Mode @noindent @@ -31143,7 +31143,7 @@ Operator}. When you turn automatic recomputation back on, the stack will be updated but the Embedded buffer will not; you must use @kbd{C-x * u} to update the buffer by hand. -@node Mode Settings in Embedded Mode, Customizing Embedded Mode, Assignments in Embedded Mode, Embedded Mode +@node Mode Settings in Embedded Mode @section Mode Settings in Embedded Mode @kindex m e @@ -31288,7 +31288,7 @@ annotations at all. When Embedded mode is not enabled, mode-recording modes except for @code{Save} have no effect. -@node Customizing Embedded Mode, , Mode Settings in Embedded Mode, Embedded Mode +@node Customizing Embedded Mode @section Customizing Embedded Mode @noindent @@ -31440,7 +31440,7 @@ is simply a newline, @code{"\n"}, but may be different for different major modes. If you change this, it is a good idea still to end with a newline so that mode annotations will appear on lines by themselves. -@node Programming, Copying, Embedded Mode, Top +@node Programming @chapter Programming @noindent @@ -31491,7 +31491,7 @@ described elsewhere; @pxref{User-Defined Compositions}.) * Lisp Definitions:: @end menu -@node Creating User Keys, Keyboard Macros, Programming, Programming +@node Creating User Keys @section Creating User Keys @noindent @@ -31566,7 +31566,7 @@ of a user key. This works for keys that have been defined by either keyboard macros or formulas; further details are contained in the relevant following sections. -@node Keyboard Macros, Invocation Macros, Creating User Keys, Programming +@node Keyboard Macros @section Programming with Keyboard Macros @noindent @@ -31609,7 +31609,7 @@ analogous to those provided by a traditional programmable calculator. * Queries in Macros:: @end menu -@node Naming Keyboard Macros, Conditionals in Macros, Keyboard Macros, Keyboard Macros +@node Naming Keyboard Macros @subsection Naming Keyboard Macros @noindent @@ -31659,7 +31659,7 @@ of spelled-out keystrokes and defines it as the current keyboard macro. It is a convenient way to define a keyboard macro that has been stored in a file, or to define a macro without executing it at the same time. -@node Conditionals in Macros, Loops in Macros, Naming Keyboard Macros, Keyboard Macros +@node Conditionals in Macros @subsection Conditionals in Keyboard Macros @noindent @@ -31735,7 +31735,7 @@ If Calc gets stuck while skipping characters during the definition of a macro, type @kbd{Z C-g} to cancel the definition. (Typing plain @kbd{C-g} actually adds a @kbd{C-g} keystroke to the macro.) -@node Loops in Macros, Local Values in Macros, Conditionals in Macros, Keyboard Macros +@node Loops in Macros @subsection Loops in Keyboard Macros @noindent @@ -31828,7 +31828,7 @@ as easily as in a macro definition. @xref{Conditionals in Macros}, for some additional notes about conditional and looping commands. -@node Local Values in Macros, Queries in Macros, Loops in Macros, Keyboard Macros +@node Local Values in Macros @subsection Local Values in Macros @noindent @@ -31893,7 +31893,7 @@ The contents of the stack and trail, values of non-quick variables, and other settings such as the language mode and the various display modes, are @emph{not} affected by @kbd{Z `} and @kbd{Z '}. -@node Queries in Macros, , Local Values in Macros, Keyboard Macros +@node Queries in Macros @subsection Queries in Keyboard Macros @c @noindent @@ -31933,7 +31933,7 @@ keyboard input during a keyboard macro. In particular, you can use any Calculator operations interactively before pressing @kbd{C-M-c} to return control to the keyboard macro. -@node Invocation Macros, Algebraic Definitions, Keyboard Macros, Programming +@node Invocation Macros @section Invocation Macros @kindex C-x * z @@ -31966,7 +31966,7 @@ The @kbd{m m} command saves the last invocation macro defined by @kbd{Z I} along with all the other Calc mode settings. @xref{General Mode Commands}. -@node Algebraic Definitions, Lisp Definitions, Invocation Macros, Programming +@node Algebraic Definitions @section Programming with Formulas @noindent @@ -32078,7 +32078,7 @@ default simplifications cures this problem: The definition will be stored in symbolic form without ever activating the @code{deriv} function. Press @kbd{m D} to turn the default simplifications back on afterwards. -@node Lisp Definitions, , Algebraic Definitions, Programming +@node Lisp Definitions @section Programming with Lisp @noindent @@ -32114,7 +32114,7 @@ for the true Lisp enthusiast. * Internals:: @end menu -@node Defining Functions, Defining Simple Commands, Lisp Definitions, Lisp Definitions +@node Defining Functions @subsection Defining New Functions @noindent @@ -32335,7 +32335,7 @@ property are @code{defmath} calls, @code{define-key} calls that modify the Calc key map, and any calls that redefine things defined inside Calc. Ordinary @code{defun}s need not be enclosed with @code{calc-define}. -@node Defining Simple Commands, Defining Stack Commands, Defining Functions, Lisp Definitions +@node Defining Simple Commands @subsection Defining New Simple Commands @noindent @@ -32497,7 +32497,7 @@ decreases the precision. (run-hooks 'calc-check-defines) @end smallexample -@node Defining Stack Commands, Argument Qualifiers, Defining Simple Commands, Lisp Definitions +@node Defining Stack Commands @subsection Defining New Stack-Based Commands @noindent @@ -32599,7 +32599,7 @@ number of objects to remove from the stack and pass to the function. In this case, the integer @var{num} serves as a default number of arguments to be used when no prefix is supplied. -@node Argument Qualifiers, Example Definitions, Defining Stack Commands, Lisp Definitions +@node Argument Qualifiers @subsection Argument Qualifiers @noindent @@ -32686,7 +32686,7 @@ expands to which performs the necessary checks and conversions before executing the body of the function. -@node Example Definitions, Calling Calc from Your Programs, Argument Qualifiers, Lisp Definitions +@node Example Definitions @subsection Example Definitions @noindent @@ -32699,7 +32699,7 @@ These programs make use of some of the Calculator's internal functions; * Sine Example:: @end menu -@node Bit Counting Example, Sine Example, Example Definitions, Example Definitions +@node Bit Counting Example @subsubsection Bit-Counting @noindent @@ -32739,7 +32739,7 @@ Emacs Lisp function: count)) @end smallexample -@node Sine Example, , Bit Counting Example, Example Definitions +@node Sine Example @subsubsection The Sine Function @noindent @@ -32823,7 +32823,7 @@ it carefully as shown in this second example. For quick-and-dirty programs, when you know that your own use of the sine function will never encounter a large argument, a simpler program like the first one shown is fine. -@node Calling Calc from Your Programs, Internals, Example Definitions, Lisp Definitions +@node Calling Calc from Your Programs @subsection Calling Calc from Your Lisp Programs @noindent @@ -33217,7 +33217,7 @@ Note the use of @code{insert-before-markers} when changing between ``F'' and ``C'', so that the character winds up before the cursor instead of after it. -@node Internals, , Calling Calc from Your Programs, Lisp Definitions +@node Internals @subsection Calculator Internals @noindent @@ -33257,7 +33257,7 @@ you can't prove this file will already be loaded. * Hooks:: @end menu -@node Data Type Formats, Interactive Lisp Functions, Internals, Internals +@node Data Type Formats @subsubsection Data Type Formats @noindent @@ -33377,7 +33377,7 @@ functions which are the outer-level call in an expression whose value is about to be pushed on the stack; this feature is considered obsolete and is not used by any built-in Calc functions.) -@node Interactive Lisp Functions, Stack Lisp Functions, Data Type Formats, Internals +@node Interactive Lisp Functions @subsubsection Interactive Functions @noindent @@ -33438,7 +33438,7 @@ i.e., if the Inverse (@kbd{I} key) flag was set. This predicate is the analogous function for the @kbd{H} key. @end defun -@node Stack Lisp Functions, Predicates, Interactive Lisp Functions, Internals +@node Stack Lisp Functions @subsubsection Stack-Oriented Functions @noindent @@ -33625,7 +33625,7 @@ is suppressed, but a flag is set so that the entire stack will be refreshed rather than just the top few elements when the macro finishes.) @end defun -@node Predicates, Computational Lisp Functions, Stack Lisp Functions, Internals +@node Predicates @subsubsection Predicates @noindent @@ -33893,7 +33893,7 @@ This signals an error that will be reported as a floating-point overflow. This signals a floating-point underflow. @end defun -@node Computational Lisp Functions, Vector Lisp Functions, Predicates, Internals +@node Computational Lisp Functions @subsubsection Computational Functions @noindent @@ -34233,7 +34233,7 @@ it returns 1 or 3. If @var{n} is anything else, this function returns @code{nil}. @end defun -@node Vector Lisp Functions, Symbolic Lisp Functions, Computational Lisp Functions, Internals +@node Vector Lisp Functions @subsubsection Vector Functions @noindent @@ -34370,7 +34370,7 @@ is true, with the side effect of exchanging the first two rows of @var{m}. @end defun -@node Symbolic Lisp Functions, Formatting Lisp Functions, Vector Lisp Functions, Internals +@node Symbolic Lisp Functions @subsubsection Symbolic Functions @noindent @@ -34941,7 +34941,7 @@ Return a copy of @var{expr} with everything but units variables replaced by ones. @end defun -@node Formatting Lisp Functions, Hooks, Symbolic Lisp Functions, Internals +@node Formatting Lisp Functions @subsubsection I/O and Formatting Functions @noindent @@ -35087,7 +35087,7 @@ If composition @var{c} is a ``flat'' composition, return the last @comment @noindent @comment (This section is currently unfinished.) -@node Hooks, , Formatting Lisp Functions, Internals +@node Hooks @subsubsection Hooks @noindent @@ -35242,15 +35242,15 @@ used the first time, your hook should add a variable to the list and also call @code{make-local-variable} itself. @end defvar -@node Copying, GNU Free Documentation License, Programming, Top +@node Copying @appendix GNU GENERAL PUBLIC LICENSE @include gpl.texi -@node GNU Free Documentation License, Customizing Calc, Copying, Top +@node GNU Free Documentation License @appendix GNU Free Documentation License @include doclicense.texi -@node Customizing Calc, Reporting Bugs, GNU Free Documentation License, Top +@node Customizing Calc @appendix Customizing Calc The usual prefix for Calc is the key sequence @kbd{C-x *}. If you wish @@ -35644,7 +35644,7 @@ choose from, or the user can enter their own date. The default value of @code{calc-gregorian-switch} is @code{nil}. @end defvar -@node Reporting Bugs, Summary, Customizing Calc, Top +@node Reporting Bugs @appendix Reporting Bugs @noindent @@ -35669,7 +35669,7 @@ The latest version of Calc is available from Savannah, in the Emacs repository. See @uref{https://savannah.gnu.org/projects/emacs}. @c [summary] -@node Summary, Key Index, Reporting Bugs, Top +@node Summary @appendix Calc Summary @noindent @@ -36940,12 +36940,12 @@ grabs the @var{n}th mode value only. @c [end-summary] -@node Key Index, Command Index, Summary, Top +@node Key Index @unnumbered Index of Key Sequences @printindex ky -@node Command Index, Function Index, Key Index, Top +@node Command Index @unnumbered Index of Calculator Commands Since all Calculator commands begin with the prefix @samp{calc-}, the @@ -36955,7 +36955,7 @@ types @samp{calc-} for you. Thus, @kbd{x last-args} is short for @printindex pg -@node Function Index, Concept Index, Command Index, Top +@node Function Index @unnumbered Index of Algebraic Functions This is a list of built-in functions and operators usable in algebraic @@ -36968,12 +36968,12 @@ Calc keystrokes and can also be found in the Calc Summary. @printindex tp -@node Concept Index, Variable Index, Function Index, Top +@node Concept Index @unnumbered Concept Index @printindex cp -@node Variable Index, Lisp Function Index, Concept Index, Top +@node Variable Index @unnumbered Index of Variables The variables in this list that do not contain dashes are accessible @@ -36985,7 +36985,7 @@ in your Calc init file or @file{.emacs} file. @printindex vr -@node Lisp Function Index, , Variable Index, Top +@node Lisp Function Index @unnumbered Index of Lisp Math Functions The following functions are meant to be used with @code{defmath}, not commit fa33870e9f6335d47006d1e998785b5c3e7c7fbe Author: Glenn Morris Date: Thu May 13 09:08:40 2021 -0700 Remove more hand-written node pointers in doc/misc * doc/misc/ede.texi, doc/misc/mh-e.texi, doc/misc/reftex.texi: * doc/misc/todo-mode.texi: Remove hand-written node pointers. diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi index a53f879c96..a0f316f848 100644 --- a/doc/misc/ede.texi +++ b/doc/misc/ede.texi @@ -67,7 +67,7 @@ modify this GNU manual.'' @contents -@node Top, EDE Project Concepts, (dir), (dir) +@node Top @top EDE @comment node-name, next, previous, up @@ -95,7 +95,7 @@ learn and adopt GNU ways of doing things. * GNU Free Documentation License:: The license for this documentation. @end menu -@node EDE Project Concepts, EDE Mode, Top, Top +@node EDE Project Concepts @chapter @ede{} Project Concepts @ede{} is a generic interface for managing projects. It specifies a @@ -130,7 +130,7 @@ of search to files in a single target, or to discover the location of documentation or interface files. @ede{} can provide this information. -@node EDE Mode, Quick Start, EDE Project Concepts, Top +@node EDE Mode @chapter @ede{} Mode @ede{} is implemented as a minor mode, which augments other modes such @@ -147,7 +147,7 @@ bar. This menu provides several menu items for high-level @ede{} commands. These menu items, and their corresponding keybindings, are independent of the type of project you are actually working on. -@node Quick Start, Creating a project, EDE Mode, Top +@node Quick Start @chapter Quick Start Once you have @ede{} enabled, you can create a project. This chapter @@ -443,7 +443,7 @@ C-c . R @key{RET} @key{RET} If your program takes command line arguments, you can type them in when it offers the command line you want to use to run your program. -@node Creating a project, Modifying your project, Quick Start, Top +@node Creating a project @chapter Creating a project To create a new project, first visit a file that you want to include @@ -488,7 +488,7 @@ the top-most project's makefile as a starting place for the build. How the toplevel project handles subprojects in the build process is dependent on that project's type. -@node Modifying your project, Building and Debugging, Creating a project, Top +@node Modifying your project @chapter Modifying your project In this chapter, we describe the generic features for manipulating @@ -504,7 +504,7 @@ detailed information about exactly what these features do. * EDE Project Features:: @end menu -@node Add/Remove target, Add/Remove files, Modifying your project, Modifying your project +@node Add/Remove target @section Add/Remove target To create a new target, type @kbd{C-c . t} (@code{ede-new-target}) or @@ -520,7 +520,7 @@ To remove a target from the project, type @kbd{M-x ede-delete-target}, or use the @samp{Remove Target} menu item in the @samp{Project Options} submenu. -@node Add/Remove files, Customize Features, Add/Remove target, Modifying your project +@node Add/Remove files @section Add/Remove files To add the current file to an existing target, type @kbd{C-c . a} @@ -541,7 +541,7 @@ not wish to add the file to any target, you can choose @samp{none}. You can customize this behavior with the variable @command{ede-auto-add-method}. -@node Customize Features, Project Local Variables, Add/Remove files, Modifying your project +@node Customize Features @section Customize Features A project, and its targets, are objects using the @samp{EIEIO} object @@ -561,7 +561,7 @@ object, you can edit the file by typing @kbd{C-c . e} (@code{ede-edit-file-target}). You should ``rescan'' the project afterwards (@pxref{Miscellaneous commands}). -@node Project Local Variables, EDE Project Features, Customize Features, Modifying your project +@node Project Local Variables @section Project Local Variables EDE projects can store and manager project local variables. The @@ -598,7 +598,7 @@ the format is an association list. For example: (compile-command . "make -f MyCustomMakefile all"))) @end example -@node EDE Project Features, , Project Local Variables, Modifying your project +@node EDE Project Features @section EDE Project Features This section details user facing features of an @ede{} @samp{Make} @@ -618,7 +618,7 @@ additional details. * Configurations:: @end menu -@node Changing Compilers and Flags, Configurations, EDE Project Features, EDE Project Features +@node Changing Compilers and Flags @subsection Changing Compilers and Flags Targets that build stuff need compilers. To change compilers, you @@ -638,7 +638,7 @@ see what commands are inserted. Once you have determined the variable you need to modify, you can add a configuration for it. @xref{Configurations}. -@node Configurations, , Changing Compilers and Flags, EDE Project Features +@node Configurations @subsection Configurations Configurations specify different ways to build a project. For @@ -658,7 +658,7 @@ block for ``configurations''. Add a new named configuration here. To switch between different active configurations, modify the ``configuration default'' slot. -@node Building and Debugging, Miscellaneous commands, Modifying your project, Top +@node Building and Debugging @chapter Building and Debugging @ede{} provides the following ``project-aware'' compilation and @@ -677,7 +677,7 @@ Build a distribution file for your project. These commands are also available from the @samp{Development} menu. -@node Miscellaneous commands, Extending EDE, Building and Debugging, Top +@node Miscellaneous commands @chapter Miscellaneous commands If you opt to go in and edit @ede{} project files directly---for @@ -716,7 +716,7 @@ To activate the speedbar in this mode, type @kbd{C-c . s} * Simple projects:: Projects @ede{} doesn't manage. @end menu -@node Make and Automake projects, Automake direct projects, Miscellaneous commands, Miscellaneous commands +@node Make and Automake projects @section Make and Automake projects A project of @samp{ede-project} type creates a file called @@ -728,7 +728,7 @@ in @samp{Makefile} mode, then this project will autogenerate a routines will also import and maintain a configure.am script and a host of other files required by Automake. -@node Automake direct projects, Simple projects, Make and Automake projects, Miscellaneous commands +@node Automake direct projects @section Automake direct projects The project type that reads @file{Makefile.am} directly is derived @@ -738,7 +738,7 @@ distributed independently. This mode eventually became @ede{}. The not generate them automatically, or create new ones. As such, it is useful as a browsing tool, or as maintenance in managing file lists. -@node Simple projects, , Automake direct projects, Miscellaneous commands +@node Simple projects @section Simple Projects There is a wide array of simple projects. In this case a simple @@ -756,7 +756,7 @@ belonging to a project, but doesn't provide many features of a typical * Custom Locate:: Customizing how to locate files in a simple project @end menu -@node ede-cpp-root, ede-emacs, Simple projects, Simple projects +@node ede-cpp-root @subsection ede-cpp-root The @code{ede-cpp-root} project type allows you to create a single @@ -897,7 +897,7 @@ of project. @xref{ede-cpp-root-project}, for details about the class that defines the @code{ede-cpp-root} project type. -@node ede-emacs, ede-linux, ede-cpp-root, Simple projects +@node ede-emacs @subsection ede-emacs The @code{ede-emacs} project automatically identifies an Emacs source @@ -906,7 +906,7 @@ tree, and enables EDE project mode for it. It pre-populates the C Preprocessor symbol map for correct parsing, and has an optimized include file identification function. -@node ede-linux, ede-generic-project, ede-emacs, Simple projects +@node ede-linux @subsection ede-linux The @code{ede-linux} project will automatically identify a Linux @@ -921,7 +921,7 @@ directory and its architecture, respectively. The default is to assume that the build happens in the source directory and to auto-detect the architecture; if the auto-detection fails, you will be asked. -@node ede-generic-project, Custom Locate, ede-linux, Simple projects +@node ede-generic-project @subsection ede-generic-project The @code{ede-generic-project} is a project system that makes it easy @@ -972,7 +972,7 @@ This example project will detect any directory with the file Customization of the project will allow you to make build and debug commands more precise. -@node Custom Locate, , ede-generic-project, Simple projects +@node Custom Locate @subsection Custom Locate The various simple project styles all have one major drawback, which @@ -1014,7 +1014,7 @@ simple example. More on idutils and cscope is in the CEDET manual, and they each have their own section. -@node Extending EDE, GNU Free Documentation License, Miscellaneous commands, Top +@node Extending EDE @chapter Extending @ede{} This chapter is intended for users who want to write new parts or fix @@ -1069,7 +1069,7 @@ examples. * Compilers:: Details of compiler classes. @end menu -@node Development Overview, Detecting a Project, Extending EDE, Extending EDE +@node Development Overview @section Development Overview @ede{} is made up of a series of classes implemented with @eieio{}. @@ -1161,7 +1161,7 @@ Here is a high-level UML diagram for the @ede{} system created with @cogre{}.. @end example -@node Detecting a Project, User interface methods, Development Overview, Extending EDE +@node Detecting a Project @section Detecting a Project Project detection happens with the list of @code{ede-project-autoload} @@ -1226,7 +1226,7 @@ to the global list of all projects. All subprojects are then created and assembled into the project data structures. -@node User interface methods, Base project methods, Detecting a Project, Extending EDE +@node User interface methods @section User interface methods These methods are core behaviors associated with user commands. @@ -1258,7 +1258,7 @@ Make a distribution (tar archive) of the project. Rescan a project file, changing the data in the existing objects. @end table -@node Base project methods, Sourcecode objects, User interface methods, Extending EDE +@node Base project methods @section Base project methods These methods are important for querying base information from project @@ -1296,7 +1296,7 @@ stored in. List all documentation a project or target is responsible for. @end table -@node Sourcecode objects, Compiler and Linker objects, Base project methods, Extending EDE +@node Sourcecode objects @section Sourcecode objects @ede{} projects track source file / target associates via source code @@ -1342,7 +1342,7 @@ In this case, the garbage pattern is the same. @xref{Sourcecode}. -@node Compiler and Linker objects, Project, Sourcecode objects, Extending EDE +@node Compiler and Linker objects @section Compiler and Linker objects In order for a target to create a @file{Makefile}, it must know how to @@ -1403,7 +1403,7 @@ See @file{ede-proj-obj.el} for examples of the combination. @defindex sc @defindex cm -@node Project, Targets, Compiler and Linker objects, Extending EDE +@node Project @section Project @menu @@ -1417,7 +1417,7 @@ See @file{ede-proj-obj.el} for examples of the combination. * ede-step-project:: @end menu -@node ede-project-placeholder, ede-project, Project, Project +@node ede-project-placeholder @subsection ede-project-placeholder @pjindex ede-project-placeholder @@ -1503,7 +1503,7 @@ Make sure placeholder @var{THIS} is replaced with the real thing, and pass throu Make sure placeholder @var{THIS} is replaced with the real thing, and pass through. @end deffn -@node ede-project, ede-cpp-root-project, ede-project-placeholder, Project +@node ede-project @subsection ede-project @pjindex ede-project @@ -1789,7 +1789,7 @@ Retrieves the slot @code{menu} from an object of class @code{ede-project} Commit change to local variables in @var{PROJ}. @end deffn -@node ede-cpp-root-project, ede-simple-project, ede-project, Project +@node ede-cpp-root-project @subsection ede-cpp-root-project @pjindex ede-cpp-root-project @@ -1911,7 +1911,7 @@ Within this project @var{PROJ}, find the file @var{NAME}. This knows details about or source tree. @end deffn -@node ede-simple-project, ede-simple-base-project, ede-cpp-root-project, Project +@node ede-simple-project @subsection ede-simple-project @pjindex ede-simple-project @@ -1941,7 +1941,7 @@ No children Commit any change to @var{PROJ} to its file. @end deffn -@node ede-simple-base-project, ede-proj-project, ede-simple-project, Project +@node ede-simple-base-project @subsection ede-simple-base-project @pjindex ede-simple-base-project @@ -1971,7 +1971,7 @@ This one project could control a tree of subdirectories. @table @asis @end table -@node ede-proj-project, project-am-makefile, ede-simple-base-project, Project +@node ede-proj-project @subsection ede-proj-project @pjindex ede-proj-project @@ -2161,7 +2161,7 @@ Return a list of files that constitutes a distribution of @var{THIS} project. Commit change to local variables in @var{PROJ}. @end deffn -@node project-am-makefile, ede-step-project, ede-proj-project, Project +@node project-am-makefile @subsection project-am-makefile @pjindex project-am-makefile @@ -2203,7 +2203,7 @@ Despite the fact that this is a method, it depends on the current buffer being in order to provide a smart default target type. @end deffn -@node ede-step-project, , project-am-makefile, Project +@node ede-step-project @subsection ede-step-project @pjindex ede-step-project @@ -2328,7 +2328,7 @@ Return a list of files that constitutes a distribution of @var{THIS} project. Commit change to local variables in @var{PROJ}. @end deffn -@node Targets, Sourcecode, Project, Extending EDE +@node Targets @section Targets @menu @@ -2356,7 +2356,7 @@ Commit change to local variables in @var{PROJ}. @end menu -@node ede-target, ede-proj-target, Targets, Targets +@node ede-target @subsection ede-target @tgindex ede-target @@ -2565,7 +2565,7 @@ Return the name of @var{THIS} target, suitable for make or debug style commands. Retrieves the slot @code{menu} from an object of class @code{ede-target} @end deffn -@node ede-proj-target, ede-proj-target-makefile, ede-target, Targets +@node ede-proj-target @subsection ede-proj-target @tgindex ede-proj-target @@ -2754,7 +2754,7 @@ sources variable. @end deffn -@node ede-proj-target-makefile, semantic-ede-proj-target-grammar, ede-proj-target, Targets +@node ede-proj-target-makefile @subsection ede-proj-target-makefile @tgindex ede-proj-target-makefile @@ -2852,7 +2852,7 @@ Return a list of configuration variables from @var{THIS}. Use @var{CONFIGURATION} as the current configuration to query. @end deffn -@node semantic-ede-proj-target-grammar, ede-proj-target-makefile-objectcode, ede-proj-target-makefile, Targets +@node semantic-ede-proj-target-grammar @subsection semantic-ede-proj-target-grammar @tgindex semantic-ede-proj-target-grammar @@ -2906,7 +2906,7 @@ Argument @var{THIS} is the target that should insert stuff. @end deffn -@node ede-proj-target-makefile-objectcode, ede-proj-target-makefile-archive, semantic-ede-proj-target-grammar, Targets +@node ede-proj-target-makefile-objectcode @subsection ede-proj-target-makefile-objectcode @tgindex ede-proj-target-makefile-objectcode @@ -2968,7 +2968,7 @@ Argument @var{THIS} is the target to get sources from. @end deffn -@node ede-proj-target-makefile-archive, ede-proj-target-makefile-program, ede-proj-target-makefile-objectcode, Targets +@node ede-proj-target-makefile-archive @subsection ede-proj-target-makefile-archive @tgindex ede-proj-target-makefile-archive @@ -3011,7 +3011,7 @@ Makefile.am generator, so use it to add this important bin program. @end deffn -@node ede-proj-target-makefile-program, ede-proj-target-makefile-shared-object, ede-proj-target-makefile-archive, Targets +@node ede-proj-target-makefile-program @subsection ede-proj-target-makefile-program @tgindex ede-proj-target-makefile-program @@ -3090,7 +3090,7 @@ Insert bin_PROGRAMS variables needed by target @var{THIS}. @end deffn -@node ede-proj-target-makefile-shared-object, ede-proj-target-elisp, ede-proj-target-makefile-program, Targets +@node ede-proj-target-makefile-shared-object @subsection ede-proj-target-makefile-shared-object @tgindex ede-proj-target-makefile-shared-object @@ -3150,7 +3150,7 @@ Makefile.am generator, so use it to add this important bin program. @end deffn -@node ede-proj-target-elisp, ede-proj-target-elisp-autoloads, ede-proj-target-makefile-shared-object, Targets +@node ede-proj-target-elisp @subsection ede-proj-target-elisp @tgindex ede-proj-target-elisp @@ -3226,7 +3226,7 @@ There are standards in Elisp files specifying how the version string is found, such as a @code{-version} variable, or the standard header. @end deffn -@node ede-proj-target-elisp-autoloads, ede-proj-target-makefile-miscelaneous, ede-proj-target-elisp, Targets +@node ede-proj-target-elisp-autoloads @subsection ede-proj-target-elisp-autoloads @tgindex ede-proj-target-elisp-autoloads @@ -3341,7 +3341,7 @@ sources variable. @end deffn -@node ede-proj-target-makefile-miscelaneous, ede-proj-target-makefile-info, ede-proj-target-elisp-autoloads, Targets +@node ede-proj-target-makefile-miscelaneous @subsection ede-proj-target-makefile-miscelaneous @tgindex ede-proj-target-makefile-miscelaneous @@ -3397,7 +3397,7 @@ Return a list of files which @var{THIS} target depends on. @end deffn -@node ede-proj-target-makefile-info, ede-proj-target-scheme, ede-proj-target-makefile-miscelaneous, Targets +@node ede-proj-target-makefile-info @subsection ede-proj-target-makefile-info @tgindex ede-proj-target-makefile-info @@ -3483,7 +3483,7 @@ Does the usual for Makefile mode, but splits source into two variables when working in Automake mode. @end deffn -@node ede-proj-target-scheme, project-am-target, ede-proj-target-makefile-info, Targets +@node ede-proj-target-scheme @subsection ede-proj-target-scheme @tgindex ede-proj-target-scheme @@ -3527,7 +3527,7 @@ Tweak the configure file (current buffer) to accommodate @var{THIS}. @end deffn -@node project-am-target, project-am-objectcode, ede-proj-target-scheme, Targets +@node project-am-target @subsection project-am-target @tgindex project-am-target @@ -3565,7 +3565,7 @@ Run the current project in the debugger. Edit the target associated w/ this file. @end deffn -@node project-am-objectcode, project-am-program, project-am-target, Targets +@node project-am-objectcode @subsection project-am-objectcode @tgindex project-am-objectcode @@ -3610,7 +3610,7 @@ Default target to use when compiling an object code target. There are no default header files. @end deffn -@node project-am-program, project-am-header-noinst, project-am-objectcode, Targets +@node project-am-program @subsection project-am-program @tgindex project-am-program @@ -3648,7 +3648,7 @@ Additional LD args. @end table @end table -@node project-am-header-noinst, project-am-header-inst, project-am-program, Targets +@node project-am-header-noinst @subsection project-am-header-noinst @tgindex project-am-header-noinst @@ -3681,7 +3681,7 @@ No children Return the default macro to 'edit' for this object. @end deffn -@node project-am-header-inst, project-am-lisp, project-am-header-noinst, Targets +@node project-am-header-inst @subsection project-am-header-inst @tgindex project-am-header-inst @@ -3714,7 +3714,7 @@ No children Return the default macro to 'edit' for this object. @end deffn -@node project-am-lisp, project-am-texinfo, project-am-header-inst, Targets +@node project-am-lisp @subsection project-am-lisp @tgindex project-am-lisp @@ -3744,7 +3744,7 @@ No children Return the default macro to 'edit' for this object. @end deffn -@node project-am-texinfo, project-am-man, project-am-lisp, Targets +@node project-am-texinfo @subsection project-am-texinfo @tgindex project-am-texinfo @@ -3795,7 +3795,7 @@ Documentation is not for object @var{THIS}, but is provided by @var{THIS} for ot files in the project. @end deffn -@node project-am-man, , project-am-texinfo, Targets +@node project-am-man @comment node-name, next, previous, up @subsection project-am-man @tgindex project-am-man @@ -3826,7 +3826,7 @@ No children Return the default macro to 'edit' for this object type. @end deffn -@node Sourcecode, Compilers, Targets, Extending EDE +@node Sourcecode @section Sourcecode The source code type is an object designed to associated files with @@ -3837,7 +3837,7 @@ targets. @end menu -@node ede-sourcecode, , Sourcecode, Sourcecode +@node ede-sourcecode @subsection ede-sourcecode @scindex ede-sourcecode @@ -3934,7 +3934,7 @@ Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary . Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary . @end deffn -@node Compilers, , Sourcecode, Extending EDE +@node Compilers @section Compilers The compiler object is designed to associate source code with @@ -3950,7 +3950,7 @@ compile commands. @end menu -@node ede-compilation-program, ede-compiler, Compilers, Compilers +@node ede-compilation-program @subsection ede-compilation-program @cmindex ede-compilation-program @@ -4061,7 +4061,7 @@ Tweak the configure file (current buffer) to accommodate @var{THIS}. @end deffn -@node ede-compiler, ede-object-compiler, ede-compilation-program, Compilers +@node ede-compiler @subsection ede-compiler @cmindex ede-compiler @@ -4169,7 +4169,7 @@ Return a string based on @var{THIS} representing a make object variable. @end deffn -@node ede-object-compiler, ede-linker, ede-compiler, Compilers +@node ede-object-compiler @subsection ede-object-compiler @cmindex ede-object-compiler @@ -4212,7 +4212,7 @@ A variable dedicated to dependency generation. Insert variables needed by the compiler @var{THIS}. @end deffn -@node ede-linker, , ede-object-compiler, Compilers +@node ede-linker @subsection ede-linker @cmindex ede-linker @@ -4274,7 +4274,7 @@ For example, C code uses .o on unix, and Emacs Lisp uses .elc. @end table @end table -@node GNU Free Documentation License, , Extending EDE, Top +@node GNU Free Documentation License @appendix GNU Free Documentation License @include doclicense.texi diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi index 308ea3f34c..6254028431 100644 --- a/doc/misc/mh-e.texi +++ b/doc/misc/mh-e.texi @@ -78,7 +78,7 @@ Public License.'' @html @@ -197,7 +197,7 @@ History of MH-E --> @end html -@node Preface, Conventions, Top, Top +@node Preface @unnumbered Preface @cindex Emacs @@ -272,7 +272,7 @@ Bill Wohler <@i{wohler at newt.com}>@* 8 February 1995@* 24 February 2006 -@node Conventions, Getting Started, Preface, Top +@node Conventions @chapter GNU Emacs Terms and Conventions @cindex Emacs @@ -513,7 +513,7 @@ you enter something in the minibuffer, but then you change your mind, type @kbd{C-g} and you'll be back where you started. If you want to exit Emacs entirely, use @kbd{C-x C-c}. -@node Getting Started, Tour Through MH-E, Conventions, Top +@node Getting Started @chapter Getting Started @cindex MH-E, versions @@ -658,7 +658,7 @@ after these variables have been set. This hook can be used the change the value of these variables if you need to run with different values between MH and MH-E. -@node Tour Through MH-E, Using This Manual, Getting Started, Top +@node Tour Through MH-E @chapter Tour Through MH-E @cindex introduction @@ -684,7 +684,7 @@ get the big picture, and then you can read the manual as you wish. * More About MH-E:: @end menu -@node Sending Mail Tour, Reading Mail Tour, Tour Through MH-E, Tour Through MH-E +@node Sending Mail Tour @section Sending Mail @cindex MH-Letter mode @@ -750,7 +750,7 @@ more complete help with the @kbd{C-h m} (@code{describe-mode}) command.}, but at this time we'll only use @kbd{C-c C-c} to send your message. Type @kbd{C-c C-c} now. That's all there is to it! -@node Reading Mail Tour, Processing Mail Tour, Sending Mail Tour, Tour Through MH-E +@node Reading Mail Tour @section Receiving Mail @cindex @command{inc} @@ -823,7 +823,7 @@ This is a test message to get the wheels churning... If you typed a long message, you can view subsequent pages with @key{SPC} and previous pages with @key{DEL}. -@node Processing Mail Tour, Leaving MH-E, Reading Mail Tour, Tour Through MH-E +@node Processing Mail Tour @section Processing Mail @cindex processing mail @@ -949,7 +949,7 @@ available via the prefix characters, type the prefix character followed by a @kbd{?}, for example, @kbd{F ?}. More complete help is available with the @kbd{C-h m} (@code{describe-mode}) command. -@node Leaving MH-E, More About MH-E, Processing Mail Tour, Tour Through MH-E +@node Leaving MH-E @section Leaving MH-E @cindex Emacs, quitting @@ -988,7 +988,7 @@ already exists, so you can use @samp{folders -recurse -fast} in a script to copy all of your messages into a single file, or using the @samp{-file} argument, a file for each folder. -@node More About MH-E, , Leaving MH-E, Tour Through MH-E +@node More About MH-E @section More About MH-E These are the basic commands to get you going, but there are plenty @@ -1054,7 +1054,7 @@ Place messages in a file (@pxref{Files and Pipes}). Remember that you can also use MH commands when you're not running MH-E (and when you are!). -@node Using This Manual, Incorporating Mail, Tour Through MH-E, Top +@node Using This Manual @chapter Using This Manual This chapter begins the meat of the manual which goes into more detail @@ -1150,7 +1150,7 @@ your initials. (Unless, of course, your initials happen to be @emph{mh}!) * Folder Selection:: @end menu -@node Options, Ranges, Using This Manual, Using This Manual +@node Options @section Options @cindex Emacs, customizing @@ -1210,7 +1210,7 @@ function. Try entering @kbd{M-x customize-group @key{RET} mh the MH-E customization groups. Another way to view the MH-E customization group is to use @kbd{M-x mh-customize @key{RET}}. -@node Ranges, Folder Selection, Options, Using This Manual +@node Ranges @section Ranges @c Sync with mh-folder-mode docstring. @@ -1279,7 +1279,7 @@ interpret input such as @samp{200} as @samp{last:200} if the default). If you need to scan just the message 200, then use the range @samp{200:1} or @samp{200-200}. -@node Folder Selection, , Ranges, Using This Manual +@node Folder Selection @section Folder Selection @cindex completion, folders @@ -1359,7 +1359,7 @@ folder name used is suggested. This is useful if you get mail from various people for whom you have an alias, but file them all in the same project folder. -@node Incorporating Mail, Reading Mail, Using This Manual, Top +@node Incorporating Mail @chapter Incorporating Your Mail @cindex @samp{Folder} menu @@ -1535,7 +1535,7 @@ the message numbers from outside of MH-E. @end group @end smalllisp -@node Reading Mail, Folders, Incorporating Mail, Top +@node Reading Mail @chapter Reading Your Mail @cindex @samp{+inbox} @@ -2003,7 +2003,7 @@ detail in the following sections. * Miscellaneous Commands and Options:: @end menu -@node Viewing, Viewing Attachments, Reading Mail, Reading Mail +@node Viewing @section Viewing Your Mail @findex mh-header-display @@ -2276,7 +2276,7 @@ of @code{"@{show-%s@} %d"} yields a mode line of -----@{show-+inbox@} 4 (MH-Show)--Bot-------------------------------- @end smallexample -@node Viewing Attachments, HTML, Viewing, Reading Mail +@node Viewing Attachments @section Viewing Attachments @cindex attachments @@ -2516,7 +2516,7 @@ Article Buttons} and in the @cite{The Gnus Manual}. @end ifnotinfo -@node HTML, Digests, Viewing Attachments, Reading Mail +@node HTML @section HTML @cindex HTML @@ -2670,7 +2670,7 @@ buffer, including HTML buffers. (global-set-key [S-mouse-2] 'browse-url-at-mouse) @end smalllisp -@node Digests, Reading PGP, HTML, Reading Mail +@node Digests @section Digests @cindex digests @@ -2714,7 +2714,7 @@ preceded with a @samp{>} so that your reply can't create the @samp{To:} field yourself. This is described later (@pxref{Editing Drafts}). -@node Reading PGP, Printing, Digests, Reading Mail +@node Reading PGP @section Signed and Encrypted Messages @cindex GPG @@ -2848,7 +2848,7 @@ See @cite{The PGG Manual}}. @end ifhtml -@node Printing, Files and Pipes, Reading PGP, Reading Mail +@node Printing @section Printing Your Mail @cindex printing @@ -2933,7 +2933,7 @@ If you do this, do not delete the message until it is printed or else the output may be truncated. These options are not used by the commands @kbd{P p} or @kbd{P f}. -@node Files and Pipes, Navigating, Printing, Reading Mail +@node Files and Pipes @section Files and Pipes @cindex files @@ -2993,7 +2993,7 @@ through @command{uuencode} or @command{shar}. For example, you can extract the contents of the current buffer in your home directory by typing @kbd{M-x mh-store-buffer @key{RET} ~ @key{RET}}. -@node Navigating, Miscellaneous Commands and Options, Files and Pipes, Reading Mail +@node Navigating @section Navigating @cindex moving between messages @@ -3094,7 +3094,7 @@ The hook @code{mh-delete-msg-hook} is called after you mark a message for deletion. For example, a past maintainer of MH-E used this once when he kept statistics on his mail usage. -@node Miscellaneous Commands and Options, , Navigating, Reading Mail +@node Miscellaneous Commands and Options @section Miscellaneous Commands and Options This section contains a few more miscellaneous commands and options. @@ -3207,7 +3207,7 @@ displayed or @code{mh-rmail} is run, and the MH-E window configuration is shown. Otherwise, the MH-E window configuration is saved and the original configuration is displayed. -@node Folders, Sending Mail, Reading Mail, Top +@node Folders @chapter Organizing Your Mail with Folders @cindex @samp{Folder} menu @@ -3842,7 +3842,7 @@ running dired on my mail directory (@kbd{M-x dired @key{RET} ~/Mail @key{RET}}), moving my cursor to @samp{out} and using the command @kbd{R} (@code{dired-do-rename}). -@node Sending Mail, Editing Drafts, Folders, Top +@node Sending Mail @chapter Sending Mail @cindex sending mail @@ -4002,7 +4002,7 @@ more detail in the following sections. * Editing Again:: @end menu -@node Composing, Replying, Sending Mail, Sending Mail +@node Composing @section Composing @cindex @file{.emacs} @@ -4125,7 +4125,7 @@ is that you can write a function to write and send the message for you. This function is passed three arguments: the contents of the @samp{To:}, @samp{Subject:}, and @samp{Cc:} header fields. -@node Replying, Forwarding, Composing, Sending Mail +@node Replying @section Replying to Mail @cindex @command{mhl} @@ -4221,7 +4221,7 @@ buffer by turning off the option @code{mh-reply-show-message-flag}. If you wish to customize the header or other parts of the reply draft, please see @command{repl}(1) and @code{mh-format}(5). -@node Forwarding, Redistributing, Replying, Sending Mail +@node Forwarding @section Forwarding Mail @cindex @command{forw} @@ -4283,7 +4283,7 @@ and creates a subject header field of: Subject: Greg DesBrisay: Re: 49er football @end smallexample -@node Redistributing, Editing Again, Forwarding, Sending Mail +@node Redistributing @section Redistributing Your Mail @cindex @command{dist} @@ -4323,7 +4323,7 @@ a message that has been redistributed before, turn off this option. The hook @code{mh-annotate-msg-hook} is run after annotating the message and scan line (@pxref{Sending Mail}). -@node Editing Again, , Redistributing, Sending Mail +@node Editing Again @section Editing Old Drafts and Bounced Messages @cindex @file{draft} @@ -4359,7 +4359,7 @@ the message for editing by removing the @i{Mailer-Daemon} envelope and unneeded header fields. Fix whatever addressing problem you had, and send the message again with @kbd{C-c C-c}. -@node Editing Drafts, Aliases, Sending Mail, Top +@node Editing Drafts @chapter Editing a Draft @cindex @samp{Letter} menu @@ -4754,7 +4754,7 @@ detail in the following sections. * Killing Draft:: @end menu -@node Editing Message, Inserting Letter, Editing Drafts, Editing Drafts +@node Editing Message @section Editing the Message @cindex @samp{Bcc} header field @@ -4929,7 +4929,7 @@ the first period in the paragraph above, the result would be this: @end group @end smallexample -@node Inserting Letter, Inserting Messages, Editing Message, Editing Drafts +@node Inserting Letter @section Inserting Letter to Which You're Replying @cindex inserting messages @@ -5055,7 +5055,7 @@ For example, if you use the hook function @code{trivial-cite}} (which is NOT part of Emacs), set @code{mh-yank-behavior} to @samp{Body and Header}. -@node Inserting Messages, Signature, Inserting Letter, Editing Drafts +@node Inserting Messages @section Inserting Messages @cindex inserting messages @@ -5081,7 +5081,7 @@ left intact, the message is not indented, and @samp{> } is not inserted before each line. This command leaves the mark before the letter and point after it. -@node Signature, Picture, Inserting Messages, Editing Drafts +@node Signature @section Inserting Your Signature @cindex signature @@ -5136,7 +5136,7 @@ function used to insert the signature with The signature can also be inserted using Identities. @xref{Identities}. -@node Picture, Adding Attachments, Signature, Editing Drafts +@node Picture @section Inserting Your Picture @cindex @file{.face} @@ -5186,7 +5186,7 @@ defined by this option doesn't exist. @xref{Viewing}, to see how these header fields are displayed in MH-E. -@node Adding Attachments, Sending PGP, Picture, Editing Drafts +@node Adding Attachments @section Adding Attachments @cindex @command{mhbuild} @@ -5530,7 +5530,7 @@ prefix argument (as in @kbd{C-u C-c C-e}). The hook @code{mh-mh-to-mime-hook} is called after the message has been formatted by @kbd{C-c C-e}. -@node Sending PGP, Checking Recipients, Adding Attachments, Editing Drafts +@node Sending PGP @section Signing and Encrypting Messages @cindex signing messages @@ -5621,7 +5621,7 @@ all messages I encrypt are encrypted with my public key as well. If you keep a copy of all of your outgoing mail with a @samp{Fcc:} header field, this setting is vital so that you can read the mail you write! -@node Checking Recipients, Sending Message, Sending PGP, Editing Drafts +@node Checking Recipients @section Checking Recipients @cindex @file{*MH-E Recipients*} @@ -5640,7 +5640,7 @@ you can check the actual address(es) in the alias. A new buffer named @uref{@value{MH-BOOK-HOME}/senove.html#WhaPro, What now?---and the whatnow Program} in the MH book.}. -@node Sending Message, Killing Draft, Checking Recipients, Editing Drafts +@node Sending Message @section Sending a Message @cindex buffers, @file{*MH-E Mail Delivery*} @@ -5678,7 +5678,7 @@ in the MH book.} is installed under a different name, use The hook @code{mh-annotate-msg-hook} is run after annotating the message and scan line (@pxref{Sending Mail}). -@node Killing Draft, , Sending Message, Editing Drafts +@node Killing Draft @section Killing the Draft @cindex killing draft @@ -5692,7 +5692,7 @@ command @kbd{C-c C-q} (@code{mh-fully-kill-draft}) to kill the draft buffer and delete the draft message. Use the command @kbd{C-x k} (@code{kill-buffer}) if you don't want to delete the draft message. -@node Aliases, Identities, Editing Drafts, Top +@node Aliases @chapter Aliases @cindex aliases @@ -6019,7 +6019,7 @@ Syntax of Regular Expressions} in @cite{The GNU Emacs Manual}). @end ifhtml -@node Identities, Speedbar, Aliases, Top +@node Identities @chapter Identities @cindex identities @@ -6256,7 +6256,7 @@ example, @samp{:signature}), and the action @samp{'remove} or @samp{'add}. If the action is @samp{'add}, an additional argument containing the value for the field is given. -@node Speedbar, Menu Bar, Identities, Top +@node Speedbar @chapter The Speedbar @cindex folder navigation @@ -6354,7 +6354,7 @@ Selected folder face. Selected folder face when folder contains unread messages. @end vtable -@node Menu Bar, Tool Bar, Speedbar, Top +@node Menu Bar @chapter The Menu Bar @cindex @samp{Folder} menu @@ -6414,7 +6414,7 @@ manual in two ways: all of the menu items are listed alphabetically, and you can also browse all of the items under the index entry @samp{menu item}. -@node Tool Bar, Searching, Menu Bar, Top +@node Tool Bar @chapter The Tool Bar @cindex tool bar @@ -6498,7 +6498,7 @@ variable is set to anything other than @samp{Same As Default Tool Bar} and the default tool bar is in a different location, then two tool bars will be displayed: the MH-E tool bar and the default tool bar. -@node Searching, Threading, Tool Bar, Top +@node Searching @chapter Searching Through Messages @cindex @samp{Search} menu @@ -7037,7 +7037,7 @@ MH-Search buffer. Instead, you simply enter a regular expression in the minibuffer. For help in constructing regular expressions, see your man page for @command{grep}. -@node Threading, Limits, Searching, Top +@node Threading @chapter Viewing Message Threads @cindex threading @@ -7166,7 +7166,7 @@ ensure that the byte-compiled version appears first in the installed MH-E yourself, please refer to the installation directions in the file @file{README} in the distribution.}. -@node Limits, Sequences, Threading, Top +@node Limits @chapter Limiting Display @cindex limits @@ -7274,7 +7274,7 @@ command to limit the display to messages in a range (@pxref{Ranges}). Each limit can be undone in turn with the @kbd{/ w} (@code{mh-widen}) command. Give this command a prefix argument to remove all limits. -@node Sequences, Junk, Limits, Top +@node Sequences @chapter Using Sequences @cindex @samp{Sequence} menu @@ -7528,7 +7528,7 @@ command dealing with sequences is @command{mark}@footnote{See the section @uref{@value{MH-BOOK-HOME}/mmbwm.html, Make Message Bookmarks with mark} in the MH book.}. -@node Junk, Miscellaneous, Sequences, Top +@node Junk @chapter Dealing With Junk Mail @cindex Marshall Rose @@ -7966,7 +7966,7 @@ spam/unreadable/. spam/unreadable/. @end smallexample -@node Miscellaneous, Scan Line Formats, Junk, Top +@node Miscellaneous @chapter Miscellaneous Commands, Variables, and Buffers This chapter covers the following command and the various MH-E @@ -8053,7 +8053,7 @@ it is hidden because the first character in the name is a space. You'll generally not have any need for this buffer. @end table -@node Scan Line Formats, Procmail, Miscellaneous, Top +@node Scan Line Formats @appendix Scan Line Formats @cindex scan line formats @@ -8521,7 +8521,7 @@ Finally, add the following to delete and refile messages. This is just a bare minimum; it's best to adjust all of the regular expressions to ensure that MH-E and highlighting perform well. -@node Procmail, Odds and Ends, Scan Line Formats, Top +@node Procmail @appendix Reading Mailing Lists Effectively @cindex @command{procmail} @@ -8680,7 +8680,7 @@ example above, you would tell Gnus about it the first time only with @kbd{G m gnucash @key{RET} nnml @key{RET}}. In MH-E, this folder is known as @samp{+gnucash}. -@node Odds and Ends, History, Procmail, Top +@node Odds and Ends @appendix Odds and Ends This appendix covers a few topics that don't fit elsewhere. Here I @@ -8694,7 +8694,7 @@ I also point out some additional sources of information. * Getting MH-E:: @end menu -@node Bug Reports, Mailing Lists, Odds and Ends, Odds and Ends +@node Bug Reports @appendixsec Bug Reports @cindex bugs @@ -8708,7 +8708,7 @@ to do that it shouldn't be a restriction for you. Please include the output of @kbd{M-x mh-version} (@pxref{Miscellaneous}) in any bug report you send unless you're 110% positive we won't ask for it. -@node Mailing Lists, MH FAQ and Support, Bug Reports, Odds and Ends +@node Mailing Lists @appendixsec MH-E Mailing Lists @cindex SourceForge @@ -8721,7 +8721,7 @@ the archives at @uref{https://sourceforge.net/p/mh-e/mailman/, SourceForge}. Do not report bugs on these lists; please submit them via SourceForge (@pxref{Bug Reports}). -@node MH FAQ and Support, Getting MH-E, Mailing Lists, Odds and Ends +@node MH FAQ and Support @appendixsec MH FAQ and Support @cindex FAQ @@ -8740,7 +8740,7 @@ You can find FAQs on MH-E by searching for @i{labels:support} on the Tickets} page on SourceForge. If you don't find the answer to your question, file a ticket and your question will become a new FAQ! -@node Getting MH-E, , MH FAQ and Support, Odds and Ends +@node Getting MH-E @appendixsec Getting MH-E @cindex MH-E, obtaining @@ -8795,7 +8795,7 @@ also contains doc and contrib packages. The former is the latest release of this manual, and the latter contains a few contributed packages you might find useful. -@node History, GFDL, Odds and Ends, Top +@node History @appendix History of MH-E @cindex Bill Wohler @@ -8826,7 +8826,7 @@ lives today. * From Bill Wohler:: @end menu -@node From Brian Reid, From Jim Larus, History, History +@node From Brian Reid @appendixsec From Brian Reid @cindex Brian Reid @@ -8858,7 +8858,7 @@ the ideas as well. Perhaps one day, MH-E will again resemble MHE Brian Reid, June 1994 -@node From Jim Larus, From Stephen Gildea, From Brian Reid, History +@node From Jim Larus @appendixsec From Jim Larus @cindex Jim Larus @@ -8904,7 +8904,7 @@ since then. Jim Larus, June 1994 -@node From Stephen Gildea, From Bill Wohler, From Jim Larus, History +@node From Stephen Gildea @appendixsec From Stephen Gildea @cindex Gildea, Stephen @@ -8946,7 +8946,7 @@ version 5 was released. Stephen Gildea, June 1994 -@node From Bill Wohler, , From Stephen Gildea, History +@node From Bill Wohler @appendixsec From Bill Wohler @cindex Wohler, Bill @@ -8993,27 +8993,27 @@ new features and several bug fixes. Bill Wohler, August 2008 -@node GFDL, GPL, History, Top +@node GFDL @appendix GNU Free Documentation License @include doclicense.texi -@node GPL, Key Index, GFDL, Top +@node GPL @appendix GNU General Public License @include gpl.texi -@node Key Index, Command Index, GPL, Top +@node Key Index @unnumbered Key (Character) Index @printindex ky -@node Command Index, Option Index, Key Index, Top +@node Command Index @unnumbered Command Index @printindex fn -@node Option Index, Concept Index, Command Index, Top +@node Option Index @unnumbered Option (Variable) Index @printindex vr -@node Concept Index, , Option Index, Top +@node Concept Index @unnumbered Concept Index @printindex cp diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi index f1074d3d14..88ca4450d5 100644 --- a/doc/misc/reftex.texi +++ b/doc/misc/reftex.texi @@ -4609,7 +4609,7 @@ Footer to insert in BibTeX files generated by @end defopt -@node Options - Index Support, Options - Viewing Cross-References, Options - Creating Citations, Options +@node Options - Index Support @section Index Support @cindex Options, Index support @cindex Index support, options diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi index dbd7f3d02f..b3ea652a7e 100644 --- a/doc/misc/todo-mode.texi +++ b/doc/misc/todo-mode.texi @@ -122,7 +122,7 @@ Todo Display Features @end detailmenu @end menu -@node Overview, Todo Mode Entry Points, Top, Top +@node Overview @chapter Overview The Todo mode package provides facilities for making and maintaining @@ -146,7 +146,7 @@ most important differences, @ref{Legacy Todo Mode Files}. * Todo Items as Diary Entries:: @end menu -@node Levels of Organization, Todo Items as Diary Entries, , Overview +@node Levels of Organization @section Levels of Organization In Todo mode each todo list is identified with a named category, so you @@ -184,7 +184,7 @@ associating various kinds of metadata with it, e.g., the category it belongs to, its priority, whether it is to be included in the Emacs diary, date and time stamps, whether it is done or still to do. -@node Todo Items as Diary Entries, , Levels of Organization, Overview +@node Todo Items as Diary Entries @section Todo Items as Diary Entries You can have todo items show up in the Emacs Fancy Diary display by @@ -213,7 +213,7 @@ from a Todo mode file, clicking or typing @key{RET} on this item will switch to the buffer visiting that file and properly display the item's category, with point on the item. -@node Todo Mode Entry Points, Key Binding Conventions, Overview, Top +@node Todo Mode Entry Points @chapter Todo Mode Entry Points To initialize your first todo file, invoke the command @code{todo-show}. @@ -275,7 +275,7 @@ that was displayed on quitting current for subsequent Todo mode commands category in Todo mode, in which case the latter become current for Todo mode commands). -@node Key Binding Conventions, Navigation, Todo Mode Entry Points, Top +@node Key Binding Conventions @chapter Key Binding Conventions For Todo mode commands to function properly, it is essential to maintain @@ -301,7 +301,7 @@ those beginning with @kbd{A} apply to archives (a special type of Todo file; @ref{Todo Archive Mode}). Todo commands applying to items, which constitute the majority, are bound to lower case key sequences. -@node Navigation, Editing, Key Binding Conventions, Top +@node Navigation @chapter Navigation The navigation commands are for making another todo file, category, or @@ -389,7 +389,7 @@ or higher than the current one. Navigation to other types of Todo files is discussed in the relevant sections below. -@node Editing, Todo Archives, Navigation, Top +@node Editing @chapter Editing Editing in Todo mode means making structural or textual changes at one @@ -412,7 +412,7 @@ Todo mode with @kbd{q}. * Item Editing:: @end menu -@node File Editing, Category Editing, , Editing +@node File Editing @section File Editing and Todo Edit Mode There are four file-level editing commands: @@ -470,7 +470,7 @@ containing inconsistent information (see the cautionary note in displays a warning to this effect. @end table -@node Category Editing, Item Editing, File Editing, Editing +@node Category Editing @section Category Editing The following commands are available for editing specifically at the @@ -520,7 +520,7 @@ i.e., typing @kbd{C-u C g}, prompts for a file and confines merging to a category in that file. @end table -@node Item Editing, , Category Editing, Editing +@node Item Editing @section Item Editing Todo mode provides commands for adding new items as well as textually @@ -534,7 +534,7 @@ you a lot of flexibility to fine-tune these operations to your needs. * Relocating and Removing Items:: @end menu -@node Inserting New Items, Editing Item Headers and Text, , Item Editing +@node Inserting New Items @subsection Inserting New Items To add a new todo item to a category, type @kbd{i}, which is bound to @@ -761,7 +761,7 @@ calendar after you have entered the item's text, and then you can choose a date from the calendar.) -@node Editing Item Headers and Text, Relocating and Removing Items, Inserting New Items, Item Editing +@node Editing Item Headers and Text @subsection Editing Item Headers and Text To make changes to an existing item's content or header, type @kbd{e}, @@ -945,7 +945,7 @@ really want to toggle the diary-inclusion and calendar-marking status of all items in the category, you can do this by marking all the items and then invoking @kbd{e y} or @kbd{e k}, @pxref{Marked Items}). -@node Relocating and Removing Items, , Editing Item Headers and Text, Item Editing +@node Relocating and Removing Items @subsection Relocating and Removing Items In addition to inserting a new todo item and changing the text or header @@ -960,7 +960,7 @@ removes it from the todo list but does not delete it. * Done Items:: @end menu -@node Reprioritizing Items, Moving and Deleting Items, , Relocating and Removing Items +@node Reprioritizing Items @subsubsection Reprioritizing Items There are three ways to change a todo item's priority: @@ -986,7 +986,7 @@ highest priority without prompting. (Prefix arguments have no effect with @kbd{r} or @kbd{l}.) @end table -@node Moving and Deleting Items, Done Items, Reprioritizing Items, Relocating and Removing Items +@node Moving and Deleting Items @subsubsection Moving and Deleting Items You can move an item to another category, thereby recategorizing it: @@ -1032,7 +1032,7 @@ Todo command to undo a deletion. If you want to be able to use @key{SPC} for confirmation, enable the option @code{todo-y-with-space}. @end quotation -@node Done Items, , Moving and Deleting Items, Relocating and Removing Items +@node Done Items @subsubsection Done Items When the activity or thing that a todo item is about has been done, it @@ -1118,7 +1118,7 @@ item has a comment, you are asked whether to delete it from the restored item. @end table -@node Todo Archives, Marked Items, Editing, Top +@node Todo Archives @chapter Todo Archives When the done items section of a category itself starts to become @@ -1134,7 +1134,7 @@ the extension @samp{.toda} instead of @samp{.todo}. * Todo Archive Mode:: @end menu -@node Creating and Visiting Archives, Todo Archive Mode, , Todo Archives +@node Creating and Visiting Archives @section Creating and Visiting Archives Todo mode provides the following command for archiving items: @@ -1207,7 +1207,7 @@ As with todo files, you can also visit a Todo archive by invoking a standard Emacs file-visiting command; this displays the first (on the initial invocation) or current category of the archive. -@node Todo Archive Mode, , Creating and Visiting Archives, Todo Archives +@node Todo Archive Mode @section Todo Archive Mode When you visit a Todo archive, the buffer is in Todo Archive mode. It @@ -1264,7 +1264,7 @@ The command @kbd{F k} (@pxref{File Editing}) is also available in Todo Archive mode. It deletes the current archive file and prompts you whether to delete the corresponding todo file. -@node Marked Items, Todo Categories Mode, Todo Archives, Top +@node Marked Items @chapter Marked Items For many item editing commands it can make sense and be convenient to @@ -1329,7 +1329,7 @@ todo or marked done items, so if both types of items are marked, invoking these commands has no effect and informs you of your erroneous attempt. -@node Todo Categories Mode, Searching for Items, Marked Items, Top +@node Todo Categories Mode @chapter Todo Categories Mode It can be helpful to have a compact overview of the categories in a @@ -1367,7 +1367,7 @@ to visit another todo file). To do this customize the option * Reordering Categories:: @end menu -@node Table of Item Counts, Reordering Categories, , Todo Categories Mode +@node Table of Item Counts @section Table of Item Counts Above each column of the table is a labeled button you can press by @@ -1428,7 +1428,7 @@ Typing @kbd{q} exits Todo Categories mode, killing the buffer and returning to the current category in the Todo mode or Todo Archive mode buffer from which you had invoked @kbd{F c}. -@node Reordering Categories, , Table of Item Counts, Todo Categories Mode +@node Reordering Categories @section Reordering Categories Todo Categories mode provide commands with which you can change the @@ -1479,7 +1479,7 @@ have to renumber them again. This is one reason why you should exercise caution when using @kbd{F e}. @end quotation -@node Searching for Items, Todo Filtered Items Mode, Todo Categories Mode, Top +@node Searching for Items @chapter Searching for Items It can be useful to be able to locate and examine all todo items that @@ -1506,7 +1506,7 @@ search and remove the highlighting later. These commands are also available in Todo Archive mode. -@node Todo Filtered Items Mode, Todo Display Features, Searching for Items, Top +@node Todo Filtered Items Mode @chapter Todo Filtered Items Mode A more powerful alternative to sequential searching is item filtering, @@ -1520,7 +1520,7 @@ category in a distinct mode, Todo Filtered Items mode. * Files of Filtered Items:: @end menu -@node Filtering Items, Todo Filtered Items Mode Commands, , Todo Filtered Items Mode +@node Filtering Items @section Filtering Items Todo mode provides three ways to filter items: a general filter for @@ -1593,7 +1593,7 @@ this invocation, overriding both @code{todo-top-priorities-overrides} and @code{todo-top-priorities}. @end itemize -@node Todo Filtered Items Mode Commands, Files of Filtered Items, Filtering Items, Todo Filtered Items Mode +@node Todo Filtered Items Mode Commands @section Todo Filtered Items Mode Commands The output of the item filtering commands looks similar to a regular @@ -1650,7 +1650,7 @@ change the relative priorities of items from the same real category, since that would make the filtered list inconsistent with the source todo list. -@node Files of Filtered Items, , Todo Filtered Items Mode Commands, Todo Filtered Items Mode +@node Files of Filtered Items @section Files of Filtered Items Typing @kbd{s} in Todo Filtered Items mode saves the buffer of filtered @@ -1701,7 +1701,7 @@ displaying its first category, as usual. The command @kbd{F k} (@pxref{File Editing}) is also available in Todo Filtered Items mode. It deletes the current filtered items file. -@node Todo Display Features, Printing Todo Buffers, Todo Filtered Items Mode, Top +@node Todo Display Features @chapter Todo Display Features You can change the appearance of Todo mode buffers in a variety of ways. @@ -1712,7 +1712,7 @@ You can change the appearance of Todo mode buffers in a variety of ways. * Other Display Commands and Options:: @end menu -@node Faces, Item Prefix, , Todo Display Features +@node Faces @section Faces Each of the Todo modes uses faces to distinguish various aspects of @@ -1737,7 +1737,7 @@ The @code{todo-faces} customization group contains a complete list of Todo mode faces and brief descriptions of their use. -@node Item Prefix, Other Display Commands and Options, Faces, Todo Display Features +@node Item Prefix @section Item Prefix In the default display of (real or virtual) categories in Todo mode, @@ -1776,7 +1776,7 @@ displayed in a face (@code{todo-top-priority}) different from the face of the prefix of non-top-priority items, so you see at a glance how many items in the category are top priorities. -@node Other Display Commands and Options, , Item Prefix, Todo Display Features +@node Other Display Commands and Options @section Other Display Commands and Options There are two additional toggle commands that affect display in the @@ -1842,7 +1842,7 @@ Categories mode and Todo Filtered Items mode, beyond those mentioned above in the sections on these modes; see the customization groups @code{todo-categories} and @code{todo-filtered} for details. -@node Printing Todo Buffers, Legacy Todo Mode Files, Todo Display Features, Top +@node Printing Todo Buffers @chapter Printing Todo Buffers If you print a Todo buffer using one of the standard Emacs printing @@ -1865,7 +1865,7 @@ By default, Todo uses @code{ps-print-buffer-with-faces} to make the printable version; you can change this by setting the option @code{todo-print-function}. -@node Legacy Todo Mode Files, GNU Free Documentation License, Printing Todo Buffers, Top +@node Legacy Todo Mode Files @chapter Legacy Todo Mode Files Users of the original version of Todo mode will recognize from the @@ -1912,7 +1912,7 @@ it often). (A delicate part of the conversion concerns the customizable format of item date/time headers in the old-style; see the documentation string of @code{todo-legacy-date-time-regexp} for details.) -@node GNU Free Documentation License, , Legacy Todo Mode Files, Top +@node GNU Free Documentation License @appendix GNU Free Documentation License @include doclicense.texi commit 9533eacec816089bac9b405abcd657817924e27c Author: Glenn Morris Date: Thu May 13 08:20:49 2021 -0700 * doc/misc/epa.texi: Remove hand-written node pointers. diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi index 7224a868ec..e777771cf7 100644 --- a/doc/misc/epa.texi +++ b/doc/misc/epa.texi @@ -42,7 +42,7 @@ modify this GNU manual.'' @contents -@node Top, Overview, (dir), (dir) +@node Top @top EasyPG Assistant user's manual EasyPG Assistant is an Emacs user interface to GNU Privacy Guard @@ -60,8 +60,8 @@ called EasyPG Library. * Overview:: * Quick start:: * Commands:: -* Caching Passphrases:: * GnuPG version compatibility:: +* Caching Passphrases:: * Bug Reports:: * GNU Free Documentation License:: The license for this documentation. * Key Index:: @@ -69,7 +69,7 @@ called EasyPG Library. * Variable Index:: @end menu -@node Overview, Quick start, Top, Top +@node Overview @chapter Overview EasyPG Assistant provides the following features. @@ -83,7 +83,7 @@ EasyPG Assistant provides the following features. @item Automatic encryption/decryption of *.gpg files. @end itemize -@node Quick start, Commands, Overview, Top +@node Quick start @chapter Quick start EasyPG Assistant commands are prefixed by @samp{epa-}. For example, @@ -102,7 +102,7 @@ EasyPG Assistant provides several cryptographic features which can be integrated into other Emacs functionalities. For example, automatic encryption/decryption of @file{*.gpg} files. -@node Commands, GnuPG version compatibility, Quick start, Top +@node Commands @chapter Commands This chapter introduces various commands for typical use cases. @@ -117,7 +117,7 @@ This chapter introduces various commands for typical use cases. * Querying a key server:: @end menu -@node Key management, Cryptographic operations on regions, Commands, Commands +@node Key management @section Key management Probably the first step of using EasyPG Assistant is to browse your keyring. @kbd{M-x epa-list-keys} is corresponding to @samp{gpg @@ -200,7 +200,7 @@ Delete selected keys. If @var{allow-secret} is non-@code{nil}, it also delete the secret keys. @end deffn -@node Cryptographic operations on regions, Cryptographic operations on files, Key management, Commands +@node Cryptographic operations on regions @section Cryptographic operations on regions @deffn Command epa-decrypt-region start end @@ -245,7 +245,7 @@ also ask you whether or not to sign the text before encryption and if you answered yes, it will let you select the signing keys. @end deffn -@node Cryptographic operations on files, Dired integration, Cryptographic operations on regions, Commands +@node Cryptographic operations on files @section Cryptographic operations on files @deffn Command epa-decrypt-file file &optional output @@ -266,7 +266,7 @@ select signing keys, and then a signature type. Encrypt @var{file}. It will let you select recipients. @end deffn -@node Dired integration, Mail-mode integration, Cryptographic operations on files, Commands +@node Dired integration @section Dired integration EasyPG Assistant extends Dired Mode for GNU Emacs to allow users to @@ -305,7 +305,7 @@ Encrypt marked files. @end table -@node Mail-mode integration, Encrypting/decrypting gpg files, Dired integration, Commands +@node Mail-mode integration @section Mail-mode integration EasyPG Assistant provides a minor mode @code{epa-mail-mode} to help @@ -360,7 +360,7 @@ With prefix argument, asks you to select the recipients interactively, whether to sign, and which key(s) to sign with. @end table -@node Encrypting/decrypting gpg files, Querying a key server, Mail-mode integration, Commands +@node Encrypting/decrypting gpg files @section Encrypting/decrypting gpg files By default, every file whose name ends with @file{.gpg} will be treated as encrypted. That is, when you open such a file, the @@ -443,7 +443,7 @@ If non-@code{nil}, disable auto-saving when opening an encrypted file. The default value is @code{t}. @end defvar -@node Querying a key server, , Encrypting/decrypting gpg files, Commands +@node Querying a key server @section Querying a key server The @code{epa-search-keys} command can be used to query a @@ -458,7 +458,7 @@ into your key ring). The @code{epa-keyserver} variable says which server to query. -@node GnuPG version compatibility, Caching Passphrases, Commands, Top +@node GnuPG version compatibility @chapter GnuPG version compatibility As of February 2016, there are three active branches of GnuPG: 2.1, @@ -490,7 +490,7 @@ specifically, with 2.0 (as of 2.0.29), there is no way to avoid the graphical prompt. @end itemize -@node Caching Passphrases, Bug Reports, GnuPG version compatibility, Top +@node Caching Passphrases @chapter Caching Passphrases Typing passphrases is a troublesome task if you frequently open and @@ -530,7 +530,7 @@ To set up elisp passphrase cache, set @code{epa-file-cache-passphrase-for-symmetric-encryption}. @xref{Encrypting/decrypting gpg files}. -@node Bug Reports, GNU Free Documentation License, Caching Passphrases, Top +@node Bug Reports @chapter Bug Reports Bugs and problems with EasyPG Assistant are actively worked on by the @@ -552,19 +552,19 @@ Before reporting the bug, you should set @code{epg-debug} in the of the @file{ *epg-debug*} buffer. Note that the first letter of the buffer name is a whitespace. -@node GNU Free Documentation License, Key Index, Bug Reports, Top +@node GNU Free Documentation License @appendix GNU Free Documentation License @include doclicense.texi -@node Key Index, Function Index, GNU Free Documentation License, Top +@node Key Index @unnumbered Key Index @printindex ky -@node Function Index, Variable Index, Key Index, Top +@node Function Index @unnumbered Function Index @printindex fn -@node Variable Index, , Function Index, Top +@node Variable Index @unnumbered Variable Index @printindex vr commit 3061409de2fae233e5e5f56893efe94519410921 Merge: ff8bf8c8df bcd92b5708 Author: Glenn Morris Date: Thu May 13 08:11:03 2021 -0700 Merge from origin/emacs-27 bcd92b5708 (origin/emacs-27) Improve documentation of Hexl mode c233f4eccd ; * etc/NEWS: Fix decoded-time-set-defaults typo. 4c3abb3dd1 Fix compilation errors with latest w32 API headers 127f1f330b Improve doc strings in log-edit.el e36183ff46 ; * etc/TODO (etc/DOC): Update the todo entries. # Conflicts: # etc/NEWS commit ff8bf8c8dfff2e4fc0fae50e3fcfcf3022bd0bb8 Author: Glenn Morris Date: Thu May 13 08:07:57 2021 -0700 * doc/misc/epa.texi: Fix @nodes in previous change. diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi index 00db3c5fa3..7224a868ec 100644 --- a/doc/misc/epa.texi +++ b/doc/misc/epa.texi @@ -360,7 +360,7 @@ With prefix argument, asks you to select the recipients interactively, whether to sign, and which key(s) to sign with. @end table -@node Encrypting/decrypting gpg files, , Mail-mode integration, Commands +@node Encrypting/decrypting gpg files, Querying a key server, Mail-mode integration, Commands @section Encrypting/decrypting gpg files By default, every file whose name ends with @file{.gpg} will be treated as encrypted. That is, when you open such a file, the @@ -443,7 +443,7 @@ If non-@code{nil}, disable auto-saving when opening an encrypted file. The default value is @code{t}. @end defvar -@node Querying a key server, , Mail-mode integration, Commands +@node Querying a key server, , Encrypting/decrypting gpg files, Commands @section Querying a key server The @code{epa-search-keys} command can be used to query a commit c9773379c1a598493aafcf18e4b2f2ebe579937b Author: Michael Albinus Date: Thu May 13 16:46:17 2021 +0200 Improve Tramp traces * lisp/net/tramp-cmds.el (tramp-list-tramp-buffers): List also trace buffers. * lisp/net/tramp.el (tramp-buffer-name): Add `tramp-suppress-trace' property. (tramp-get-debug-file-name): Fix docstring. (tramp-trace-buffer-name): New defun. (tramp-trace-functions): New defvar. (tramp-debug-message): Obey also `tramp-trace-functions'. * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): Handle trace buffer accordingly. diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 1572c2f3e3..d30d22021a 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -57,7 +57,9 @@ SYNTAX can be one of the symbols `default' (default), (all-completions "*tramp" (mapcar #'list (mapcar #'buffer-name (buffer-list)))) (all-completions - "*debug tramp" (mapcar #'list (mapcar #'buffer-name (buffer-list)))))) + "*debug tramp" (mapcar #'list (mapcar #'buffer-name (buffer-list)))) + (all-completions + "*trace tramp" (mapcar #'list (mapcar #'buffer-name (buffer-list)))))) (defun tramp-list-remote-buffers () "Return a list of all buffers with remote `default-directory'." diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 9fec151422..62df2890cb 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1665,6 +1665,8 @@ See `tramp-dissect-file-name' for details." (format "*tramp/%s %s@%s*" method user-domain host-port) (format "*tramp/%s %s*" method host-port)))) +(put #'tramp-buffer-name 'tramp-suppress-trace t) + (defun tramp-make-tramp-file-name (&rest args) "Construct a Tramp file name from ARGS. @@ -1889,13 +1891,22 @@ The outline level is equal to the verbosity of the Tramp message." (put #'tramp-get-debug-buffer 'tramp-suppress-trace t) (defun tramp-get-debug-file-name (vec) - "Get the debug buffer for VEC." + "Get the debug file name for VEC." (expand-file-name (tramp-compat-string-replace "/" " " (tramp-debug-buffer-name vec)) (tramp-compat-temporary-file-directory))) (put #'tramp-get-debug-file-name 'tramp-suppress-trace t) +(defun tramp-trace-buffer-name (vec) + "A name for the trace buffer for VEC." + (tramp-compat-string-replace "debug" "trace" (tramp-debug-buffer-name vec))) + +(put #'tramp-trace-buffer-name 'tramp-suppress-trace t) + +(defvar tramp-trace-functions nil + "A list of non-Tramp functions to be trace with tramp-verbose > 10.") + (defun tramp-debug-message (vec fmt-string &rest arguments) "Append message to debug buffer of VEC. Message is formatted with FMT-STRING as control string and the remaining @@ -1922,10 +1933,13 @@ ARGUMENTS to actually emit the message (if applicable)." (or tramp-repository-version ""))))) ;; Traces. (when (>= tramp-verbose 11) - (dolist (elt (all-completions "tramp-" obarray 'functionp)) - (let ((fn (intern elt))) - (unless (get fn 'tramp-suppress-trace) - (trace-function-background fn))))) + (dolist + (elt + (append + (mapcar #'intern (all-completions "tramp-" obarray 'functionp)) + tramp-trace-functions)) + (unless (get elt 'tramp-suppress-trace) + (trace-function-background elt)))) ;; Delete debug file. (when (and tramp-debug-to-file (tramp-get-debug-file-name vec)) (ignore-errors (delete-file (tramp-get-debug-file-name vec))))) diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 52480bac7e..a045b9c62f 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -179,6 +179,11 @@ The temporary file is not created." "Whether `tramp--test-instrument-test-case' run. This shall used dynamically bound only.") +;; When `tramp-verbose' is greater than 10, and you want to trace +;; other functions as well, do something like +;; (let ((tramp-trace-functions '(file-name-non-special))) +;; (tramp--test-instrument-test-case 11 +;; ...)) (defmacro tramp--test-instrument-test-case (verbose &rest body) "Run BODY with `tramp-verbose' equal VERBOSE. Print the content of the Tramp connection and debug buffers, if @@ -187,8 +192,7 @@ is greater than 10. `should-error' is not handled properly. BODY shall not contain a timeout." (declare (indent 1) (debug (natnump body))) `(let* ((tramp-verbose (max (or ,verbose 0) (or tramp-verbose 0))) - (trace-buffer - (when (> tramp-verbose 10) (generate-new-buffer " *temp*"))) + (trace-buffer (tramp-trace-buffer-name tramp-test-vec)) (debug-ignored-errors (append '("^make-symbolic-link not supported$" @@ -198,13 +202,9 @@ is greater than 10. (unwind-protect (let ((tramp--test-instrument-test-case-p t)) ,@body) ;; Unwind forms. - (when trace-buffer - (untrace-all)) (when (and (null tramp--test-instrument-test-case-p) (> tramp-verbose 3)) - (dolist - (buf (append - (tramp-list-tramp-buffers) - (and trace-buffer (list (get-buffer trace-buffer))))) + (untrace-all) + (dolist (buf (tramp-list-tramp-buffers)) (with-current-buffer buf (message ";; %s\n%s" buf (buffer-string))) (kill-buffer buf)))))) commit 5be26b43f441e429dadbf7c8beccb351a84f1275 Author: dickmao Date: Thu May 13 15:21:53 2021 +0200 Process sentinels need to work under X and commandline * src/process.c (add_non_keyboard_read_fd): Make this a public function. (add_process_read_fd): Fold old, static add_non_keyboard_read_fd guts into here. * src/xsmfns.c (ice_conn_watch_CB): Call add_non_keyboard_read_fd (bug#43834). diff --git a/src/process.c b/src/process.c index 84e301a87a..47a2a6f1a3 100644 --- a/src/process.c +++ b/src/process.c @@ -473,8 +473,15 @@ add_read_fd (int fd, fd_callback func, void *data) fd_callback_info[fd].data = data; } +void +add_non_keyboard_read_fd (int fd, fd_callback func, void *data) +{ + add_read_fd(fd, func, data); + fd_callback_info[fd].flags &= ~KEYBOARD_FD; +} + static void -add_non_keyboard_read_fd (int fd) +add_process_read_fd (int fd) { eassert (fd >= 0 && fd < FD_SETSIZE); eassert (fd_callback_info[fd].func == NULL); @@ -483,12 +490,6 @@ add_non_keyboard_read_fd (int fd) fd_callback_info[fd].flags |= FOR_READ; if (fd > max_desc) max_desc = fd; -} - -static void -add_process_read_fd (int fd) -{ - add_non_keyboard_read_fd (fd); eassert (0 <= fd && fd < FD_SETSIZE); fd_callback_info[fd].flags |= PROCESS_FD; } diff --git a/src/process.h b/src/process.h index d041ada586..0890f253a4 100644 --- a/src/process.h +++ b/src/process.h @@ -284,6 +284,7 @@ extern bool kbd_on_hold_p (void); typedef void (*fd_callback) (int fd, void *data); extern void add_read_fd (int fd, fd_callback func, void *data); +extern void add_non_keyboard_read_fd (int fd, fd_callback func, void *data); extern void delete_read_fd (int fd); extern void add_write_fd (int fd, fd_callback func, void *data); extern void delete_write_fd (int fd); diff --git a/src/xsmfns.c b/src/xsmfns.c index 10565a4b25..ddb86d82fe 100644 --- a/src/xsmfns.c +++ b/src/xsmfns.c @@ -357,7 +357,7 @@ ice_conn_watch_CB (IceConn iceConn, IcePointer clientData, } ice_fd = IceConnectionNumber (iceConn); - add_read_fd (ice_fd, x_session_check_input, NULL); + add_non_keyboard_read_fd (ice_fd, x_session_check_input, NULL); } /* Create the client leader window. */ commit 1aaceec93173fd98c25dfe282b2fa2030ccf14f0 Author: Eli Zaretskii Date: Thu May 13 16:12:10 2021 +0300 Fix vertical cursor motion across tall text or small images 'line-move-partial' should in general leave it to the display engine to scroll or recenter the window due to vertical motion of the cursor. The only purpose of this function is to produce vscroll suitable for scrolling across large (relatively to the window's height) images, where moving by display lines is not appropriate. * src/xdisp.c (Fdisplay__line_is_continued_p): New primitive. * lisp/simple.el (line-move-partial): Call 'display--line-is-continued-p' to decide whether to leave it to redisplay to scroll the window as appropriate. (Bug#48170) diff --git a/lisp/simple.el b/lisp/simple.el index 35bb472be0..0255f69e42 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -6935,11 +6935,13 @@ The value is a floating-point number." (or (null rbot) (= rbot 0))) nil) ;; If cursor is not in the bottom scroll margin, and the - ;; current line is not too tall, move forward. + ;; current line is not too tall, or if there's a continuation + ;; line below this one, move forward. ((and (or (null this-height) (<= this-height winh)) vpos (> vpos 0) - (< py last-line)) + (or (< py last-line) + (display--line-is-continued-p))) nil) ;; When already vscrolled, we vscroll some more if we can, ;; or clear vscroll and move forward at end of tall image. diff --git a/src/xdisp.c b/src/xdisp.c index 23b4ba5c39..4841a0af6f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -10838,6 +10838,47 @@ include the height of both, if present, in the return value. */) return Fcons (make_fixnum (x - start_x), make_fixnum (y)); } + +DEFUN ("display--line-is-continued-p", Fdisplay__line_is_continued_p, + Sdisplay__line_is_continued_p, 0, 0, 0, + doc: /* Return non-nil if the current screen line is continued on display. */) + (void) +{ + struct buffer *oldb = current_buffer; + struct window *w = XWINDOW (selected_window); + enum move_it_result rc = MOVE_POS_MATCH_OR_ZV; + + set_buffer_internal_1 (XBUFFER (w->contents)); + + if (PT < ZV) + { + struct text_pos startpos; + struct it it; + void *itdata; + /* Use a marker, since vertical-motion enters redisplay, which can + trigger fontifications, which in turn could modify buffer text. */ + Lisp_Object opoint = Fpoint_marker (); + + /* Make sure to start from the beginning of the current screen + line, so that move_it_in_display_line_to counts pixels correctly. */ + Fvertical_motion (make_fixnum (0), selected_window, Qnil); + SET_TEXT_POS (startpos, PT, PT_BYTE); + itdata = bidi_shelve_cache (); + start_display (&it, w, startpos); + /* If lines are truncated, no line is continued. */ + if (it.line_wrap != TRUNCATE) + { + it.glyph_row = NULL; + rc = move_it_in_display_line_to (&it, ZV, -1, MOVE_TO_POS); + } + SET_PT_BOTH (marker_position (opoint), marker_byte_position (opoint)); + bidi_unshelve_cache (itdata, false); + } + set_buffer_internal_1 (oldb); + + return rc == MOVE_LINE_CONTINUED ? Qt : Qnil; +} + /*********************************************************************** Messages @@ -34739,6 +34780,7 @@ be let-bound around code that needs to disable messages temporarily. */); defsubr (&Swindow_text_pixel_size); defsubr (&Smove_point_visually); defsubr (&Sbidi_find_overridden_directionality); + defsubr (&Sdisplay__line_is_continued_p); DEFSYM (Qmenu_bar_update_hook, "menu-bar-update-hook"); DEFSYM (Qoverriding_terminal_local_map, "overriding-terminal-local-map"); commit 1b919004f65f6987c5815e7d65a00b78e19fc7ac Author: Michael Albinus Date: Thu May 13 13:57:46 2021 +0200 Fix bug#48349 in file-name-non-special * lisp/files.el (file-name-non-special): Use Tramp file name handler only in case of `copy-file', 'rename-file' and `copy-directory'. (Bug#48349) diff --git a/lisp/files.el b/lisp/files.el index 60f72660f3..4fdafe19db 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -7492,12 +7492,7 @@ only these files will be asked to be saved." ;; operations, which return a file name. See Bug#29579. (defun file-name-non-special (operation &rest arguments) - (let (;; In general, we don't want any file name handler. For some - ;; few cases, operations with two file name arguments which - ;; might be bound to different file name handlers, we still - ;; need this. - (saved-file-name-handler-alist file-name-handler-alist) - (inhibit-file-name-handlers + (let ((inhibit-file-name-handlers (cons 'file-name-non-special (and (eq inhibit-file-name-operation operation) inhibit-file-name-handlers))) @@ -7583,72 +7578,73 @@ only these files will be asked to be saved." (when (car pair) (setcar pair (file-name-unquote (car pair) t)))) (setq file-arg-indices (cdr file-arg-indices)))) - (pcase method - ('identity (car arguments)) - ('add - ;; This is `file-truename'. We don't want file name handlers - ;; to expand this. - (file-name-quote (let (tramp-mode) (apply operation arguments)) t)) - ('buffer-file-name - (let ((buffer-file-name (file-name-unquote buffer-file-name t))) - (apply operation arguments))) - ('insert-file-contents - (let ((visit (nth 1 arguments))) - (unwind-protect - (apply operation arguments) - (when (and visit buffer-file-name) - (setq buffer-file-name (file-name-quote buffer-file-name t)))))) - ('unquote-then-quote - ;; We can't use `cl-letf' with `(buffer-local-value)' here - ;; because it wouldn't work during bootstrapping. - (let ((buffer (current-buffer))) - ;; `unquote-then-quote' is used only for the - ;; `verify-visited-file-modtime' action, which takes a buffer - ;; as only optional argument. - (with-current-buffer (or (car arguments) buffer) - (let ((buffer-file-name (file-name-unquote buffer-file-name t))) - ;; Make sure to hide the temporary buffer change from the - ;; underlying operation. - (with-current-buffer buffer - (apply operation arguments)))))) - ('local-copy - (let* ((file-name-handler-alist saved-file-name-handler-alist) - (source (car arguments)) - (target (car (cdr arguments))) - (prefix (expand-file-name - "file-name-non-special" temporary-file-directory)) - tmpfile) - (cond - ;; If source is remote, we must create a local copy. - ((file-remote-p source) - (setq tmpfile (make-temp-name prefix)) - (apply operation source tmpfile (cddr arguments)) - (setq source tmpfile)) - ;; If source is quoted, and the unquoted source looks - ;; remote, we must create a local copy. - ((file-name-quoted-p source t) - (setq source (file-name-unquote source t)) - (when (file-remote-p source) + ;; In general, we don't want any file name handler, see Bug#47625, + ;; Bug#48349. For some few cases, operations with two file name + ;; arguments which might be bound to different file name handlers, + ;; we still need this. + (let ((tramp-mode (and tramp-mode (eq method 'local-copy)))) + (pcase method + ('identity (car arguments)) + ('add (file-name-quote (apply operation arguments) t)) + ('buffer-file-name + (let ((buffer-file-name (file-name-unquote buffer-file-name t))) + (apply operation arguments))) + ('insert-file-contents + (let ((visit (nth 1 arguments))) + (unwind-protect + (apply operation arguments) + (when (and visit buffer-file-name) + (setq buffer-file-name (file-name-quote buffer-file-name t)))))) + ('unquote-then-quote + ;; We can't use `cl-letf' with `(buffer-local-value)' here + ;; because it wouldn't work during bootstrapping. + (let ((buffer (current-buffer))) + ;; `unquote-then-quote' is used only for the + ;; `verify-visited-file-modtime' action, which takes a + ;; buffer as only optional argument. + (with-current-buffer (or (car arguments) buffer) + (let ((buffer-file-name (file-name-unquote buffer-file-name t))) + ;; Make sure to hide the temporary buffer change from + ;; the underlying operation. + (with-current-buffer buffer + (apply operation arguments)))))) + ('local-copy + (let ((source (car arguments)) + (target (car (cdr arguments))) + (prefix (expand-file-name + "file-name-non-special" temporary-file-directory)) + tmpfile) + (cond + ;; If source is remote, we must create a local copy. + ((file-remote-p source) (setq tmpfile (make-temp-name prefix)) - (let (file-name-handler-alist) - (apply operation source tmpfile (cddr arguments))) - (setq source tmpfile)))) - ;; If target is quoted, and the unquoted target looks remote, - ;; we must disable the file name handler. - (when (file-name-quoted-p target t) - (setq target (file-name-unquote target t)) - (when (file-remote-p target) - (setq file-name-handler-alist nil))) - ;; Do it. - (setcar arguments source) - (setcar (cdr arguments) target) - (apply operation arguments) - ;; Cleanup. - (when (and tmpfile (file-exists-p tmpfile)) - (if (file-directory-p tmpfile) - (delete-directory tmpfile 'recursive) (delete-file tmpfile))))) - (_ - (apply operation arguments))))) + (apply operation source tmpfile (cddr arguments)) + (setq source tmpfile)) + ;; If source is quoted, and the unquoted source looks + ;; remote, we must create a local copy. + ((file-name-quoted-p source t) + (setq source (file-name-unquote source t)) + (when (file-remote-p source) + (setq tmpfile (make-temp-name prefix)) + (let (file-name-handler-alist) + (apply operation source tmpfile (cddr arguments))) + (setq source tmpfile)))) + ;; If target is quoted, and the unquoted target looks + ;; remote, we must disable the file name handler. + (when (file-name-quoted-p target t) + (setq target (file-name-unquote target t)) + (when (file-remote-p target) + (setq file-name-handler-alist nil))) + ;; Do it. + (setcar arguments source) + (setcar (cdr arguments) target) + (apply operation arguments) + ;; Cleanup. + (when (and tmpfile (file-exists-p tmpfile)) + (if (file-directory-p tmpfile) + (delete-directory tmpfile 'recursive) (delete-file tmpfile))))) + (_ + (apply operation arguments)))))) (defsubst file-name-quoted-p (name &optional top) "Whether NAME is quoted with prefix \"/:\". commit 218001e48493a1cec1b6b98224f3fd1df1783a60 Author: Stefan Kangas Date: Thu May 13 13:45:04 2021 +0200 Document `package-quickstart' in the user manual * doc/emacs/package.texi (Package Installation): Document `package-quickstart' (bug#44748). diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi index c2bd5cb9c2..d419a4e24b 100644 --- a/doc/emacs/package.texi +++ b/doc/emacs/package.texi @@ -416,12 +416,12 @@ just make some new commands available, while others have more wide-ranging effects on the Emacs session. For such information, consult the package's help buffer. - After a package is installed, it is automatically made available by -Emacs in all subsequent sessions. This happens at startup, before -processing the init file but after processing the early init file -(@pxref{Early Init File}). As an exception, Emacs does not make -packages available at startup if invoked with the @samp{-q} or -@samp{--no-init-file} options (@pxref{Initial Options}). + Installed packages are automatically made available by Emacs in all +subsequent sessions. This happens at startup, before processing the +init file but after processing the early init file (@pxref{Early Init +File}). As an exception, Emacs does not make packages available at +startup if invoked with the @samp{-q} or @samp{--no-init-file} options +(@pxref{Initial Options}). @vindex package-enable-at-startup To keep Emacs from automatically making packages available at @@ -430,6 +430,17 @@ startup, change the variable @code{package-enable-at-startup} to is read before loading the regular init file. Currently this variable cannot be set via Customize. +@findex package-quickstart-refresh +@vindex package-quickstart + If you have many packages installed, you can improve startup times +by setting the user option @code{package-quickstart} to @code{t}. +Setting this option will make Emacs precompute many things instead of +re-computing them on every Emacs startup. However, if you do this, +then you have to manually run the command +@code{package-quickstart-refresh} when the activations need to be +changed, such as when you change the value of +@code{package-load-list}. + @findex package-activate-all If you have set @code{package-enable-at-startup} to @code{nil}, you can still make packages available either during or after startup. To commit 0e69c85d7d6d46ab9c0d10051066a365e76a901f Author: Nicolás Bértolo Date: Thu May 13 13:30:29 2021 +0200 Make searching for files faster under Windows * src/lread.c (openp): Use faccessat to check that a file exists before opening it on Windows (bug#41646). This speeds up searching for files. diff --git a/src/lread.c b/src/lread.c index d2e6323cb1..bca53a9a37 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1945,7 +1945,17 @@ openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes, } else { - fd = emacs_open (pfn, O_RDONLY, 0); + /* In some systems (like Windows) finding out if a + file exists is cheaper to do than actually opening + it. Only open the file when we are sure that it + exists. */ +#ifdef WINDOWSNT + if (faccessat (AT_FDCWD, pfn, R_OK, AT_EACCESS)) + fd = -1; + else +#endif + fd = emacs_open (pfn, O_RDONLY, 0); + if (fd < 0) { if (! (errno == ENOENT || errno == ENOTDIR)) commit 1af91d271e077134e272055407fb8c4312a7579b Author: Stefan Kangas Date: Thu May 13 12:17:53 2021 +0200 Don't consider obsolete commands for completion in some cases * lisp/simple.el (read-extended-command): Exclude obsolete commands that are either lacking a 'current-name' or were obsoleted in a previous major version (bug#43300). (There's been some back and forth here. Obsolete commands used to be treated normally for completion, and then they were removed. Then they were put back again, but annotated with what they were obsoleting. There was some pushback on this change, so this latest changes is a compromise between the last two states.) diff --git a/etc/NEWS b/etc/NEWS index 205f43ce52..18831e052a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -389,9 +389,10 @@ setting the variable 'auto-save-visited-mode' buffer-locally to nil. description of the properties. Likewise 'button-describe' does the same for a button. -** Obsolete commands are no longer hidden from command completion. +** Obsolete aliases are no longer hidden from command completion. Completion of command names now considers obsolete aliases as -candidates. Invoking a command via an obsolete alias now mentions the +candidates, if they were marked obsolete in the current major version +of Emacs. Invoking a command via an obsolete alias now mentions the obsolescence fact and shows the new name of the command. +++ diff --git a/lisp/simple.el b/lisp/simple.el index b4e34f1e4c..35bb472be0 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2006,7 +2006,24 @@ This function uses the `read-extended-command-predicate' user option." '(metadata (affixation-function . read-extended-command--affixation) (category . command)) - (complete-with-action action obarray string pred))) + (let ((pred + (if (memq action '(nil t)) + ;; Exclude from completions obsolete commands + ;; lacking a `current-name', or where `when' is + ;; not the current major version. + (lambda (sym) + (let ((obsolete (get sym 'byte-obsolete-info))) + (and (funcall pred sym) + (or (equal string (symbol-name sym)) + (not obsolete) + (and + ;; Has a current-name. + (functionp (car obsolete)) + ;; when >= emacs-major-version + (>= (car (version-to-list (caddr obsolete))) + emacs-major-version)))))) + pred))) + (complete-with-action action obarray string pred)))) (lambda (sym) (and (commandp sym) (cond ((null read-extended-command-predicate)) commit adbdf85e23f3e9c1e74002365a9c15643774bbaa Author: Radon Rosborough Date: Thu May 13 11:40:59 2021 +0200 Use an explicit line width of 1 on hollow cursors under X * src/xterm.c (x_draw_hollow_cursor): Specify a line width of 1 explicitly to avoid problems on some X implementations (bug#42452). diff --git a/src/xterm.c b/src/xterm.c index a663a0f184..bdf0804f89 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -9599,11 +9599,12 @@ x_draw_hollow_cursor (struct window *w, struct glyph_row *row) /* The foreground of cursor_gc is typically the same as the normal background color, which can cause the cursor box to be invisible. */ xgcv.foreground = f->output_data.x->cursor_pixel; + xgcv.line_width = 1; if (dpyinfo->scratch_cursor_gc) - XChangeGC (dpy, dpyinfo->scratch_cursor_gc, GCForeground, &xgcv); + XChangeGC (dpy, dpyinfo->scratch_cursor_gc, GCForeground | GCLineWidth, &xgcv); else dpyinfo->scratch_cursor_gc = XCreateGC (dpy, FRAME_X_DRAWABLE (f), - GCForeground, &xgcv); + GCForeground | GCLineWidth, &xgcv); gc = dpyinfo->scratch_cursor_gc; /* When on R2L character, show cursor at the right edge of the commit cd0e7d51ab85f92f6568e711461984919500c34f Author: Eli Zaretskii Date: Thu May 13 12:33:08 2021 +0300 ; * src/image.c (xpm_format, xpm_valid_color_symbols_p): Fix last change. diff --git a/src/image.c b/src/image.c index d514f9713e..b34dc3e916 100644 --- a/src/image.c +++ b/src/image.c @@ -4061,6 +4061,7 @@ enum xpm_keyword_index XPM_LAST }; +#if defined HAVE_XPM || defined HAVE_NS /* Vector of image_keyword structures describing the format of valid XPM image specifications. */ @@ -4078,6 +4079,7 @@ static const struct image_keyword xpm_format[XPM_LAST] = {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, {":background", IMAGE_STRING_OR_NIL_VALUE, 0} }; +#endif /* HAVE_XPM || HAVE_NS */ #if defined HAVE_X_WINDOWS && !defined USE_CAIRO @@ -4301,6 +4303,7 @@ init_xpm_functions (void) #endif /* WINDOWSNT */ +#if defined HAVE_XPM || defined HAVE_NS /* Value is true if COLOR_SYMBOLS is a valid color symbols list for XPM images. Such a list must consist of conses whose car and cdr are strings. */ @@ -4321,8 +4324,6 @@ xpm_valid_color_symbols_p (Lisp_Object color_symbols) return NILP (color_symbols); } - -#if defined HAVE_XPM || defined HAVE_NS /* Value is true if OBJECT is a valid XPM image specification. */ static bool commit 3547e01d963bf037bd0184f2132ff09885001354 Author: Eli Zaretskii Date: Thu May 13 12:23:19 2021 +0300 * src/image.c (xpm_image_p): Avoid another compiler warning. diff --git a/src/image.c b/src/image.c index d0fc4ed741..d514f9713e 100644 --- a/src/image.c +++ b/src/image.c @@ -4322,6 +4322,7 @@ xpm_valid_color_symbols_p (Lisp_Object color_symbols) } +#if defined HAVE_XPM || defined HAVE_NS /* Value is true if OBJECT is a valid XPM image specification. */ static bool @@ -4337,6 +4338,7 @@ xpm_image_p (Lisp_Object object) && (! fmt[XPM_COLOR_SYMBOLS].count || xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value))); } +#endif /* HAVE_XPM || HAVE_NS */ #endif /* HAVE_XPM || USE_CAIRO || HAVE_NS */ commit 0b0ab33f2de89e56013f60887afbcb9c01f7363d Author: Eli Zaretskii Date: Thu May 13 12:17:44 2021 +0300 * src/image.c: Avoid compiler warnings in Cairo builds without XPM. diff --git a/src/image.c b/src/image.c index f2fb69ab74..d0fc4ed741 100644 --- a/src/image.c +++ b/src/image.c @@ -4706,10 +4706,11 @@ xpm_load (struct frame *f, struct image *img) #endif /* HAVE_XPM && !USE_CAIRO */ -#if defined USE_CAIRO || (defined HAVE_NS && !defined HAVE_XPM) +#if (defined USE_CAIRO && defined HAVE_XPM) \ + || (defined HAVE_NS && !defined HAVE_XPM) -/* XPM support functions for NS where libxpm is not available. - Only XPM version 3 (without any extensions) is supported. */ +/* XPM support functions for NS where libxpm is not available, and for + Cairo. Only XPM version 3 (without any extensions) is supported. */ static void xpm_put_color_table_v (Lisp_Object, const char *, int, Lisp_Object); commit bcd92b5708083a6c10d4f0aa785cbd69fd8f7035 (refs/remotes/origin/emacs-27) Author: Eli Zaretskii Date: Tue May 11 20:06:02 2021 +0300 Improve documentation of Hexl mode * doc/emacs/misc.texi (Editing Binary Files): Explain that Hexl can also be used for editing text, including non-ASCII text. diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 68941727f4..dcbfd75f92 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -2566,6 +2566,17 @@ Other Hexl commands let you insert strings (sequences) of binary bytes, move by @code{short}s or @code{int}s, etc.; type @kbd{C-h a hexl-@key{RET}} for details. + Hexl mode can also be used for editing text files. This could come +in handy if the text file includes unusual characters or uses unusual +encoding (@pxref{Coding Systems}). For this purpose, Hexl commands +that insert bytes can also insert @acronym{ASCII} and +non-@acronym{ASCII} characters, including multibyte characters. To +edit a text file with Hexl, visit the file as usual, and then type +@w{@kbd{M-x hexl-mode @key{RET}}} to switch to Hexl mode. You can now +insert text characters by typing them. However, inserting multibyte +characters requires special care, to avoid the danger of creating +invalid multibyte sequences: you should start typing such characters +when point is on the first byte of a multibyte sequence in the file. @node Saving Emacs Sessions @section Saving Emacs Sessions commit c233f4eccddf09e41441b2a292491b469fd61792 Author: Basil L. Contovounesios Date: Sun May 9 14:46:27 2021 +0100 ; * etc/NEWS: Fix decoded-time-set-defaults typo. This was mistakenly applied to NEWS.27 on the master branch in 2021-05-09 "; Fix decoded-time-set-defaults typo in NEWS.27." but that has now been reverted (bug#48298). diff --git a/etc/NEWS b/etc/NEWS index 8226ad3d1d..1959bb8f32 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2734,7 +2734,7 @@ days there are in a month in a specific year), 'date-ordinal-to-time' (that computes the date of an ordinal day), 'decoded-time-add' (for doing computations on a decoded time structure), 'make-decoded-time' (for making a decoded time structure with only the given keywords -filled out), and 'encoded-time-set-defaults' (which fills in nil +filled out), and 'decoded-time-set-defaults' (which fills in nil elements as if it's midnight January 1st, 1970) have been added. *** In the DST slot, 'encode-time' and 'parse-time-string' now return -1 commit 4c3abb3dd105e075bf1cf55e3fe8b5ec2ac8e6cc Author: Eli Zaretskii Date: Sun May 9 10:59:08 2021 +0300 Fix compilation errors with latest w32 API headers * src/w32common.h: Rename OS_* to OS_SUBTYPE__*, as w32 API headers started defining OS_NT, which breaks the use of the enumeration. All users changed. (Bug#48303) diff --git a/src/dynlib.c b/src/dynlib.c index 86f8b7e206..62fc16e180 100644 --- a/src/dynlib.c +++ b/src/dynlib.c @@ -135,7 +135,7 @@ dynlib_addr (void (*funcptr) (void), const char **fname, const char **symname) void *addr = (void *) funcptr; /* Step 1: Find the handle of the module where ADDR lives. */ - if (os_subtype == OS_9X + if (os_subtype == OS_SUBTYPE_9X /* Windows NT family version before XP (v5.1). */ || ((w32_major_version + (w32_minor_version > 0)) < 6)) { diff --git a/src/w32.c b/src/w32.c index d4f3192442..f5b76979d7 100644 --- a/src/w32.c +++ b/src/w32.c @@ -4674,7 +4674,7 @@ sys_rename_replace (const char *oldname, const char *newname, BOOL force) /* volume_info is set indirectly by map_w32_filename. */ oldname_dev = volume_info.serialnum; - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) { char * o; char * p; @@ -10323,7 +10323,7 @@ shutdown_handler (DWORD type) HANDLE maybe_load_unicows_dll (void) { - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) { HANDLE ret = LoadLibrary ("Unicows.dll"); if (ret) diff --git a/src/w32common.h b/src/w32common.h index 94bb457e59..0f0be021b2 100644 --- a/src/w32common.h +++ b/src/w32common.h @@ -41,8 +41,8 @@ extern int w32_minor_version; extern int w32_build_number; enum { - OS_9X = 1, - OS_NT + OS_SUBTYPE_9X = 1, + OS_SUBTYPE_NT }; extern int os_subtype; diff --git a/src/w32console.c b/src/w32console.c index cb9e288e88..99546c2d75 100644 --- a/src/w32console.c +++ b/src/w32console.c @@ -803,7 +803,7 @@ initialize_w32_display (struct terminal *term, int *width, int *height) ceol_initialized = FALSE; } - if (os_subtype == OS_NT) + if (os_subtype == OS_SUBTYPE_NT) w32_console_unicode_input = 1; else w32_console_unicode_input = 0; diff --git a/src/w32fns.c b/src/w32fns.c index fcee1934ba..00e7a3698b 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -8087,7 +8087,7 @@ DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash, /* The Unicode version of SHFileOperation is not supported on Windows 9X. */ - if (w32_unicode_filenames && os_subtype != OS_9X) + if (w32_unicode_filenames && os_subtype != OS_SUBTYPE_9X) { SHFILEOPSTRUCTW file_op_w; /* We need one more element beyond MAX_PATH because this is @@ -9216,7 +9216,7 @@ The coordinates X and Y are interpreted in pixels relative to a position /* When "mouse trails" are in effect, moving the mouse cursor sometimes leaves behind an annoying "ghost" of the pointer. Avoid that by momentarily switching off mouse trails. */ - if (os_subtype == OS_NT + if (os_subtype == OS_SUBTYPE_NT && w32_major_version + w32_minor_version >= 6) ret = SystemParametersInfo (SPI_GETMOUSETRAILS, 0, &trail_num, 0); SetCursorPos (XFIXNUM (x), XFIXNUM (y)); @@ -9391,7 +9391,7 @@ DEFUN ("default-printer-name", Fdefault_printer_name, Sdefault_printer_name, if (!OpenPrinter (pname_buf, &hPrn, NULL)) return Qnil; /* GetPrinterW is not supported by unicows.dll. */ - if (w32_unicode_filenames && os_subtype != OS_9X) + if (w32_unicode_filenames && os_subtype != OS_SUBTYPE_9X) GetPrinterW (hPrn, 2, NULL, 0, &dwNeeded); else GetPrinterA (hPrn, 2, NULL, 0, &dwNeeded); @@ -9401,7 +9401,7 @@ DEFUN ("default-printer-name", Fdefault_printer_name, Sdefault_printer_name, return Qnil; } /* Call GetPrinter again with big enough memory block. */ - if (w32_unicode_filenames && os_subtype != OS_9X) + if (w32_unicode_filenames && os_subtype != OS_SUBTYPE_9X) { /* Allocate memory for the PRINTER_INFO_2 struct. */ ppi2w = xmalloc (dwNeeded); @@ -9537,9 +9537,9 @@ cache_system_info (void) w32_minor_version = version.info.minor; if (version.info.platform & 0x8000) - os_subtype = OS_9X; + os_subtype = OS_SUBTYPE_9X; else - os_subtype = OS_NT; + os_subtype = OS_SUBTYPE_NT; /* Cache page size, allocation unit, processor type, etc. */ GetSystemInfo (&sysinfo_cache); @@ -9550,7 +9550,7 @@ cache_system_info (void) GetVersionEx (&osinfo_cache); w32_build_number = osinfo_cache.dwBuildNumber; - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) w32_build_number &= 0xffff; w32_num_mouse_buttons = GetSystemMetrics (SM_CMOUSEBUTTONS); @@ -9717,7 +9717,7 @@ w32_kbd_patch_key (KEY_EVENT_RECORD *event, int cpId) /* On NT, call ToUnicode instead and then convert to the current console input codepage. */ - if (os_subtype == OS_NT) + if (os_subtype == OS_SUBTYPE_NT) { WCHAR buf[128]; @@ -11078,7 +11078,7 @@ see `w32-ansi-code-page'. */); w32_multibyte_code_page = _getmbcp (); #endif - if (os_subtype == OS_NT) + if (os_subtype == OS_SUBTYPE_NT) w32_unicode_gui = 1; else w32_unicode_gui = 0; diff --git a/src/w32heap.c b/src/w32heap.c index 07694d0f5c..cdb8988e16 100644 --- a/src/w32heap.c +++ b/src/w32heap.c @@ -269,7 +269,7 @@ init_heap (bool use_dynamic_heap) } #endif - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) { the_malloc_fn = malloc_after_dump_9x; the_realloc_fn = realloc_after_dump_9x; @@ -312,7 +312,7 @@ init_heap (bool use_dynamic_heap) } heap = s_pfn_Rtl_Create_Heap (0, data_region_base, 0, 0, NULL, ¶ms); - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) { fprintf (stderr, "Cannot dump Emacs on Windows 9X; exiting.\n"); exit (-1); diff --git a/src/w32notify.c b/src/w32notify.c index b9e9063392..889fd9f3c9 100644 --- a/src/w32notify.c +++ b/src/w32notify.c @@ -566,7 +566,7 @@ generate notifications correctly, though. */) CHECK_LIST (filter); /* The underlying features are available only since XP. */ - if (os_subtype == OS_9X + if (os_subtype == OS_SUBTYPE_9X || (w32_major_version == 5 && w32_minor_version < 1)) { errno = ENOSYS; diff --git a/src/w32proc.c b/src/w32proc.c index b436eaff2c..1233ea7e54 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -623,7 +623,7 @@ init_timers (void) need to probe for its availability dynamically, and call it through a pointer. */ s_pfn_Get_Thread_Times = NULL; /* in case dumped Emacs comes with a value */ - if (os_subtype != OS_9X) + if (os_subtype != OS_SUBTYPE_9X) s_pfn_Get_Thread_Times = (GetThreadTimes_Proc) get_proc_addr (GetModuleHandle ("kernel32.dll"), "GetThreadTimes"); @@ -2653,7 +2653,7 @@ find_child_console (HWND hwnd, LPARAM arg) GetClassName (hwnd, window_class, sizeof (window_class)); if (strcmp (window_class, - (os_subtype == OS_9X) + (os_subtype == OS_SUBTYPE_9X) ? "tty" : "ConsoleWindowClass") == 0) { @@ -2877,7 +2877,7 @@ sys_kill (pid_t pid, int sig) if (NILP (Vw32_start_process_share_console) && cp && cp->hwnd) { #if 1 - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) { /* Another possibility is to try terminating the VDM out-right by @@ -3792,7 +3792,7 @@ w32_compare_strings (const char *s1, const char *s2, char *locname, if (!g_b_init_compare_string_w) { - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) { pCompareStringW = (CompareStringW_Proc) get_proc_addr (LoadLibrary ("Unicows.dll"), diff --git a/src/w32select.c b/src/w32select.c index 58cbea9130..4d72295a27 100644 --- a/src/w32select.c +++ b/src/w32select.c @@ -1207,7 +1207,7 @@ globals_of_w32select (void) QANSICP = coding_from_cp (ANSICP); QOEMCP = coding_from_cp (OEMCP); - if (os_subtype == OS_NT) + if (os_subtype == OS_SUBTYPE_NT) Vselection_coding_system = Qutf_16le_dos; else if (inhibit_window_system) Vselection_coding_system = QOEMCP; diff --git a/src/w32term.c b/src/w32term.c index 2de6b0d78c..3b33b6bac1 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -1890,7 +1890,7 @@ w32_draw_image_foreground (struct glyph_string *s) /* HALFTONE produces better results, especially when scaling to a larger size, but Windows 9X doesn't support HALFTONE. */ - if (os_subtype == OS_NT + if (os_subtype == OS_SUBTYPE_NT && (pmode = SetStretchBltMode (s->hdc, HALFTONE)) != 0) SetBrushOrgEx (s->hdc, 0, 0, NULL); StretchBlt (s->hdc, x, y, s->slice.width, s->slice.height, @@ -1926,7 +1926,7 @@ w32_draw_image_foreground (struct glyph_string *s) { int pmode = 0; /* Windows 9X doesn't support HALFTONE. */ - if (os_subtype == OS_NT + if (os_subtype == OS_SUBTYPE_NT && (pmode = SetStretchBltMode (s->hdc, HALFTONE)) != 0) SetBrushOrgEx (s->hdc, 0, 0, NULL); StretchBlt (s->hdc, x, y, s->slice.width, s->slice.height, @@ -6665,7 +6665,7 @@ frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y) /* When "mouse trails" are in effect, moving the mouse cursor sometimes leaves behind an annoying "ghost" of the pointer. Avoid that by momentarily switching off mouse trails. */ - if (os_subtype == OS_NT + if (os_subtype == OS_SUBTYPE_NT && w32_major_version + w32_minor_version >= 6) ret = SystemParametersInfo (SPI_GETMOUSETRAILS, 0, &trail_num, 0); SetCursorPos (pt.x, pt.y); @@ -7652,7 +7652,7 @@ specified by `file-name-coding-system'. This variable is set to non-nil by default when Emacs runs on Windows systems of the NT family, including W2K, XP, Vista, Windows 7 and Windows 8. It is set to nil on Windows 9X. */); - if (os_subtype == OS_9X) + if (os_subtype == OS_SUBTYPE_9X) w32_unicode_filenames = 0; else w32_unicode_filenames = 1; diff --git a/src/w32term.h b/src/w32term.h index 44378aa4c2..e55efaa13f 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -759,7 +759,7 @@ extern bool w32_image_rotations_p (void); extern void setup_w32_kbdhook (void); extern void remove_w32_kbdhook (void); extern int check_w32_winkey_state (int); -#define w32_kbdhook_active (os_subtype != OS_9X) +#define w32_kbdhook_active (os_subtype != OS_SUBTYPE_9X) #else #define w32_kbdhook_active 0 #endif commit 127f1f330b67228217fdcc0a552d37a33dc67bb9 Author: Eli Zaretskii Date: Fri May 7 10:16:11 2021 +0300 Improve doc strings in log-edit.el * lisp/vc/log-edit.el (log-edit-new-comment-index) (log-edit-maximum-comment-ring-size, log-edit-previous-comment) (log-edit-next-comment, log-edit-comment-search-backward) (log-edit-comment-search-forward) (log-edit-comment-to-change-log) (log-edit-header-contents-regexp, log-edit-font-lock-gnu-style) (log-edit, log-edit-mode, log-edit-fill-entry, log-edit-done) (log-edit-kill-buffer, log-edit-insert-message-template) (log-edit-insert-cvs-template, log-edit-insert-cvs-rcstemplate) (log-edit-rewrite-fixes, log-edit-add-to-changelog) (log-edit-generate-changelog-from-diff) (log-edit-insert-changelog, log-edit-narrow-changelog) (log-edit-changelog-entry, log-edit-changelog-insert-entries) (log-edit-extract-headers): Enhance and reword doc strings. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 0016ac423d..17468f957c 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -203,13 +203,15 @@ when this variable is set to nil.") ;;; Originally taken from VC-Log mode (defconst log-edit-maximum-comment-ring-size 32 - "Maximum number of saved comments in the comment ring.") + "Maximum number of saved commit comments in `log-edit-comment-ring'.") (defvar log-edit-comment-ring (make-ring log-edit-maximum-comment-ring-size)) (defvar log-edit-comment-ring-index nil) (defvar log-edit-last-comment-match "") (defun log-edit-new-comment-index (stride len) - "Return the comment index STRIDE elements from the current one. + "Return the comment whose index is STRIDE elements away from the current one. +This accesses `log-edit-comment-ring', which stores commit log comments, +i.e. descriptions of changes done by commits. LEN is the length of `log-edit-comment-ring'." (mod (cond (log-edit-comment-ring-index (+ log-edit-comment-ring-index stride)) @@ -221,7 +223,7 @@ LEN is the length of `log-edit-comment-ring'." len)) (defun log-edit-previous-comment (arg) - "Cycle backwards through comment history. + "Cycle backwards through VC commit comment history. With a numeric prefix ARG, go back ARG comments." (interactive "*p") (let ((len (ring-length log-edit-comment-ring))) @@ -234,15 +236,15 @@ With a numeric prefix ARG, go back ARG comments." (insert (ring-ref log-edit-comment-ring log-edit-comment-ring-index))))) (defun log-edit-next-comment (arg) - "Cycle forwards through comment history. + "Cycle forwards through VC commit comment history. With a numeric prefix ARG, go forward ARG comments." (interactive "*p") (log-edit-previous-comment (- arg))) (defun log-edit-comment-search-backward (str &optional stride) - "Search backwards through comment history for substring match of STR. + "Search backwards through VC commit comment history for a match of STR. If the optional argument STRIDE is present, that is a step-width to use -when going through the comment ring." +when going through the comment ring, `log-edit-comment-ring'." ;; Why substring rather than regexp ? -sm (interactive (list (read-string "Comment substring: " nil nil log-edit-last-comment-match))) @@ -260,16 +262,21 @@ when going through the comment ring." (log-edit-previous-comment 0))) (defun log-edit-comment-search-forward (str) - "Search forwards through comment history for a substring match of STR." + "Search forwards through VC commit comment history for a match of STR." (interactive (list (read-string "Comment substring: " nil nil log-edit-last-comment-match))) (log-edit-comment-search-backward str -1)) (defun log-edit-comment-to-change-log (&optional whoami file-name) - "Enter last VC comment into the change log for the current file. -WHOAMI (interactive prefix) non-nil means prompt for user name -and site. FILE-NAME is the name of the change log; if nil, use -`change-log-default-name'. + "Insert the last VC commit comment into the change log for the current file. +This reuses the text of the last VC commit comment in `log-edit-comment-ring' +for the change-log entry of the current file, which is handy when several +related changes have the same commit comment. +WHOAMI (interactively, prefix argument) non-nil means prompt for user name +and email address of the person to whom to attribute the change. +FILE-NAME is the name of the change log; if nil, use `change-log-default-name' +Interactively, with prefix argument, prompt for both the name and address of +the person who did the change and for FILE-NAME. This may be useful as a `vc-checkin-hook' to update change logs automatically." @@ -328,7 +335,7 @@ automatically." (defconst log-edit-header-contents-regexp "[ \t]*\\(.*\\(\n[ \t].*\\)*\\)\n?" - "Regular expression matching a header field. + "Regular expression matching the header field in `log-edit-mode'. The first subexpression is the actual text of the field.") (defun log-edit-match-to-eoh (_limit) @@ -388,7 +395,9 @@ The first subexpression is the actual text of the field.") (log-edit--match-first-line (0 'log-edit-summary)))) (defvar log-edit-font-lock-gnu-style nil - "If non-nil, highlight common failures to follow the GNU coding standards.") + "If non-nil, highlight common failures to follow VC commit log conventions. +The conventions checked are those described in the GNU coding standards +document.") (put 'log-edit-font-lock-gnu-style 'safe-local-variable 'booleanp) (defconst log-edit-font-lock-gnu-keywords @@ -431,28 +440,28 @@ The first subexpression is the actual text of the field.") ;;;###autoload (defun log-edit (callback &optional setup params buffer mode &rest _ignore) - "Setup a buffer to enter a log message. -The buffer is put in mode MODE or `log-edit-mode' if MODE is nil. + "Setup a buffer to enter a VC commit log message. +The buffer is put in mode MODE, or `log-edit-mode' if MODE is nil. \\ If SETUP is non-nil, erase the buffer and run `log-edit-hook'. Set mark and point around the entire contents of the buffer, so that it is easy to kill the contents of the buffer with -\\[kill-region]. Once the user is done editing the message, -invoking the command \\[log-edit-done] (`log-edit-done') will -call CALLBACK to do the actual commit. +\\[kill-region]. Once the user is done editing the message, he +or she is expected to invoke the command \\[log-edit-done] (`log-edit-done'), +which will call CALLBACK, a function to do the actual commit. -PARAMS if non-nil is an alist of variables and buffer-local -values to give them in the Log Edit buffer. Possible keys and -associated values: +PARAMS, if non-nil, is an alist of variables and buffer-local +values to give to those variables in the Log Edit buffer. Possible +keys and associated values are: `log-edit-listfun' -- function taking no arguments that returns the list of - files that are concerned by the current operation (using relative names); + files that are concerned by the current operation (using relative names); `log-edit-diff-function' -- function taking no arguments that - displays a diff of the files concerned by the current operation. + displays a diff of the files concerned by the current operation. `vc-log-fileset' -- the VC fileset to be committed (if any). -If BUFFER is non-nil `log-edit' will jump to that buffer, use it +If BUFFER is non-nil, `log-edit' will switch to that buffer, use it to edit the log message and go back to the current buffer when -done. Otherwise, it uses the current buffer." +done. Otherwise, this function will use the current buffer." (let ((parent (current-buffer))) (if buffer (pop-to-buffer buffer)) (when (and log-edit-setup-invert (not (eq setup 'force))) @@ -478,12 +487,12 @@ done. Otherwise, it uses the current buffer." "Press \\[log-edit-done] when you are done editing.")))) (define-derived-mode log-edit-mode text-mode "Log-Edit" - "Major mode for editing version-control log messages. -When done editing the log entry, just type \\[log-edit-done] which -will trigger the actual commit of the file(s). -Several other handy support commands are provided of course and -the package from which this is used might also provide additional -commands (under C-x v for VC, for example). + "Major mode for editing version-control (VC) commit log messages. +When done editing the log entry, type \\[log-edit-done], which will +trigger the actual commit of the file(s). +Several other handy support commands are provided, and the package +from which this is used might also provide additional commands (under +the \"C-x v\" prefix for VC commands, for example). \\{log-edit-mode-map}" (set (make-local-variable 'font-lock-defaults) @@ -513,7 +522,7 @@ commands (under C-x v for VC, for example). (insert "):"))) (defun log-edit-fill-entry (&optional justify) - "Like \\[fill-paragraph], but handle ChangeLog entries. + "Like \\[fill-paragraph], but for filling ChangeLog-formatted entries. Consecutive function entries without prose (i.e., lines of the form \"(FUNCTION):\") will be combined into \"(FUNC1, FUNC2):\" according to `fill-column'." @@ -563,7 +572,7 @@ according to `fill-column'." (ring-insert log-edit-comment-ring comment))) (defun log-edit-done () - "Finish editing the log message and commit the files. + "Finish editing the VC commit log message, and commit the files. If you want to abort the commit, simply delete the buffer." (interactive) ;; Clean up empty headers. @@ -610,9 +619,9 @@ If you want to abort the commit, simply delete the buffer." (call-interactively log-edit-callback)))) (defun log-edit-kill-buffer () - "Kill the current buffer. -Also saves its contents in the comment history and hides -`log-edit-files-buf'." + "Kill the current VC commit log buffer. +This command saves the contents of the log buffer in the VC commit +comment history, see `log-edit-comment-ring', and hides `log-edit-files-buf'." (interactive) (log-edit-hide-buf) (let ((buf (current-buffer))) @@ -694,7 +703,7 @@ different header separator appropriate for `log-edit-mode'." (eobp)))) (defun log-edit-insert-message-template () - "Insert the default template with Summary and Author." + "Insert the default VC commit log template with Summary and Author." (interactive) (when (or (called-interactively-p 'interactive) (log-edit-empty-buffer-p)) @@ -705,7 +714,7 @@ different header separator appropriate for `log-edit-mode'." (message-position-point))) (defun log-edit-insert-cvs-template () - "Insert the template specified by the CVS administrator, if any. + "Insert the commit log template specified by the CVS administrator, if any. This simply uses the local CVS/Template file." (interactive) (when (or (called-interactively-p 'interactive) @@ -717,7 +726,7 @@ This simply uses the local CVS/Template file." (insert-file-contents "CVS/Template")))) (defun log-edit-insert-cvs-rcstemplate () - "Insert the rcstemplate from the CVS repository. + "Insert the RCS commit log template from the CVS repository. This contacts the repository to get the rcstemplate file and can thus take some time." (interactive) @@ -751,7 +760,7 @@ can thus take some time." (insert (mapconcat 'identity files ", ") ": ")))) (defun log-edit-add-to-changelog () - "Insert this log message into the appropriate ChangeLog file." + "Insert this VC commit log message into the appropriate ChangeLog file." (interactive) (log-edit-remember-comment) (dolist (f (log-edit-files)) @@ -765,7 +774,7 @@ can thus take some time." "Non-nil means rewrite (tiny change).") (defvar log-edit-rewrite-fixes nil - "Rule to rewrite bug numbers into Fixes: headers. + "Rule to rewrite bug numbers into Fixes: headers in commit log messages. The value should be of the form (REGEXP . REPLACEMENT) where REGEXP should match the expression referring to a bug number in the text, and REPLACEMENT is an expression to pass to `replace-match' @@ -783,10 +792,11 @@ to build the Fixes: header.") (declare-function diff-add-log-current-defuns "diff-mode" ()) (defun log-edit-generate-changelog-from-diff () - "Insert a log message by looking at the current diff. + "Insert a VC commit log message by looking at the current diff. +This command is intended to be uses on the \"*vc-log*\" buffer. This command will generate a ChangeLog entries listing the -functions. You can then add a description where needed, and use -\\[fill-paragraph] to join consecutive function names." +changed functions. You can then add a description where needed, +and use \\[fill-paragraph] to join consecutive function names." (interactive) (change-log-insert-entries (with-current-buffer @@ -804,21 +814,21 @@ functions. You can then add a description where needed, and use (diff-add-log-current-defuns)))) (defun log-edit-insert-changelog (&optional use-first) - "Insert a log message by looking at the ChangeLog. + "Insert a VC commit log message by looking at the ChangeLog. The idea is to write your ChangeLog entries first, and then use this -command to commit your changes. +command to commit your changes with that log. -To select default log text, we: -- find the ChangeLog entries for the files to be checked in, -- verify that the top entry in the ChangeLog is on the current date - and by the current user; if not, we don't provide any default text, -- search the ChangeLog entry for paragraphs containing the names of - the files we're checking in, and finally -- use those paragraphs as the log text. +To select default log text, this command: +- finds the ChangeLog entries for the files to be checked in; +- verifies that the top entry in the ChangeLog is on the current date + and by the current user; if not, it doesn't provide any default text; +- searches the ChangeLog entry for paragraphs containing the names of + the files to be checked in; and finally +- uses those paragraphs as the log text. If the optional prefix arg USE-FIRST is given (via \\[universal-argument]), -or if the command is repeated a second time in a row, use the first log entry -regardless of user name or time." +or if the command is repeated, use the first log entry regardless of user +name or time." (interactive "P") (save-excursion (let ((eoh (save-excursion (rfc822-goto-eoh) (point)))) @@ -868,7 +878,7 @@ regardless of user name or time." ;;;; (defun log-edit-narrow-changelog () - "Narrow to the top page of the current buffer, a ChangeLog file. + "Narrow to the top page of the current buffer, which visits a ChangeLog file. Actually, the narrowed region doesn't include the date line. A \"page\" in a ChangeLog file is the area between two dates." (or (eq major-mode 'change-log-mode) @@ -916,7 +926,7 @@ If we are between sub-paragraphs, return the previous subparagraph." (defun log-edit-changelog-entry () "Return the bounds of the ChangeLog entry containing point. -The variable `log-edit-changelog-full-paragraphs' decides whether an +The variable `log-edit-changelog-full-paragraphs' determines whether an \"entry\" is a paragraph or a subparagraph; see its documentation string for more details." (save-excursion @@ -1041,8 +1051,12 @@ where LOGBUFFER is the name of the ChangeLog buffer, and each "\\($\\|[^[:alnum:]]\\)"))))) (defun log-edit-changelog-insert-entries (buffer beg end &rest files) - "Insert the text from BUFFER between BEG and END. -Rename relative filenames in the ChangeLog entry as FILES." + "Insert the text from ChangeLog BUFFER between BEG and END. +Rename relative filenames in the ChangeLog entry with FILES. +FILES are supposed to name the same files whose relative filenames +are to be replaced, and their names relative to the directory of +BUFFER are expected to match the relative file names in the ChangeLog +entry." (let ((opoint (point)) (log-name (buffer-file-name buffer)) (case-fold-search nil) @@ -1124,7 +1138,7 @@ Return t if toggled on (or TOGGLE is nil), otherwise nil." val)) (defun log-edit-extract-headers (headers comment) - "Extract headers from COMMENT to form command line arguments. + "Extract headers from VC commit COMMENT to form command line arguments. HEADERS should be an alist with elements (HEADER . CMDARG) or (HEADER . FUNCTION) associating headers to command line options and the result is then a list of the form (MSG ARGUMENTS...) commit e36183ff466f0f3059811022b0e2085acfd03096 Author: Eli Zaretskii Date: Thu May 6 11:41:43 2021 +0300 ; * etc/TODO (etc/DOC): Update the todo entries. diff --git a/etc/TODO b/etc/TODO index db60ad7a27..88faaa15a5 100644 --- a/etc/TODO +++ b/etc/TODO @@ -1761,8 +1761,17 @@ apparently loses under Solaris, at least. [fx has mostly done this.] (Obsolete, since gmalloc.c is nowadays only used on MS-DOS.) ** Rewrite make-docfile to be clean and maintainable -It might be better to replace it with Lisp, using the byte compiler. +It might be better to replace with Lisp the part of make-docfile that +produces the etc/DOC file by scanning *.el files, for example by +reusing the code in the byte compiler or in autoload.el that already +scans *.el files. https://lists.gnu.org/r/emacs-devel/2012-06/msg00037.html +https://lists.gnu.org/r/emacs-devel/2021-05/msg00235.html + +** Eliminate the etc/DOC file altogether +As an alternative to the previous item, we could try and eliminate the +DOC file altogether. See +https://lists.gnu.org/r/emacs-devel/2021-05/msg00237.html ** Add an inferior-comint-minor-mode The purpose is to have a mode to capture the common set of operations