;;; calc-embed.el --- embed Calc in a buffer
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2011 Free Software Foundation, Inc.
;; Author: David Gillespie <daveg@synaptics.com>
;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
(require 'calc-ext)
(require 'calc-macs)
+;; Declare functions which are defined elsewhere.
+(declare-function thing-at-point-looking-at "thingatpt" (regexp))
+
+
(defun calc-show-plain (n)
(interactive "P")
(calc-wrapper
(defvar calc-embedded-announce-formula)
(defvar calc-embedded-open-formula)
(defvar calc-embedded-close-formula)
-(defvar calc-embedded-open-word)
-(defvar calc-embedded-close-word)
(defvar calc-embedded-open-plain)
(defvar calc-embedded-close-plain)
(defvar calc-embedded-open-new-formula)
(defvar calc-embedded-close-new-formula)
(defvar calc-embedded-open-mode)
(defvar calc-embedded-close-mode)
+(defvar calc-embedded-word-regexp)
-(defconst calc-embedded-mode-vars '(("precision" . calc-internal-prec)
+(defconst calc-embedded-mode-vars '(("twos-complement" . calc-twos-complement-mode)
+ ("precision" . calc-internal-prec)
("word-size" . calc-word-size)
("angles" . calc-angle-mode)
("symbolic" . calc-symbolic-mode)
(message "Current modes will be preserved when leaving embedded mode."))
(message "Not in embedded mode.")))
-(defun calc-embedded-restore-original-modes ()
+(defun calc-embedded-restore-original-modes (calcbuf)
"Restore the original Calc modes when leaving embedded mode."
- (let ((calcbuf (get-buffer "*Calculator*"))
- (changed nil)
+ (let ((changed nil)
(lang (car calc-embedded-original-modes))
(modes (cdr calc-embedded-original-modes)))
(if (and calcbuf calc-embedded-original-modes)
((eq (current-buffer) (aref calc-embedded-info 0))
(let* ((info calc-embedded-info)
- (mode calc-embedded-modes))
- (save-excursion
- (set-buffer (aref info 1))
+ (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))
(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)
+ (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))
- (save-excursion
- (set-buffer (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))
(start (point))
pos)
(switch-to-buffer calc-original-buffer)
- (let ((val (save-excursion
- (set-buffer (aref info 1))
+ (let ((val (with-current-buffer (aref info 1)
(let ((calc-language nil)
(math-expr-opers (math-standard-ops)))
(math-read-expr str)))))
calc-embed-outer-top calc-embed-outer-bot)
(let* ((bufentry (assq (current-buffer) calc-embedded-active))
(found bufentry)
- (force (and fresh calc-embed-top))
+ (force (and fresh calc-embed-top (null (equal calc-embed-top '(t)))))
(fixed calc-embed-top)
(new-info nil)
info str)
calc-embedded-firsttime-buf t)
(let ((newann (assoc major-mode calc-embedded-announce-formula-alist))
(newform (assoc major-mode calc-embedded-open-close-formula-alist))
- (newword (assoc major-mode calc-embedded-open-close-word-alist))
+ (newword (assoc major-mode calc-embedded-word-regexp-alist))
(newplain (assoc major-mode calc-embedded-open-close-plain-alist))
(newnewform
(assoc major-mode calc-embedded-open-close-new-formula-alist))
(setq calc-embedded-open-formula (nth 0 (cdr newform)))
(setq calc-embedded-close-formula (nth 1 (cdr newform))))
(when newword
- (make-local-variable 'calc-embedded-open-word)
- (make-local-variable 'calc-embedded-close-word)
- (setq calc-embedded-open-word (nth 0 (cdr newword)))
- (setq calc-embedded-close-word (nth 1 (cdr newword))))
+ (make-local-variable 'calc-embedded-word-regexp)
+ (setq calc-embedded-word-regexp (nth 1 newword)))
(when newplain
(make-local-variable 'calc-embedded-open-plain)
(make-local-variable 'calc-embedded-close-plain)
(setq calc-embed-top (aref info 2)
fixed calc-embed-top)
(if (consp calc-embed-top)
- (let ((calc-embedded-open-formula calc-embedded-open-word)
- (calc-embedded-close-formula calc-embedded-close-word))
- (calc-embedded-find-bounds 'plain))
+ (progn
+ (require 'thingatpt)
+ (if (thing-at-point-looking-at calc-embedded-word-regexp)
+ (progn
+ (setq calc-embed-top (copy-marker (match-beginning 0)))
+ (setq calc-embed-bot (copy-marker (match-end 0)))
+ (setq calc-embed-outer-top calc-embed-top)
+ (setq calc-embed-outer-bot calc-embed-bot))
+ (setq calc-embed-top (point-marker))
+ (setq calc-embed-bot (point-marker))
+ (setq calc-embed-outer-top calc-embed-top)
+ (setq calc-embed-outer-bot calc-embed-bot)))
(or calc-embed-top
(calc-embedded-find-bounds 'plain)))
(aset info 2 (copy-marker (min calc-embed-top calc-embed-bot)))
(pref-len (length open-plain))
(calc-embed-vars-used nil)
suff-pos val temp)
- (save-excursion
- (set-buffer (aref info 1))
+ (with-current-buffer (aref info 1)
(calc-embedded-set-modes (aref info 15)
(aref info 12) (aref info 14))
(if (and (> (length str) pref-len)
(defun calc-embedded-finish-command ()
(let ((buf (current-buffer))
horiz vert)
- (save-excursion
- (set-buffer (aref calc-embedded-info 1))
+ (with-current-buffer (aref calc-embedded-info 1)
(if (> (calc-stack-size) 0)
(let ((pt (point))
(col (current-column))
(defun calc-embedded-stack-change ()
(or calc-executing-macro
- (save-excursion
- (set-buffer (aref calc-embedded-info 1))
+ (with-current-buffer (aref calc-embedded-info 1)
(let* ((info calc-embedded-info)
(extra-line (if (eq calc-language 'big) 1 0))
(the-point (point))
;; generated-autoload-file: "calc-loaddefs.el"
;; End:
-;; arch-tag: 1b8f311e-fba1-40d3-b8c3-1d6f68fd26fc
;;; calc-embed.el ends here