Taken from: /usr/share/emacs/21.4/etc/PROBLEMS * The Calc package fails to build and signals errors with Emacs 21. Apply the following patches which reportedly fix several problems: --- calc-ext.el.~1~ Sun Apr 3 02:26:34 1994 +++ calc-ext.el Wed Sep 18 17:35:01 1996 @@ -1354,6 +1354,25 @@ (calc-fancy-prefix 'calc-inverse-flag "Inverse..." n) ) +(defconst calc-fancy-prefix-map + (let ((map (make-sparse-keymap))) + (define-key map [t] 'calc-fancy-prefix-other-key) + (define-key map (vector meta-prefix-char t) 'calc-fancy-prefix-other-key) + (define-key map [switch-frame] nil) + (define-key map [?\C-u] 'universal-argument) + (define-key map [?0] 'digit-argument) + (define-key map [?1] 'digit-argument) + (define-key map [?2] 'digit-argument) + (define-key map [?3] 'digit-argument) + (define-key map [?4] 'digit-argument) + (define-key map [?5] 'digit-argument) + (define-key map [?6] 'digit-argument) + (define-key map [?7] 'digit-argument) + (define-key map [?8] 'digit-argument) + (define-key map [?9] 'digit-argument) + map) + "Keymap used while processing calc-fancy-prefix.") + (defun calc-fancy-prefix (flag msg n) (let (prefix) (calc-wrapper @@ -1364,6 +1383,8 @@ (message (if prefix msg ""))) (and prefix (not calc-is-keypad-press) + (if (boundp 'overriding-terminal-local-map) + (setq overriding-terminal-local-map calc-fancy-prefix-map) (let ((event (calc-read-key t))) (if (eq (setq last-command-char (car event)) ?\C-u) (universal-argument) @@ -1376,9 +1397,18 @@ (if (or (not (integerp last-command-char)) (eq last-command-char ?-)) (calc-unread-command) - (digit-argument n)))))) + (digit-argument n))))))) ) (setq calc-is-keypad-press nil) + +(defun calc-fancy-prefix-other-key (arg) + (interactive "P") + (if (or (not (integerp last-command-char)) + (and (>= last-command-char 0) (< last-command-char ? ) + (not (eq last-command-char meta-prefix-char)))) + (calc-wrapper)) ; clear flags if not a Calc command. + (calc-unread-command) + (setq overriding-terminal-local-map nil)) (defun calc-invert-func () (save-excursion Index: Makefile --- Makefile.~1~ Sun Dec 15 23:50:45 1996 +++ Makefile Thu Nov 30 15:09:45 2000 @@ -41,7 +41,7 @@ # Other macros. EFLAGS = -batch -MAINT = -l calc-maint.elc +MAINT = -l calc-maint.el # Control whether intermediate files are kept. PURGE = -rm -f @@ -154,10 +154,7 @@ # All this because "-l calc-maint" doesn't work. -maint: calc-maint.elc -calc-maint.elc: calc-maint.el - cp calc-maint.el calc-maint.elc - +maint: calc-maint.el # Create an Emacs TAGS file tags: TAGS Index: calc-aent.el --- calc-aent.el.~1~ Sun Dec 15 23:50:36 1996 +++ calc-aent.el Tue Nov 21 18:34:33 2000 @@ -385,7 +385,7 @@ (calc-minibuffer-contains "\\`\\([^\"]*\"[^\"]*\"\\)*[^\"]*\"[^\"]*\\'")) (insert "`") - (setq alg-exp (buffer-string)) + (setq alg-exp (field-string)) (and (> (length alg-exp) 0) (setq calc-previous-alg-entry alg-exp)) (exit-minibuffer)) ) @@ -393,14 +393,14 @@ (defun calcAlg-enter () (interactive) - (let* ((str (buffer-string)) + (let* ((str (field-string)) (exp (and (> (length str) 0) (save-excursion (set-buffer calc-buffer) (math-read-exprs str))))) (if (eq (car-safe exp) 'error) (progn - (goto-char (point-min)) + (goto-char (field-beginning)) (forward-char (nth 1 exp)) (beep) (calc-temp-minibuffer-message @@ -455,14 +455,14 @@ (interactive) (if (calc-minibuffer-contains ".*[@oh] *[^'m ]+[^'m]*\\'") (calcDigit-key) - (setq calc-digit-value (buffer-string)) + (setq calc-digit-value (field-string)) (exit-minibuffer)) ) (defun calcDigit-edit () (interactive) (calc-unread-command) - (setq calc-digit-value (buffer-string)) + (setq calc-digit-value (field-string)) (exit-minibuffer) ) Index: calc.el --- calc.el.~1~ Sun Dec 15 23:50:47 1996 +++ calc.el Wed Nov 22 13:08:49 2000 @@ -2051,11 +2051,11 @@ ;; Exercise for the reader: Figure out why this is a good precaution! (or (boundp 'calc-buffer) (use-local-map minibuffer-local-map)) - (let ((str (buffer-string))) + (let ((str (field-string))) (setq calc-digit-value (save-excursion (set-buffer calc-buffer) (math-read-number str)))) - (if (and (null calc-digit-value) (> (buffer-size) 0)) + (if (and (null calc-digit-value) (> (field-end) (field-beginning))) (progn (beep) (calc-temp-minibuffer-message " [Bad format]")) @@ -2071,7 +2071,7 @@ (defun calc-minibuffer-contains (rex) (save-excursion - (goto-char (point-min)) + (goto-char (field-end (point-min))) (looking-at rex)) ) @@ -2158,10 +2158,8 @@ (upcase last-command-char)))) (and dig (< dig radix))))))) - (save-excursion - (goto-char (point-min)) - (looking-at - "[-+]?\\(.*\\+/- *\\|.*mod *\\)?\\([0-9]+\\.?0*[@oh] *\\)?\\([0-9]+\\.?0*['m] *\\)?[0-9]*\\(\\.?[0-9]*\\(e[-+]?[0-3]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?\\)?\\|[0-9]:\\([0-9]+:\\)?[0-9]*\\)?[\"s]?\\'"))) + (calc-minibuffer-contains + "[-+]?\\(.*\\+/- *\\|.*mod *\\)?\\([0-9]+\\.?0*[@oh] *\\)?\\([0-9]+\\.?0*['m] *\\)?[0-9]*\\(\\.?[0-9]*\\(e[-+]?[0-3]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[0-9]?\\)?\\|[0-9]:\\([0-9]+:\\)?[0-9]*\\)?[\"s]?\\'")) (if (and (memq last-command-char '(?@ ?o ?h ?\' ?m)) (string-match " " calc-hms-format)) (insert " ")) @@ -2190,7 +2188,7 @@ ((eq last-command 'calcDigit-start) (erase-buffer)) (t (backward-delete-char 1))) - (if (= (buffer-size) 0) + (if (= (field-beginning) (field-end)) (progn (setq last-command-char 13) (calcDigit-nondigit))) * TeX'ing the Calc manual fails. The following patches allow to build the Calc manual using texinfo.tex from Emacs 19.34 distribution: *** calc-maint.e~0 Mon Dec 16 07:11:26 1996 --- calc-maint.el Sun Dec 10 14:32:38 2000 *************** *** 308,314 **** (insert "@tex\n" "\\global\\advance\\appendixno2\n" "\\gdef\\xref#1.{See ``#1.''}\n") ! (setq midpos (point)) (insert "@end tex\n") (insert-buffer-substring srcbuf sumpos endpos) (insert "@bye\n") --- 308,314 ---- (insert "@tex\n" "\\global\\advance\\appendixno2\n" "\\gdef\\xref#1.{See ``#1.''}\n") ! (setq midpos (point-marker)) (insert "@end tex\n") (insert-buffer-substring srcbuf sumpos endpos) (insert "@bye\n") *** Makefile.~0 Mon Dec 16 07:11:24 1996 --- Makefile Sun Dec 10 14:44:00 2000 *************** *** 98,106 **** # Format the Calc manual as one printable volume using TeX. tex: $(REMOVE) calc.aux ! $(TEX) calc.texinfo $(TEXINDEX) calc.[cfkptv]? ! $(TEX) calc.texinfo $(PURGE) calc.cp calc.fn calc.pg calc.tp calc.vr $(PURGE) calc.cps calc.fns calc.kys calc.pgs calc.tps calc.vrs $(PURGE) calc.toc --- 98,106 ---- # Format the Calc manual as one printable volume using TeX. tex: $(REMOVE) calc.aux ! -$(TEX) calc.texinfo $(TEXINDEX) calc.[cfkptv]? ! -$(TEX) calc.texinfo $(PURGE) calc.cp calc.fn calc.pg calc.tp calc.vr $(PURGE) calc.cps calc.fns calc.kys calc.pgs calc.tps calc.vrs $(PURGE) calc.toc *** calc.texinfo.~1~ Thu Oct 10 18:18:56 1996 --- calc.texinfo Mon Dec 11 08:25:00 2000 *************** *** 12,17 **** --- 12,19 ---- % Because makeinfo.c exists, we can't just define new commands. % So instead, we take over little-used existing commands. % + % Suggested by Karl Berry + \gdef\!{\mskip-\thinmuskip} % Redefine @cite{text} to act like $text$ in regular TeX. % Info will typeset this same as @samp{text}. \gdef\goodtex{\tex \let\rm\goodrm \let\t\ttfont \turnoffactive} *************** *** 23686,23692 **** a vector of the actual parameter values, written as equations: @cite{[a = 3, b = 2]}, in case you'd rather read them in a list than pick them out of the formula. (You can type @kbd{t y} ! to move this vector to the stack; @pxref{Trail Commands}.) Specifying a different independent variable name will affect the resulting formula: @kbd{a F 1 k RET} produces @kbd{3 + 2 k}. --- 23689,23695 ---- a vector of the actual parameter values, written as equations: @cite{[a = 3, b = 2]}, in case you'd rather read them in a list than pick them out of the formula. (You can type @kbd{t y} ! to move this vector to the stack; see @ref{Trail Commands}.) Specifying a different independent variable name will affect the resulting formula: @kbd{a F 1 k RET} produces @kbd{3 + 2 k}.