1 |
;; Calculator for GNU Emacs, part II [calc-embed.el] |
;;; calc-embed.el --- embed Calc in a buffer |
2 |
|
|
3 |
;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. |
;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. |
4 |
;; Written by Dave Gillespie, daveg@synaptics.com. |
|
5 |
|
;; Author: David Gillespie <daveg@synaptics.com> |
6 |
|
;; Maintainer: Colin Walters <walters@debian.org> |
7 |
|
|
8 |
;; This file is part of GNU Emacs. |
;; This file is part of GNU Emacs. |
9 |
|
|
22 |
;; file named COPYING. Among other things, the copyright notice |
;; file named COPYING. Among other things, the copyright notice |
23 |
;; and this notice must be preserved on all copies. |
;; and this notice must be preserved on all copies. |
24 |
|
|
25 |
|
;;; Commentary: |
26 |
|
|
27 |
|
;;; Code: |
28 |
|
|
29 |
;; This file is autoloaded from calc-ext.el. |
;; This file is autoloaded from calc-ext.el. |
30 |
(require 'calc-ext) |
(require 'calc-ext) |
33 |
|
|
34 |
(defun calc-Need-calc-embed () nil) |
(defun calc-Need-calc-embed () nil) |
35 |
|
|
|
|
|
36 |
(defun calc-show-plain (n) |
(defun calc-show-plain (n) |
37 |
(interactive "P") |
(interactive "P") |
38 |
(calc-wrapper |
(calc-wrapper |
39 |
(calc-set-command-flag 'renum-stack) |
(calc-set-command-flag 'renum-stack) |
40 |
(message (if (calc-change-mode 'calc-show-plain n nil t) |
(message (if (calc-change-mode 'calc-show-plain n nil t) |
41 |
"Including \"plain\" formulas in Calc Embedded mode." |
"Including \"plain\" formulas in Calc Embedded mode" |
42 |
"Omitting \"plain\" formulas in Calc Embedded mode.")))) |
"Omitting \"plain\" formulas in Calc Embedded mode")))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
;;; Things to do for Embedded Mode: |
|
|
;;; |
|
|
;;; Detect and strip off unexpected labels during reading. |
|
|
;;; |
|
|
;;; Get calc-grab-region to use math-read-big-expr. |
|
|
;;; If calc-show-plain, main body should have only righthand side of => expr. |
|
|
;;; Handle tabs that have crept into embedded formulas. |
|
|
;;; After "switching to new formula", home cursor to that formula. |
|
|
;;; Do something like \evalto ... \to for \gets operators. |
|
|
;;; |
|
43 |
|
|
44 |
|
|
45 |
(defvar calc-embedded-modes nil) |
(defvar calc-embedded-modes nil) |
46 |
(defvar calc-embedded-globals nil) |
(defvar calc-embedded-globals nil) |
47 |
(defvar calc-embedded-active nil) |
(defvar calc-embedded-active nil) |
48 |
|
(defvar calc-embedded-all-active nil) |
49 |
(make-variable-buffer-local 'calc-embedded-all-active) |
(make-variable-buffer-local 'calc-embedded-all-active) |
50 |
|
(defvar calc-embedded-some-active nil) |
51 |
(make-variable-buffer-local 'calc-embedded-some-active) |
(make-variable-buffer-local 'calc-embedded-some-active) |
52 |
|
|
|
|
|
53 |
(defvar calc-embedded-open-formula "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" |
(defvar calc-embedded-open-formula "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" |
54 |
"*A regular expression for the opening delimiter of a formula used by |
"*A regular expression for the opening delimiter of a formula used by |
55 |
calc-embedded.") |
calc-embedded.") |
152 |
;;; thrown away when a buffer changes major modes. |
;;; thrown away when a buffer changes major modes. |
153 |
|
|
154 |
|
|
155 |
|
(defvar calc-embedded-quiet nil) |
156 |
(defun calc-do-embedded (arg end obeg oend) |
(defun calc-do-embedded (arg end obeg oend) |
157 |
(if calc-embedded-info |
(if calc-embedded-info |
158 |
|
|
186 |
(use-local-map (nth 1 mode)) |
(use-local-map (nth 1 mode)) |
187 |
(set-buffer-modified-p (buffer-modified-p)) |
(set-buffer-modified-p (buffer-modified-p)) |
188 |
(or calc-embedded-quiet |
(or calc-embedded-quiet |
189 |
(message "Back to %s mode." mode-name)))) |
(message "Back to %s mode" mode-name)))) |
190 |
|
|
191 |
(t |
(t |
192 |
(if (buffer-name (aref calc-embedded-info 0)) |
(if (buffer-name (aref calc-embedded-info 0)) |
237 |
(setq calc-no-refresh-evaltos nil) |
(setq calc-no-refresh-evaltos nil) |
238 |
(and chg calc-any-evaltos (calc-wrapper (calc-refresh-evaltos))) |
(and chg calc-any-evaltos (calc-wrapper (calc-refresh-evaltos))) |
239 |
(or (eq calc-embedded-quiet t) |
(or (eq calc-embedded-quiet t) |
240 |
(message "Embedded Calc mode enabled. %s to return to normal." |
(message "Embedded Calc mode enabled; %s to return to normal" |
241 |
(if calc-embedded-quiet |
(if calc-embedded-quiet |
242 |
"Type `M-# x'" |
"Type `M-# x'" |
243 |
"Give this command again"))))) |
"Give this command again"))))) |
244 |
(scroll-down 0)) ; fix a bug which occurs when truncate-lines is changed. |
(scroll-down 0)) ; fix a bug which occurs when truncate-lines is changed. |
|
(setq calc-embedded-quiet nil) |
|
245 |
|
|
246 |
|
|
247 |
(defun calc-embedded-select (arg) |
(defun calc-embedded-select (arg) |
325 |
(calc-embedded-forget)) |
(calc-embedded-forget)) |
326 |
(calc-find-globals) |
(calc-find-globals) |
327 |
(if (< (prefix-numeric-value arg) 0) |
(if (< (prefix-numeric-value arg) 0) |
328 |
(message "Deactivating %s for Calc Embedded mode." (buffer-name)) |
(message "Deactivating %s for Calc Embedded mode" (buffer-name)) |
329 |
(message "Activating %s for Calc Embedded mode..." (buffer-name)) |
(message "Activating %s for Calc Embedded mode..." (buffer-name)) |
330 |
(save-excursion |
(save-excursion |
331 |
(let* ((active (assq (current-buffer) calc-embedded-active)) |
(let* ((active (assq (current-buffer) calc-embedded-active)) |
992 |
|
|
993 |
;;; These are hooks called by the main part of Calc. |
;;; These are hooks called by the main part of Calc. |
994 |
|
|
995 |
|
(defvar calc-embedded-no-reselect nil) |
996 |
(defun calc-embedded-select-buffer () |
(defun calc-embedded-select-buffer () |
997 |
(if (eq (current-buffer) (aref calc-embedded-info 0)) |
(if (eq (current-buffer) (aref calc-embedded-info 0)) |
998 |
(let ((info calc-embedded-info) |
(let ((info calc-embedded-info) |
1022 |
(forward-char (min horiz |
(forward-char (min horiz |
1023 |
(- (point-max) (point))))) |
(- (point-max) (point))))) |
1024 |
(calc-select-buffer))) |
(calc-select-buffer))) |
|
(setq calc-embedded-no-reselect nil) |
|
1025 |
|
|
1026 |
(defun calc-embedded-finish-command () |
(defun calc-embedded-finish-command () |
1027 |
(let ((buf (current-buffer)) |
(let ((buf (current-buffer)) |
1196 |
(calc-embedded-update (car p) 14 t nil))) |
(calc-embedded-update (car p) 14 t nil))) |
1197 |
(setcdr (car bp) (delq (car p) (cdr (car bp)))) |
(setcdr (car bp) (delq (car p) (cdr (car bp)))) |
1198 |
(message |
(message |
1199 |
"(Tried to recompute but formula was changed or missing.)")))) |
"(Tried to recompute but formula was changed or missing)")))) |
1200 |
(setq p (cdr p)))) |
(setq p (cdr p)))) |
1201 |
(setq bp (if buf nil (cdr bp)))) |
(setq bp (if buf nil (cdr bp)))) |
1202 |
(or first calc-embedded-quiet (message ""))))) |
(or first calc-embedded-quiet (message ""))))) |
1203 |
|
|
1204 |
;;; calc-embed.el ends here |
;;; calc-embed.el ends here |
|
|
|
|
|
|
|
|
|