Mercurial > emacs
comparison lisp/calc/calc-aent.el @ 90573:858cb33ae39d
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 357-381)
- Merge from gnus--rel--5.10
- Update from CVS
- Merge from erc--emacs--21
* gnus--rel--5.10 (patch 116-122)
- Update from CVS
- Merge from emacs--devo--0
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-98
author | Miles Bader <miles@gnu.org> |
---|---|
date | Thu, 03 Aug 2006 11:45:23 +0000 |
parents | c5406394f567 52f1e8d569ad |
children | 6588c6259dfb |
comparison
equal
deleted
inserted
replaced
90572:ab9b8d043c39 | 90573:858cb33ae39d |
---|---|
30 ;; This file is autoloaded from calc.el. | 30 ;; This file is autoloaded from calc.el. |
31 | 31 |
32 (require 'calc) | 32 (require 'calc) |
33 (require 'calc-macs) | 33 (require 'calc-macs) |
34 | 34 |
35 (defvar calc-quick-calc-history nil | |
36 "The history list for quick-calc.") | |
37 | |
35 (defun calc-do-quick-calc () | 38 (defun calc-do-quick-calc () |
39 (require 'calc-ext) | |
36 (calc-check-defines) | 40 (calc-check-defines) |
37 (if (eq major-mode 'calc-mode) | 41 (if (eq major-mode 'calc-mode) |
38 (calc-algebraic-entry t) | 42 (calc-algebraic-entry t) |
39 (let (buf shortbuf) | 43 (let (buf shortbuf) |
40 (save-excursion | 44 (save-excursion |
43 (calc-dollar-values calc-quick-prev-results) | 47 (calc-dollar-values calc-quick-prev-results) |
44 (calc-dollar-used 0) | 48 (calc-dollar-used 0) |
45 (enable-recursive-minibuffers t) | 49 (enable-recursive-minibuffers t) |
46 (calc-language (if (memq calc-language '(nil big)) | 50 (calc-language (if (memq calc-language '(nil big)) |
47 'flat calc-language)) | 51 'flat calc-language)) |
48 (entry (calc-do-alg-entry "" "Quick calc: " t)) | 52 (entry (calc-do-alg-entry "" "Quick calc: " t 'calc-quick-calc-history)) |
49 (alg-exp (mapcar (function | 53 (alg-exp (mapcar 'math-evaluate-expr entry))) |
50 (lambda (x) | |
51 (if (and (not (featurep 'calc-ext)) | |
52 calc-previous-alg-entry | |
53 (string-match | |
54 "\\`[-0-9._+*/^() ]+\\'" | |
55 calc-previous-alg-entry)) | |
56 (calc-normalize x) | |
57 (require 'calc-ext) | |
58 (math-evaluate-expr x)))) | |
59 entry))) | |
60 (when (and (= (length alg-exp) 1) | 54 (when (and (= (length alg-exp) 1) |
61 (eq (car-safe (car alg-exp)) 'calcFunc-assign) | 55 (eq (car-safe (car alg-exp)) 'calcFunc-assign) |
62 (= (length (car alg-exp)) 3) | 56 (= (length (car alg-exp)) 3) |
63 (eq (car-safe (nth 1 (car alg-exp))) 'var)) | 57 (eq (car-safe (nth 1 (car alg-exp))) 'var)) |
64 (require 'calc-ext) | |
65 (set (nth 2 (nth 1 (car alg-exp))) (nth 2 (car alg-exp))) | 58 (set (nth 2 (nth 1 (car alg-exp))) (nth 2 (car alg-exp))) |
66 (calc-refresh-evaltos (nth 2 (nth 1 (car alg-exp)))) | 59 (calc-refresh-evaltos (nth 2 (nth 1 (car alg-exp)))) |
67 (setq alg-exp (list (nth 2 (car alg-exp))))) | 60 (setq alg-exp (list (nth 2 (car alg-exp))))) |
68 (setq calc-quick-prev-results alg-exp | 61 (setq calc-quick-prev-results alg-exp |
69 buf (mapconcat (function (lambda (x) | 62 buf (mapconcat (function (lambda (x) |
262 (calc-wrapper | 255 (calc-wrapper |
263 (let ((calc-language (if prefix nil calc-language)) | 256 (let ((calc-language (if prefix nil calc-language)) |
264 (math-expr-opers (if prefix math-standard-opers math-expr-opers))) | 257 (math-expr-opers (if prefix math-standard-opers math-expr-opers))) |
265 (calc-alg-entry (and auto (char-to-string last-command-char)))))) | 258 (calc-alg-entry (and auto (char-to-string last-command-char)))))) |
266 | 259 |
260 (defvar calc-alg-entry-history nil | |
261 "History for algebraic entry.") | |
262 | |
267 (defun calc-alg-entry (&optional initial prompt) | 263 (defun calc-alg-entry (&optional initial prompt) |
268 (let* ((sel-mode nil) | 264 (let* ((sel-mode nil) |
269 (calc-dollar-values (mapcar 'calc-get-stack-element | 265 (calc-dollar-values (mapcar 'calc-get-stack-element |
270 (nthcdr calc-stack-top calc-stack))) | 266 (nthcdr calc-stack-top calc-stack))) |
271 (calc-dollar-used 0) | 267 (calc-dollar-used 0) |
272 (calc-plain-entry t) | 268 (calc-plain-entry t) |
273 (alg-exp (calc-do-alg-entry initial prompt t))) | 269 (alg-exp (calc-do-alg-entry initial prompt t 'calc-alg-entry-history))) |
274 (if (stringp alg-exp) | 270 (if (stringp alg-exp) |
275 (progn | 271 (progn |
276 (require 'calc-ext) | 272 (require 'calc-ext) |
277 (calc-alg-edit alg-exp)) | 273 (calc-alg-edit alg-exp)) |
278 (let* ((calc-simplify-mode (if (eq last-command-char ?\C-j) | 274 (let* ((calc-simplify-mode (if (eq last-command-char ?\C-j) |
299 (defvar calc-alg-ent-esc-map nil | 295 (defvar calc-alg-ent-esc-map nil |
300 "The keymap used for escapes in algebraic entry.") | 296 "The keymap used for escapes in algebraic entry.") |
301 | 297 |
302 (defvar calc-alg-exp) | 298 (defvar calc-alg-exp) |
303 | 299 |
304 (defun calc-do-alg-entry (&optional initial prompt no-normalize) | 300 (defun calc-do-alg-entry (&optional initial prompt no-normalize history) |
305 (let* ((calc-buffer (current-buffer)) | 301 (let* ((calc-buffer (current-buffer)) |
306 (blink-paren-function 'calcAlg-blink-matching-open) | 302 (blink-paren-function 'calcAlg-blink-matching-open) |
307 (calc-alg-exp 'error)) | 303 (calc-alg-exp 'error)) |
308 (unless calc-alg-ent-map | 304 (unless calc-alg-ent-map |
309 (setq calc-alg-ent-map (copy-keymap minibuffer-local-map)) | 305 (setq calc-alg-ent-map (copy-keymap minibuffer-local-map)) |
317 (aset (nth 1 calc-alg-ent-esc-map) i 'calcAlg-escape) | 313 (aset (nth 1 calc-alg-ent-esc-map) i 'calcAlg-escape) |
318 (setq i (1+ i))))) | 314 (setq i (1+ i))))) |
319 (define-key calc-alg-ent-map "\e" nil) | 315 (define-key calc-alg-ent-map "\e" nil) |
320 (if (eq calc-algebraic-mode 'total) | 316 (if (eq calc-algebraic-mode 'total) |
321 (define-key calc-alg-ent-map "\e" calc-alg-ent-esc-map) | 317 (define-key calc-alg-ent-map "\e" calc-alg-ent-esc-map) |
322 (define-key calc-alg-ent-map "\ep" 'calcAlg-plus-minus) | 318 (define-key calc-alg-ent-map "\e+" 'calcAlg-plus-minus) |
323 (define-key calc-alg-ent-map "\em" 'calcAlg-mod) | 319 (define-key calc-alg-ent-map "\em" 'calcAlg-mod) |
324 (define-key calc-alg-ent-map "\e=" 'calcAlg-equals) | 320 (define-key calc-alg-ent-map "\e=" 'calcAlg-equals) |
325 (define-key calc-alg-ent-map "\e\r" 'calcAlg-equals) | 321 (define-key calc-alg-ent-map "\e\r" 'calcAlg-equals) |
322 (define-key calc-alg-ent-map "\ep" 'previous-history-element) | |
323 (define-key calc-alg-ent-map "\en" 'next-history-element) | |
326 (define-key calc-alg-ent-map "\e%" 'self-insert-command)) | 324 (define-key calc-alg-ent-map "\e%" 'self-insert-command)) |
327 (setq calc-aborted-prefix nil) | 325 (setq calc-aborted-prefix nil) |
328 (let ((buf (read-from-minibuffer (or prompt "Algebraic: ") | 326 (let ((buf (read-from-minibuffer (or prompt "Algebraic: ") |
329 (or initial "") | 327 (or initial "") |
330 calc-alg-ent-map nil))) | 328 calc-alg-ent-map nil history))) |
331 (when (eq calc-alg-exp 'error) | 329 (when (eq calc-alg-exp 'error) |
332 (when (eq (car-safe (setq calc-alg-exp (math-read-exprs buf))) 'error) | 330 (when (eq (car-safe (setq calc-alg-exp (math-read-exprs buf))) 'error) |
333 (setq calc-alg-exp nil))) | 331 (setq calc-alg-exp nil))) |
334 (setq calc-aborted-prefix "alg'") | 332 (setq calc-aborted-prefix "alg'") |
335 (or no-normalize | 333 (or no-normalize |
353 (insert "mod "))) | 351 (insert "mod "))) |
354 | 352 |
355 (defun calcAlg-previous () | 353 (defun calcAlg-previous () |
356 (interactive) | 354 (interactive) |
357 (if (calc-minibuffer-contains "\\'") | 355 (if (calc-minibuffer-contains "\\'") |
358 (if calc-previous-alg-entry | 356 (previous-history-element 1) |
359 (insert calc-previous-alg-entry) | |
360 (beep)) | |
361 (insert "'"))) | 357 (insert "'"))) |
362 | 358 |
363 (defun calcAlg-equals () | 359 (defun calcAlg-equals () |
364 (interactive) | 360 (interactive) |
365 (unwind-protect | 361 (unwind-protect |
382 (if (or (not calc-plain-entry) | 378 (if (or (not calc-plain-entry) |
383 (calc-minibuffer-contains | 379 (calc-minibuffer-contains |
384 "\\`\\([^\"]*\"[^\"]*\"\\)*[^\"]*\"[^\"]*\\'")) | 380 "\\`\\([^\"]*\"[^\"]*\"\\)*[^\"]*\"[^\"]*\\'")) |
385 (insert "`") | 381 (insert "`") |
386 (setq calc-alg-exp (minibuffer-contents)) | 382 (setq calc-alg-exp (minibuffer-contents)) |
387 (and (> (length calc-alg-exp) 0) (setq calc-previous-alg-entry calc-alg-exp)) | |
388 (exit-minibuffer))) | 383 (exit-minibuffer))) |
389 | 384 |
390 (defvar calc-buffer) | 385 (defvar calc-buffer) |
391 | 386 |
392 (defun calcAlg-enter () | 387 (defun calcAlg-enter () |
405 (concat " [" (or (nth 2 exp) "Error") "]")) | 400 (concat " [" (or (nth 2 exp) "Error") "]")) |
406 (calc-clear-unread-commands)) | 401 (calc-clear-unread-commands)) |
407 (setq calc-alg-exp (if (calc-minibuffer-contains "\\` *\\[ *\\'") | 402 (setq calc-alg-exp (if (calc-minibuffer-contains "\\` *\\[ *\\'") |
408 '((incomplete vec)) | 403 '((incomplete vec)) |
409 exp)) | 404 exp)) |
410 (and (> (length str) 0) (setq calc-previous-alg-entry str)) | |
411 (exit-minibuffer)))) | 405 (exit-minibuffer)))) |
412 | 406 |
413 (defun calcAlg-blink-matching-open () | 407 (defun calcAlg-blink-matching-open () |
414 (let ((rightpt (point)) | 408 (let ((rightpt (point)) |
415 (leftpt nil) | 409 (leftpt nil) |