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)