Function: calc-do-embedded
calc-do-embedded is an autoloaded and byte-compiled function defined
in calc-embed.el.gz.
Signature
(calc-do-embedded EMBED-ARG END OBEG OEND)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-embed.el.gz
(defun calc-do-embedded (embed-arg end obeg oend)
(let ((calc-embed-arg embed-arg))
(if calc-embedded-info
;; Turn embedded mode off or switch to a new buffer.
(cond ((eq (current-buffer) (aref calc-embedded-info 1))
(let ((calcbuf (current-buffer))
;; (buf (aref calc-embedded-info 0))
)
(calc-embedded-original-buffer t)
(calc-embedded nil)
(switch-to-buffer calcbuf)))
((eq (current-buffer) (aref calc-embedded-info 0))
(let* ((info calc-embedded-info)
(mode calc-embedded-modes)
(calcbuf (aref calc-embedded-info 1)))
(with-current-buffer (aref info 1)
(if (and (> (calc-stack-size) 0)
(equal (calc-top 1 'full) (aref info 8)))
(let ((calc-no-refresh-evaltos t))
(if (calc-top 1 'sel)
(calc-unselect 1))
(calc-embedded-set-modes
(aref info 15) (aref info 12) (aref info 14))
(let ((calc-embedded-info nil))
(calc-wrapper (calc-pop-stack))))
(calc-set-mode-line)))
(setq calc-embedded-info nil
mode-line-buffer-identification (car mode)
truncate-lines (nth 2 mode)
buffer-read-only nil)
(use-local-map (nth 1 mode))
(setq minor-mode-overriding-map-alist
(remq calc-override-minor-modes minor-mode-overriding-map-alist))
(set-buffer-modified-p (buffer-modified-p))
(calc-embedded-restore-original-modes calcbuf)
(or calc-embedded-quiet
(message "Back to %s mode" (format-mode-line mode-name)))))
(t
(if (buffer-name (aref calc-embedded-info 0))
(with-current-buffer (aref calc-embedded-info 0)
(or (y-or-n-p (format "Cancel Calc Embedded mode in buffer %s? "
(buffer-name)))
(keyboard-quit))
(calc-embedded nil)))
(calc-embedded calc-embed-arg end obeg oend)))
;; Turn embedded mode on.
(calc-plain-buffer-only)
(let ((modes (list mode-line-buffer-identification
(current-local-map)
truncate-lines))
(calc-embedded-firsttime (not calc-embedded-active))
(calc-embedded-firsttime-buf nil)
(calc-embedded-firsttime-formula nil)
calc-embed-top calc-embed-bot calc-embed-outer-top calc-embed-outer-bot
info chg ident)
(barf-if-buffer-read-only)
(calc-embedded-save-original-modes)
(or calc-embedded-globals
(calc-find-globals))
(setq info
(calc-embedded-make-info (point) nil t calc-embed-arg end obeg oend))
(if (eq (car-safe (aref info 8)) 'error)
(progn
(setq calc-embedded-original-modes nil)
(goto-char (nth 1 (aref info 8)))
(error (nth 2 (aref info 8)))))
(let ((mode-line-buffer-identification mode-line-buffer-identification)
(calc-embedded-info info)
(calc-embedded-no-reselect t))
(calc-wrapper
(let* (;; (okay nil)
(calc-no-refresh-evaltos t))
(if (aref info 8)
(progn
(calc-push (calc-normalize (aref info 8)))
(setq chg (calc-embedded-set-modes
(aref info 15) (aref info 12) (aref info 13))))
(setq chg (calc-embedded-set-modes
(aref info 15) (aref info 12) (aref info 13)))
(calc-alg-entry)))
(setq calc-undo-list nil
calc-redo-list nil
ident mode-line-buffer-identification)))
(setq calc-embedded-info info
calc-embedded-modes modes
mode-line-buffer-identification ident
truncate-lines t
buffer-read-only t)
(set-buffer-modified-p (buffer-modified-p))
(use-local-map calc-mode-map)
(setq minor-mode-overriding-map-alist
(cons calc-override-minor-modes
minor-mode-overriding-map-alist))
(setq calc-no-refresh-evaltos nil)
(and chg calc-any-evaltos (calc-wrapper (calc-refresh-evaltos)))
(let (str)
(save-excursion
(calc-select-buffer)
(setq str mode-line-buffer-identification))
(unless (equal str mode-line-buffer-identification)
(setq mode-line-buffer-identification str)
(set-buffer-modified-p (buffer-modified-p))))
(if calc-embedded-firsttime
(run-hooks 'calc-embedded-mode-hook))
(if calc-embedded-firsttime-buf
(run-hooks 'calc-embedded-new-buffer-hook))
(if calc-embedded-firsttime-formula
(run-hooks 'calc-embedded-new-formula-hook))
(or (eq calc-embedded-quiet t)
(message (concat
"Embedded Calc mode enabled; "
(if calc-embedded-quiet
(substitute-command-keys
"Type \\`C-x * x'")
"Give this command again")
" to return to normal")))))
(scroll-down 0))) ; fix a bug which occurs when truncate-lines is changed.