/[emacs]/emacs/lisp/calc/calc-embed.el
ViewVC logotype

Diff of /emacs/lisp/calc/calc-embed.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.21 by jpb, Mon Mar 21 15:47:37 2005 UTC revision 1.22 by jpb, Tue Mar 22 16:12:57 2005 UTC
# Line 149  This is not required to be present for u Line 149  This is not required to be present for u
149  ;;; rather than using buffer-local variables because the latter are  ;;; rather than using buffer-local variables because the latter are
150  ;;; thrown away when a buffer changes major modes.  ;;; thrown away when a buffer changes major modes.
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    
205  ;; The variables calc-embed-outer-top, calc-embed-outer-bot,  ;; The variables calc-embed-outer-top, calc-embed-outer-bot,
206  ;; calc-embed-top and calc-embed-bot are  ;; calc-embed-top and calc-embed-bot are
207  ;; local to calc-do-embedded, calc-embedded-mark-formula,  ;; local to calc-do-embedded, calc-embedded-mark-formula,
# Line 193  This is not required to be present for u Line 246  This is not required to be present for u
246                       buffer-read-only nil)                       buffer-read-only nil)
247                 (use-local-map (nth 1 mode))                 (use-local-map (nth 1 mode))
248                 (set-buffer-modified-p (buffer-modified-p))                 (set-buffer-modified-p (buffer-modified-p))
249                   (calc-embedded-restore-original-modes)
250                 (or calc-embedded-quiet                 (or calc-embedded-quiet
251                     (message "Back to %s mode" mode-name))))                     (message "Back to %s mode" mode-name))))
252    
# Line 214  This is not required to be present for u Line 268  This is not required to be present for u
268            calc-embed-top calc-embed-bot calc-embed-outer-top calc-embed-outer-bot            calc-embed-top calc-embed-bot calc-embed-outer-top calc-embed-outer-bot
269            info chg ident)            info chg ident)
270        (barf-if-buffer-read-only)        (barf-if-buffer-read-only)
271          (calc-embedded-save-original-modes)
272        (or calc-embedded-globals        (or calc-embedded-globals
273            (calc-find-globals))            (calc-find-globals))
274        (setq info (calc-embedded-make-info (point) nil t arg end obeg oend))        (setq info (calc-embedded-make-info (point) nil t arg end obeg oend))
275        (if (eq (car-safe (aref info 8)) 'error)        (if (eq (car-safe (aref info 8)) 'error)
276            (progn            (progn
277                (setq calc-embedded-original-modes nil)
278              (goto-char (nth 1 (aref info 8)))              (goto-char (nth 1 (aref info 8)))
279              (error (nth 2 (aref info 8)))))              (error (nth 2 (aref info 8)))))
280        (let ((mode-line-buffer-identification mode-line-buffer-identification)        (let ((mode-line-buffer-identification mode-line-buffer-identification)
# Line 1200  The command \\[yank] can retrieve it fro Line 1256  The command \\[yank] can retrieve it fro
1256                         (prin1-to-string (car values)) "]"                         (prin1-to-string (car values)) "]"
1257                         calc-embedded-close-mode))))                         calc-embedded-close-mode))))
1258                (setq vars (cdr vars)                (setq vars (cdr vars)
1259                      values (cdr values))))))))                      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)))))))))
1280    
1281  (defun calc-embedded-var-change (var &optional buf)  (defun calc-embedded-var-change (var &optional buf)
1282    (if (symbolp var)    (if (symbolp var)

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26