aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Belanger2005-03-22 16:12:57 +0000
committerJay Belanger2005-03-22 16:12:57 +0000
commit9e74b3fb26f6db5ca9e74a0653045d95e862787f (patch)
tree080c8bc336eb79ef375b8d5500238a155de69e42
parentd615870ac51052b656ac5df860cd7afe885be5ad (diff)
downloademacs-9e74b3fb26f6db5ca9e74a0653045d95e862787f.tar.gz
emacs-9e74b3fb26f6db5ca9e74a0653045d95e862787f.zip
(calc-embedded-original-modes): New variable.
(calc-embedded-save-original-modes) (calc-embedded-restore-original-modes): New functions. (calc-do-embedded): Save original modes when entering embedded mode and restore when leaving embedded mode. (calc-embedded-modes-change): Change the value of calc-embedded-original-modes to reflect permanent changes.
-rw-r--r--lisp/calc/calc-embed.el78
1 files changed, 77 insertions, 1 deletions
diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el
index 006be041bc2..8a48b78e37e 100644
--- a/lisp/calc/calc-embed.el
+++ b/lisp/calc/calc-embed.el
@@ -149,6 +149,59 @@ This is not required to be present for user-written mode annotations.")
149;;; rather than using buffer-local variables because the latter are 149;;; rather than using buffer-local variables because the latter are
150;;; thrown away when a buffer changes major modes. 150;;; thrown away when a buffer changes major modes.
151 151
152(defvar calc-embedded-original-modes nil
153 "The mode settings for Calc buffer when put in embedded mode.")
154
155(defun calc-embedded-save-original-modes ()
156 "Save the current Calc modes when entereding embedded mode."
157 (let ((calcbuf (save-excursion
158 (calc-create-buffer)
159 (current-buffer)))
160 lang modes)
161 (if calcbuf
162 (with-current-buffer calcbuf
163 (setq lang
164 (cons calc-language calc-language-option))
165 (setq modes
166 (list (cons 'calc-display-just
167 calc-display-just)
168 (cons 'calc-display-origin
169 calc-display-origin)))
170 (let ((v calc-embedded-mode-vars))
171 (while v
172 (let ((var (cdr (car v))))
173 (unless (memq var '(the-language the-display-just))
174 (setq modes
175 (cons (cons var (symbol-value var))
176 modes))))
177 (setq v (cdr v))))
178 (setq calc-embedded-original-modes (cons lang modes)))
179 (setq calc-embedded-original-modes nil))))
180
181(defun calc-embedded-restore-original-modes ()
182 "Restore the original Calc modes when leaving embedded mode."
183 (let ((calcbuf (get-buffer "*Calculator*"))
184 (changed nil)
185 (lang (car calc-embedded-original-modes))
186 (modes (cdr calc-embedded-original-modes)))
187 (if (and calcbuf calc-embedded-original-modes)
188 (with-current-buffer calcbuf
189 (unless (and
190 (equal calc-language (car lang))
191 (equal calc-language-option (cdr lang)))
192 (calc-set-language (car lang) (cdr lang))
193 (setq changed t))
194 (while modes
195 (let ((mode (car modes)))
196 (unless (equal (symbol-value (car mode)) (cdr mode))
197 (set (car mode) (cdr mode))
198 (setq changed t)))
199 (setq modes (cdr modes)))
200 (when changed
201 (calc-refresh)
202 (calc-set-mode-line))))
203 (setq calc-embedded-original-modes nil)))
204
152;; The variables calc-embed-outer-top, calc-embed-outer-bot, 205;; The variables calc-embed-outer-top, calc-embed-outer-bot,
153;; calc-embed-top and calc-embed-bot are 206;; calc-embed-top and calc-embed-bot are
154;; local to calc-do-embedded, calc-embedded-mark-formula, 207;; local to calc-do-embedded, calc-embedded-mark-formula,
@@ -193,6 +246,7 @@ This is not required to be present for user-written mode annotations.")
193 buffer-read-only nil) 246 buffer-read-only nil)
194 (use-local-map (nth 1 mode)) 247 (use-local-map (nth 1 mode))
195 (set-buffer-modified-p (buffer-modified-p)) 248 (set-buffer-modified-p (buffer-modified-p))
249 (calc-embedded-restore-original-modes)
196 (or calc-embedded-quiet 250 (or calc-embedded-quiet
197 (message "Back to %s mode" mode-name)))) 251 (message "Back to %s mode" mode-name))))
198 252
@@ -214,11 +268,13 @@ This is not required to be present for user-written mode annotations.")
214 calc-embed-top calc-embed-bot calc-embed-outer-top calc-embed-outer-bot 268 calc-embed-top calc-embed-bot calc-embed-outer-top calc-embed-outer-bot
215 info chg ident) 269 info chg ident)
216 (barf-if-buffer-read-only) 270 (barf-if-buffer-read-only)
271 (calc-embedded-save-original-modes)
217 (or calc-embedded-globals 272 (or calc-embedded-globals
218 (calc-find-globals)) 273 (calc-find-globals))
219 (setq info (calc-embedded-make-info (point) nil t arg end obeg oend)) 274 (setq info (calc-embedded-make-info (point) nil t arg end obeg oend))
220 (if (eq (car-safe (aref info 8)) 'error) 275 (if (eq (car-safe (aref info 8)) 'error)
221 (progn 276 (progn
277 (setq calc-embedded-original-modes nil)
222 (goto-char (nth 1 (aref info 8))) 278 (goto-char (nth 1 (aref info 8)))
223 (error (nth 2 (aref info 8))))) 279 (error (nth 2 (aref info 8)))))
224 (let ((mode-line-buffer-identification mode-line-buffer-identification) 280 (let ((mode-line-buffer-identification mode-line-buffer-identification)
@@ -1200,7 +1256,27 @@ The command \\[yank] can retrieve it from there."
1200 (prin1-to-string (car values)) "]" 1256 (prin1-to-string (car values)) "]"
1201 calc-embedded-close-mode)))) 1257 calc-embedded-close-mode))))
1202 (setq vars (cdr vars) 1258 (setq vars (cdr vars)
1203 values (cdr values)))))))) 1259 values (cdr values))))))
1260 (when (and vars calc-embedded-original-modes (eq calc-mode-save-mode 'save))
1261 (cond ((equal vars '(the-language))
1262 (setcar calc-embedded-original-modes
1263 (cons calc-language calc-language-option)))
1264 ((equal vars '(the-display-just))
1265 (let* ((modes (cdr calc-embedded-original-modes))
1266 (just (assq 'calc-display-just modes))
1267 (origin (assq 'calc-display-origin modes)))
1268 (if just
1269 (setcdr just calc-display-just))
1270 (if origin
1271 (setcdr origin calc-display-origin))))
1272 (t
1273 (let ((modes (cdr calc-embedded-original-modes)))
1274 (while vars
1275 (let* ((var (car vars))
1276 (cell (assq var modes)))
1277 (if cell
1278 (setcdr cell (symbol-value var))))
1279 (setq vars (cdr vars)))))))))
1204 1280
1205(defun calc-embedded-var-change (var &optional buf) 1281(defun calc-embedded-var-change (var &optional buf)
1206 (if (symbolp var) 1282 (if (symbolp var)