Mercurial > emacs
comparison lisp/calc/calc-store.el @ 88155:d7ddb3e565de
sync with trunk
author | Henrik Enberg <henrik.enberg@telia.com> |
---|---|
date | Mon, 16 Jan 2006 00:03:54 +0000 |
parents | 0d8b17d428b5 |
children |
comparison
equal
deleted
inserted
replaced
88154:8ce476d3ba36 | 88155:d7ddb3e565de |
---|---|
1 ;;; calc-store.el --- value storage functions for Calc | 1 ;;; calc-store.el --- value storage functions for Calc |
2 | 2 |
3 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004, |
4 ;; 2005 Free Software Foundation, Inc. | |
4 | 5 |
5 ;; Author: David Gillespie <daveg@synaptics.com> | 6 ;; Author: David Gillespie <daveg@synaptics.com> |
6 ;; Maintainers: D. Goel <deego@gnufans.org> | 7 ;; Maintainer: Jay Belanger <belanger@truman.edu> |
7 ;; Colin Walters <walters@debian.org> | |
8 | 8 |
9 ;; This file is part of GNU Emacs. | 9 ;; This file is part of GNU Emacs. |
10 | 10 |
11 ;; GNU Emacs is distributed in the hope that it will be useful, | 11 ;; GNU Emacs is distributed in the hope that it will be useful, |
12 ;; but WITHOUT ANY WARRANTY. No author or distributor | 12 ;; but WITHOUT ANY WARRANTY. No author or distributor |
26 ;;; Commentary: | 26 ;;; Commentary: |
27 | 27 |
28 ;;; Code: | 28 ;;; Code: |
29 | 29 |
30 ;; This file is autoloaded from calc-ext.el. | 30 ;; This file is autoloaded from calc-ext.el. |
31 | |
31 (require 'calc-ext) | 32 (require 'calc-ext) |
32 | |
33 (require 'calc-macs) | 33 (require 'calc-macs) |
34 | |
35 (defun calc-Need-calc-store () nil) | |
36 | |
37 | 34 |
38 ;;; Memory commands. | 35 ;;; Memory commands. |
39 | 36 |
40 (defvar calc-store-keep nil) | 37 (defvar calc-store-keep nil) |
41 (defun calc-store (&optional var) | 38 (defun calc-store (&optional var) |
42 (interactive) | 39 (interactive) |
43 (let ((calc-store-keep t)) | 40 (let ((calc-store-keep t)) |
44 (calc-store-into var))) | 41 (calc-store-into var))) |
45 | 42 |
46 (defvar calc-given-value-flag nil) | 43 (defvar calc-given-value-flag nil) |
44 (defvar calc-given-value) | |
45 | |
47 (defun calc-store-into (&optional var) | 46 (defun calc-store-into (&optional var) |
48 (interactive) | 47 (interactive) |
49 (calc-wrapper | 48 (calc-wrapper |
50 (let ((calc-given-value nil) | 49 (let ((calc-given-value nil) |
51 (calc-given-value-flag 1)) | 50 (calc-given-value-flag 1)) |
57 ( / . calc-store-div ) | 56 ( / . calc-store-div ) |
58 ( ^ . calc-store-power ) | 57 ( ^ . calc-store-power ) |
59 ( | . calc-store-concat ) )))) | 58 ( | . calc-store-concat ) )))) |
60 (if found | 59 (if found |
61 (funcall (cdr found)) | 60 (funcall (cdr found)) |
62 (calc-store-value var (or calc-given-value (calc-top 1)) | 61 (let ((msg |
63 "" calc-given-value-flag) | 62 (calc-store-value var (or calc-given-value (calc-top 1)) |
64 (message "Stored to variable \"%s\"" (calc-var-name var)))) | 63 "" calc-given-value-flag))) |
64 (message (concat "Stored to variable \"%s\"" msg) | |
65 (calc-var-name var))))) | |
65 (setq var (calc-is-assignments (calc-top 1))) | 66 (setq var (calc-is-assignments (calc-top 1))) |
66 (if var | 67 (if var |
67 (while var | 68 (while var |
68 (calc-store-value (car (car var)) (cdr (car var)) | 69 (let ((msg |
69 (if (not (cdr var)) "") | 70 (calc-store-value (car (car var)) (cdr (car var)) |
70 (if (not (cdr var)) 1)) | 71 (if (not (cdr var)) "") |
72 (if (not (cdr var)) 1)))) | |
73 (message (concat "Stored to variable \"%s\"" msg) | |
74 (calc-var-name (car (car var))))) | |
71 (setq var (cdr var)))))))) | 75 (setq var (cdr var)))))))) |
72 | 76 |
73 (defun calc-store-plus (&optional var) | 77 (defun calc-store-plus (&optional var) |
74 (interactive) | 78 (interactive) |
75 (calc-store-binary var "+" '+)) | 79 (calc-store-binary var "+" '+)) |
109 (defun calc-store-decr (n &optional var) | 113 (defun calc-store-decr (n &optional var) |
110 (interactive "p") | 114 (interactive "p") |
111 (calc-store-binary var "n" '- n)) | 115 (calc-store-binary var "n" '- n)) |
112 | 116 |
113 (defun calc-store-value (var value tag &optional pop) | 117 (defun calc-store-value (var value tag &optional pop) |
114 (if var | 118 (let ((msg "")) |
115 (let ((old (calc-var-value var))) | 119 (if var |
116 (set var value) | 120 (let ((old (calc-var-value var))) |
117 (if pop (or calc-store-keep (calc-pop-stack pop))) | 121 (set var value) |
118 (calc-record-undo (list 'store (symbol-name var) old)) | 122 (if pop (or calc-store-keep (calc-pop-stack pop))) |
119 (if tag | 123 (calc-record-undo (list 'store (symbol-name var) old)) |
120 (let ((calc-full-trail-vectors nil)) | 124 (if tag |
121 (calc-record value (format ">%s%s" tag (calc-var-name var))))) | 125 (let ((calc-full-trail-vectors nil)) |
122 (and (memq var '(var-e var-i var-pi var-phi var-gamma)) | 126 (calc-record value (format ">%s%s" tag (calc-var-name var))))) |
123 (eq (car-safe old) 'special-const) | 127 (cond |
124 (message "(Note: Built-in definition of %s has been lost)" var)) | 128 ((and (memq var '(var-e var-i var-pi var-phi var-gamma)) |
125 (and (memq var '(var-inf var-uinf var-nan)) | 129 (eq (car-safe old) 'special-const)) |
126 (null old) | 130 (setq msg (format " (Note: Built-in definition of %s has been lost)" |
127 (message "(Note: %s has built-in meanings which may interfere)" | 131 (calc-var-name var)))) |
128 var)) | 132 ((and (memq var '(var-inf var-uinf var-nan)) |
129 (calc-refresh-evaltos var)))) | 133 (null old)) |
134 (setq msg (format " (Note: %s has built-in meanings which may interfere)" | |
135 (calc-var-name var))))) | |
136 (calc-refresh-evaltos var))) | |
137 msg)) | |
130 | 138 |
131 (defun calc-var-name (var) | 139 (defun calc-var-name (var) |
132 (if (symbolp var) (setq var (symbol-name var))) | 140 (if (symbolp var) (setq var (symbol-name var))) |
133 (if (string-match "\\`var-." var) | 141 (if (string-match "\\`var-." var) |
134 (substring var 4) | 142 (substring var 4) |
140 'num calc-simplify-mode)) | 148 'num calc-simplify-mode)) |
141 (value (or val (calc-top 1)))) | 149 (value (or val (calc-top 1)))) |
142 (or var (setq var (calc-read-var-name (format "Store %s: " tag)))) | 150 (or var (setq var (calc-read-var-name (format "Store %s: " tag)))) |
143 (if var | 151 (if var |
144 (let ((old (calc-var-value var))) | 152 (let ((old (calc-var-value var))) |
145 (or old | 153 (if (eq (car-safe old) 'special-const) |
146 (error "No such variable: \"%s\"" (calc-var-name var))) | 154 (error "\"%s\" is a special constant" (calc-var-name var))) |
155 (if (not old) | |
156 (if (memq var '(var-inf var-uinf var-nan)) | |
157 (error "\"%s\" is a special variable" (calc-var-name var)) | |
158 (error "No such variable: \"%s\"" (calc-var-name var)))) | |
147 (if (stringp old) | 159 (if (stringp old) |
148 (setq old (math-read-expr old))) | 160 (setq old (math-read-expr old))) |
149 (if (eq (car-safe old) 'error) | 161 (if (eq (car-safe old) 'error) |
150 (error "Bad format in variable contents: %s" (nth 2 old))) | 162 (error "Bad format in variable contents: %s" (nth 2 old))) |
151 (calc-store-value var | 163 (calc-store-value var |
152 (calc-normalize (if (calc-is-inverse) | 164 (calc-normalize (if (calc-is-inverse) |
153 (list func value old) | 165 (list func value old) |
154 (list func old value))) | 166 (list func old value))) |
155 tag (and (not val) 1)) | 167 tag (and (not val) 1)) |
156 (message "Stored to variable \"%s\"" (calc-var-name var))))))) | 168 (message "Variable \"%s\" changed" (calc-var-name var))))))) |
157 | |
158 (defun calc-read-var-name (prompt &optional calc-store-opers) | |
159 (setq calc-given-value nil | |
160 calc-aborted-prefix nil) | |
161 (let ((var (let ((minibuffer-completion-table obarray) | |
162 (minibuffer-completion-predicate 'boundp) | |
163 (minibuffer-completion-confirm t)) | |
164 (read-from-minibuffer prompt "var-" calc-var-name-map nil)))) | |
165 (setq calc-aborted-prefix "") | |
166 (and (not (equal var "")) | |
167 (not (equal var "var-")) | |
168 (if (string-match "\\`\\([-a-zA-Z0-9]+\\) *:?=" var) | |
169 (if (null calc-given-value-flag) | |
170 (error "Assignment is not allowed in this command") | |
171 (let ((svar (intern (substring var 0 (match-end 1))))) | |
172 (setq calc-given-value-flag 0 | |
173 calc-given-value (math-read-expr | |
174 (substring var (match-end 0)))) | |
175 (if (eq (car-safe calc-given-value) 'error) | |
176 (error "Bad format: %s" (nth 2 calc-given-value))) | |
177 (setq calc-given-value (math-evaluate-expr calc-given-value)) | |
178 svar)) | |
179 (intern var))))) | |
180 | 169 |
181 (defvar calc-var-name-map nil "Keymap for reading Calc variable names.") | 170 (defvar calc-var-name-map nil "Keymap for reading Calc variable names.") |
182 (if calc-var-name-map | 171 (if calc-var-name-map |
183 () | 172 () |
184 (setq calc-var-name-map (copy-keymap minibuffer-local-completion-map)) | 173 (setq calc-var-name-map (copy-keymap minibuffer-local-completion-map)) |
192 (lambda (x) | 181 (lambda (x) |
193 (define-key calc-var-name-map (char-to-string x) | 182 (define-key calc-var-name-map (char-to-string x) |
194 'calcVar-oper))) | 183 'calcVar-oper))) |
195 "+-*/^|")) | 184 "+-*/^|")) |
196 | 185 |
186 (defvar calc-store-opers) | |
187 | |
188 (defun calc-read-var-name (prompt &optional calc-store-opers) | |
189 (setq calc-given-value nil | |
190 calc-aborted-prefix nil) | |
191 (let ((var (concat | |
192 "var-" | |
193 (let ((minibuffer-completion-table | |
194 (mapcar (lambda (x) (substring x 4)) | |
195 (all-completions "var-" obarray))) | |
196 (minibuffer-completion-predicate | |
197 (lambda (x) (boundp (intern (concat "var-" x))))) | |
198 (minibuffer-completion-confirm t)) | |
199 (read-from-minibuffer prompt nil calc-var-name-map nil))))) | |
200 (setq calc-aborted-prefix "") | |
201 (and (not (equal var "var-")) | |
202 (if (string-match "\\`\\([-a-zA-Z0-9]+\\) *:?=" var) | |
203 (if (null calc-given-value-flag) | |
204 (error "Assignment is not allowed in this command") | |
205 (let ((svar (intern (substring var 0 (match-end 1))))) | |
206 (setq calc-given-value-flag 0 | |
207 calc-given-value (math-read-expr | |
208 (substring var (match-end 0)))) | |
209 (if (eq (car-safe calc-given-value) 'error) | |
210 (error "Bad format: %s" (nth 2 calc-given-value))) | |
211 (setq calc-given-value (math-evaluate-expr calc-given-value)) | |
212 svar)) | |
213 (intern var))))) | |
214 | |
197 (defun calcVar-digit () | 215 (defun calcVar-digit () |
198 (interactive) | 216 (interactive) |
199 (if (calc-minibuffer-contains "var-\\'") | 217 (if (calc-minibuffer-contains "\\'") |
200 (if (eq calc-store-opers 0) | 218 (if (eq calc-store-opers 0) |
201 (beep) | 219 (beep) |
202 (insert "q") | 220 (insert "q") |
203 (self-insert-and-exit)) | 221 (self-insert-and-exit)) |
204 (self-insert-command 1))) | 222 (self-insert-command 1))) |
205 | 223 |
206 (defun calcVar-oper () | 224 (defun calcVar-oper () |
207 (interactive) | 225 (interactive) |
208 (if (and (eq calc-store-opers t) | 226 (if (and (eq calc-store-opers t) |
209 (calc-minibuffer-contains "var-\\'")) | 227 (calc-minibuffer-contains "\\'")) |
210 (progn | 228 (progn |
211 (erase-buffer) | 229 (erase-buffer) |
212 (self-insert-and-exit)) | 230 (self-insert-and-exit)) |
213 (self-insert-command 1))) | 231 (self-insert-command 1))) |
214 | 232 |
222 (oper (or oper (calc-get-operator "Store Mapping"))) | 240 (oper (or oper (calc-get-operator "Store Mapping"))) |
223 (nargs (car oper))) | 241 (nargs (car oper))) |
224 (or var (setq var (calc-read-var-name (format "Store Mapping %s: " | 242 (or var (setq var (calc-read-var-name (format "Store Mapping %s: " |
225 (nth 2 oper))))) | 243 (nth 2 oper))))) |
226 (if var | 244 (if var |
227 (let ((old (or (calc-var-value var) | 245 (let ((old (calc-var-value var))) |
228 (error "No such variable: \"%s\"" | 246 (if (eq (car-safe old) 'special-const) |
229 (calc-var-name var)))) | 247 (error "\"%s\" is a special constant" (calc-var-name var))) |
230 (calc-simplify-mode (if (eq calc-simplify-mode 'none) | 248 (if (not old) |
231 'num calc-simplify-mode)) | 249 (if (memq var '(var-inf var-uinf var-nan)) |
232 (values (and (> nargs 1) | 250 (error "\"%s\" is a special variable" (calc-var-name var)) |
233 (calc-top-list (1- nargs) (1+ calc-dollar-used))))) | 251 (error "No such variable: \"%s\"" (calc-var-name var)))) |
234 (message "Working...") | 252 (let ((calc-simplify-mode (if (eq calc-simplify-mode 'none) |
235 (calc-set-command-flag 'clear-message) | 253 'num calc-simplify-mode)) |
236 (if (stringp old) | 254 (values (and (> nargs 1) |
237 (setq old (math-read-expr old))) | 255 (calc-top-list (1- nargs) (1+ calc-dollar-used))))) |
238 (if (eq (car-safe old) 'error) | 256 (message "Working...") |
239 (error "Bad format in variable contents: %s" (nth 2 old))) | 257 (calc-set-command-flag 'clear-message) |
240 (setq values (if (calc-is-inverse) | 258 (if (stringp old) |
241 (append values (list old)) | 259 (setq old (math-read-expr old))) |
242 (append (list old) values))) | 260 (if (eq (car-safe old) 'error) |
243 (calc-store-value var | 261 (error "Bad format in variable contents: %s" (nth 2 old))) |
244 (calc-normalize (cons (nth 1 oper) values)) | 262 (setq values (if (calc-is-inverse) |
245 (nth 2 oper) | 263 (append values (list old)) |
246 (+ calc-dollar-used (1- nargs)))))))) | 264 (append (list old) values))) |
265 (calc-store-value var | |
266 (calc-normalize (cons (nth 1 oper) values)) | |
267 (nth 2 oper) | |
268 (+ calc-dollar-used (1- nargs))) | |
269 (message "Variable \"%s\" changed" (calc-var-name var)))))))) | |
270 | |
247 | 271 |
248 (defun calc-store-exchange (&optional var) | 272 (defun calc-store-exchange (&optional var) |
249 (interactive) | 273 (interactive) |
250 (calc-wrapper | 274 (calc-wrapper |
251 (let ((calc-given-value nil) | 275 (let ((calc-given-value nil) |
252 (calc-given-value-flag 1) | 276 (calc-given-value-flag 1) |
253 top) | 277 top) |
254 (or var (setq var (calc-read-var-name "Exchange with: "))) | 278 (or var (setq var (calc-read-var-name "Exchange with: "))) |
255 (if var | 279 (if var |
256 (let ((value (calc-var-value var))) | 280 (let ((value (calc-var-value var))) |
257 (or value | |
258 (error "No such variable: \"%s\"" (calc-var-name var))) | |
259 (if (eq (car-safe value) 'special-const) | 281 (if (eq (car-safe value) 'special-const) |
260 (error "%s is a special constant" var)) | 282 (error "\"%s\" is a special constant" (calc-var-name var))) |
283 (if (not value) | |
284 (if (memq var '(var-inf var-uinf var-nan)) | |
285 (error "\"%s\" is a special variable" (calc-var-name var)) | |
286 (error "No such variable: \"%s\"" (calc-var-name var)))) | |
261 (setq top (or calc-given-value (calc-top 1))) | 287 (setq top (or calc-given-value (calc-top 1))) |
262 (calc-store-value var top nil) | 288 (calc-store-value var top nil) |
263 (calc-pop-push-record calc-given-value-flag | 289 (calc-pop-push-record calc-given-value-flag |
264 (concat "<>" (calc-var-name var)) value)))))) | 290 (concat "<>" (calc-var-name var)) value)))))) |
265 | 291 |
360 | 386 |
361 (defun calc-recall-quick () | 387 (defun calc-recall-quick () |
362 (interactive) | 388 (interactive) |
363 (calc-recall (intern (format "var-q%c" last-command-char)))) | 389 (calc-recall (intern (format "var-q%c" last-command-char)))) |
364 | 390 |
391 (defun calc-copy-special-constant (&optional sconst var) | |
392 (interactive) | |
393 (let ((sc '(("") | |
394 ("e" . (special-const (math-e))) | |
395 ("pi" . (special-const (math-pi))) | |
396 ("i" . (special-const (math-imaginary 1))) | |
397 ("phi" . (special-const (math-phi))) | |
398 ("gamma" . (special-const (math-gamma-const)))))) | |
399 (calc-wrapper | |
400 (or sconst (setq sconst (completing-read "Special constant: " sc nil t))) | |
401 (unless (string= sconst "") | |
402 (let ((value (cdr (assoc sconst sc)))) | |
403 (or var (setq var (calc-read-var-name | |
404 (format "Copy special constant %s, to: " | |
405 sconst)))) | |
406 (if var | |
407 (let ((msg (calc-store-value var value ""))) | |
408 (message (concat "Special constant \"%s\" copied to \"%s\"" msg) | |
409 sconst (calc-var-name var))))))))) | |
410 | |
365 (defun calc-copy-variable (&optional var1 var2) | 411 (defun calc-copy-variable (&optional var1 var2) |
366 (interactive) | 412 (interactive) |
367 (calc-wrapper | 413 (calc-wrapper |
368 (or var1 (setq var1 (calc-read-var-name "Copy variable: "))) | 414 (or var1 (setq var1 (calc-read-var-name "Copy variable: "))) |
369 (if var1 | 415 (if var1 |
370 (let ((value (calc-var-value var1))) | 416 (let ((value (calc-var-value var1))) |
371 (or value | 417 (or value |
372 (error "No such variable: \"%s\"" (calc-var-name var))) | 418 (error "No such variable: \"%s\"" (calc-var-name var1))) |
373 (or var2 (setq var2 (calc-read-var-name | 419 (or var2 (setq var2 (calc-read-var-name |
374 (format "Copy variable: %s, to: " var1)))) | 420 (format "Copy variable: %s, to: " |
421 (calc-var-name var1))))) | |
375 (if var2 | 422 (if var2 |
376 (calc-store-value var2 value "")))))) | 423 (let ((msg (calc-store-value var2 value ""))) |
424 (message (concat "Variable \"%s\" copied to \"%s\"" msg) | |
425 (calc-var-name var1) (calc-var-name var2)))))))) | |
377 | 426 |
378 (defvar calc-last-edited-variable nil) | 427 (defvar calc-last-edited-variable nil) |
379 (defun calc-edit-variable (&optional var) | 428 (defun calc-edit-variable (&optional var) |
380 (interactive) | 429 (interactive) |
381 (calc-wrapper | 430 (calc-wrapper |
382 (or var (setq var (calc-read-var-name | 431 (or var (setq var (calc-read-var-name |
383 (if calc-last-edited-variable | 432 (if calc-last-edited-variable |
384 (format "Edit: (default %s) " | 433 (format "Edit (default %s): " |
385 (calc-var-name calc-last-edited-variable)) | 434 (calc-var-name calc-last-edited-variable)) |
386 "Edit: ")))) | 435 "Edit: ")))) |
387 (or var (setq var calc-last-edited-variable)) | 436 (or var (setq var calc-last-edited-variable)) |
388 (if var | 437 (if var |
389 (let* ((value (calc-var-value var))) | 438 (let* ((value (calc-var-value var))) |
390 (if (eq (car-safe value) 'special-const) | 439 (if (eq (car-safe value) 'special-const) |
391 (error "%s is a special constant" var)) | 440 (error "%s is a special constant" var)) |
392 (setq calc-last-edited-variable var) | 441 (setq calc-last-edited-variable var) |
393 (calc-edit-mode (list 'calc-finish-stack-edit (list 'quote var)) | 442 (calc-edit-mode (list 'calc-finish-stack-edit (list 'quote var)) |
394 t | 443 t |
395 (concat "Editing " (calc-var-name var))) | 444 (concat "Editing variable `" (calc-var-name var) "'. ")) |
396 (and value | 445 (and value |
397 (insert (math-format-nice-expr value (frame-width)) "\n"))))) | 446 (insert (math-format-nice-expr value (frame-width)) "\n"))))) |
398 (calc-show-edit-buffer)) | 447 (calc-show-edit-buffer)) |
399 | 448 |
400 (defun calc-edit-Decls () | 449 (defun calc-edit-Decls () |
475 (if (or (not (eq (car-safe row) 'var)) | 524 (if (or (not (eq (car-safe row) 'var)) |
476 (not (eq (nth 2 row) var))) | 525 (not (eq (nth 2 row) var))) |
477 (setq rp nil))) | 526 (setq rp nil))) |
478 (not rp))))) | 527 (not rp))))) |
479 (calc-unread-command ?\C-a) | 528 (calc-unread-command ?\C-a) |
480 (setq decl (read-string (format "Declare: %s to be: " var) | 529 (setq decl (read-string (format "Declare: %s to be: " (calc-var-name var)) |
481 (and rp | 530 (and rp |
482 (math-format-flat-expr (nth 2 (car dp)) 0)))) | 531 (math-format-flat-expr (nth 2 (car dp)) 0)))) |
483 (setq decl (and (string-match "[^ \t]" decl) | 532 (setq decl (and (string-match "[^ \t]" decl) |
484 (math-read-exprs decl))) | 533 (math-read-exprs decl))) |
485 (if (eq (car-safe decl) 'error) | 534 (if (eq (car-safe decl) 'error) |
528 var-PlotData1 var-PlotData2 | 577 var-PlotData1 var-PlotData2 |
529 var-PlotData3 var-PlotData4 | 578 var-PlotData3 var-PlotData4 |
530 var-PlotData5 var-PlotData6 | 579 var-PlotData5 var-PlotData6 |
531 var-DUMMY)) | 580 var-DUMMY)) |
532 | 581 |
582 ;; The variable calc-pv-pos is local to calc-permanent-variable, but | |
583 ;; used by calc-insert-permanent-variable, which is called by | |
584 ;; calc-permanent-variable. | |
585 (defvar calc-pv-pos) | |
586 | |
533 (defun calc-permanent-variable (&optional var) | 587 (defun calc-permanent-variable (&optional var) |
534 (interactive) | 588 (interactive) |
535 (calc-wrapper | 589 (calc-wrapper |
536 (or var (setq var (calc-read-var-name "Save variable (default=all): "))) | 590 (or var (setq var (calc-read-var-name "Save variable (default all): "))) |
537 (let (pos) | 591 (let (calc-pv-pos) |
538 (and var (or (and (boundp var) (symbol-value var)) | 592 (and var (or (and (boundp var) (symbol-value var)) |
539 (error "No such variable"))) | 593 (error "No such variable"))) |
540 (set-buffer (find-file-noselect (substitute-in-file-name | 594 (set-buffer (find-file-noselect (substitute-in-file-name |
541 calc-settings-file))) | 595 calc-settings-file))) |
542 (if var | 596 (if var |
554 | 608 |
555 (defun calc-insert-permanent-variable (var) | 609 (defun calc-insert-permanent-variable (var) |
556 (goto-char (point-min)) | 610 (goto-char (point-min)) |
557 (if (search-forward (concat "(setq " (symbol-name var) " '") nil t) | 611 (if (search-forward (concat "(setq " (symbol-name var) " '") nil t) |
558 (progn | 612 (progn |
559 (setq pos (point-marker)) | 613 (setq calc-pv-pos (point-marker)) |
560 (forward-line -1) | 614 (forward-line -1) |
561 (if (looking-at ";;; Variable .* stored by Calc on ") | 615 (if (looking-at ";;; Variable .* stored by Calc on ") |
562 (progn | 616 (progn |
563 (delete-region (match-end 0) (progn (end-of-line) (point))) | 617 (delete-region (match-end 0) (progn (end-of-line) (point))) |
564 (insert (current-time-string)))) | 618 (insert (current-time-string)))) |
565 (goto-char (- pos 8 (length (symbol-name var)))) | 619 (goto-char (- calc-pv-pos 8 (length (symbol-name var)))) |
566 (forward-sexp 1) | 620 (forward-sexp 1) |
567 (backward-char 1) | 621 (backward-char 1) |
568 (delete-region pos (point))) | 622 (delete-region calc-pv-pos (point))) |
569 (goto-char (point-max)) | 623 (goto-char (point-max)) |
570 (insert "\n;;; Variable \"" | 624 (insert "\n;;; Variable \"" |
571 (symbol-name var) | 625 (symbol-name var) |
572 "\" stored by Calc on " | 626 "\" stored by Calc on " |
573 (current-time-string) | 627 (current-time-string) |
617 (defun calc-subscript (arg) | 671 (defun calc-subscript (arg) |
618 (interactive "P") | 672 (interactive "P") |
619 (calc-slow-wrapper | 673 (calc-slow-wrapper |
620 (calc-binary-op "sub" 'calcFunc-subscr arg))) | 674 (calc-binary-op "sub" 'calcFunc-subscr arg))) |
621 | 675 |
676 (provide 'calc-store) | |
677 | |
678 ;;; arch-tag: 2fbfec82-a521-42ca-bcd8-4f254ae6313e | |
622 ;;; calc-store.el ends here | 679 ;;; calc-store.el ends here |