diff options
| author | Jay Belanger | 2009-03-30 02:19:07 +0000 |
|---|---|---|
| committer | Jay Belanger | 2009-03-30 02:19:07 +0000 |
| commit | 4880bb30ba48268a35ca344bd1bff31c8b29dff0 (patch) | |
| tree | e38273b44335eae55d3a2a3b0c6bdfe9d565e902 | |
| parent | e42ed20cbb4fdc2168859bf52d709b32edef5706 (diff) | |
| download | emacs-4880bb30ba48268a35ca344bd1bff31c8b29dff0.tar.gz emacs-4880bb30ba48268a35ca344bd1bff31c8b29dff0.zip | |
(calc-buffer-list): New variable.
(calc-kill-stack-buffer): New function.
(calc-mode): Add `calc-kill-stack-buffer' to
`kill-buffer-query-functions'.
Add current buffer to `calc-buffer-list'.
| -rw-r--r-- | lisp/calc/calc.el | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 59b4b682417..e1496da8d62 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el | |||
| @@ -903,6 +903,8 @@ Used by `calc-user-invocation'.") | |||
| 903 | "The list of recent undo operations.") | 903 | "The list of recent undo operations.") |
| 904 | (defvar calc-main-buffer nil | 904 | (defvar calc-main-buffer nil |
| 905 | "A pointer to Calculator buffer.") | 905 | "A pointer to Calculator buffer.") |
| 906 | (defvar calc-buffer-list nil | ||
| 907 | "A list of all Calc buffers.") | ||
| 906 | (defvar calc-trail-buffer nil | 908 | (defvar calc-trail-buffer nil |
| 907 | "A pointer to Calc Trail buffer.") | 909 | "A pointer to Calc Trail buffer.") |
| 908 | (defvar calc-why nil | 910 | (defvar calc-why nil |
| @@ -1201,6 +1203,67 @@ Used by `calc-user-invocation'.") | |||
| 1201 | 1203 | ||
| 1202 | (defvar calc-alg-map) ; Defined in calc-ext.el | 1204 | (defvar calc-alg-map) ; Defined in calc-ext.el |
| 1203 | 1205 | ||
| 1206 | |||
| 1207 | (defvar calc-embedded-modes) ; Defined in calc-embed.el | ||
| 1208 | (defvar calc-override-minor-modes) ; Defined in calc-embed.el | ||
| 1209 | (defun calc-kill-stack-buffer () | ||
| 1210 | "Check to see if user wants to kill the Calc stack buffer. | ||
| 1211 | This will look for buffers using the Calc buffer for embedded mode, | ||
| 1212 | and inform the user if there are any. | ||
| 1213 | If the user wants to kill the Calc buffer, this will remove | ||
| 1214 | embedded information from the appropriate buffers and tidy up | ||
| 1215 | the trail buffer." | ||
| 1216 | (let ((cb (current-buffer)) | ||
| 1217 | (info-list nil) | ||
| 1218 | (buflist) | ||
| 1219 | ; (plural nil) | ||
| 1220 | (cea calc-embedded-active)) | ||
| 1221 | ;; Get a list of all buffers using this buffer for | ||
| 1222 | ;; embedded Calc. | ||
| 1223 | (while cea | ||
| 1224 | (when (and (eq cb (aref (nth 1 (car cea)) 1)) | ||
| 1225 | (buffer-name (car (car cea)))) | ||
| 1226 | (setq info-list (cons (car cea) info-list))) | ||
| 1227 | (setq cea (cdr cea))) | ||
| 1228 | ;; Eventually, prompt user with a list of buffers using embedded mode. | ||
| 1229 | (when (and | ||
| 1230 | info-list | ||
| 1231 | (yes-or-no-p | ||
| 1232 | (concat "This Calc stack is being used for embedded mode. Kill anyway?"))) | ||
| 1233 | (while info-list | ||
| 1234 | (with-current-buffer (car (car info-list)) | ||
| 1235 | (when calc-embedded-info | ||
| 1236 | (setq calc-embedded-info nil | ||
| 1237 | mode-line-buffer-identification (car calc-embedded-modes) | ||
| 1238 | truncate-lines (nth 2 calc-embedded-modes) | ||
| 1239 | buffer-read-only nil) | ||
| 1240 | (use-local-map (nth 1 calc-embedded-modes)) | ||
| 1241 | (setq minor-mode-overriding-map-alist | ||
| 1242 | (remq calc-override-minor-modes minor-mode-overriding-map-alist)) | ||
| 1243 | (let ((str mode-line-buffer-identification)) | ||
| 1244 | (setq mode-line-buffer-identification str)) | ||
| 1245 | (set-buffer-modified-p (buffer-modified-p)))) | ||
| 1246 | (setq calc-embedded-active | ||
| 1247 | (delete (car info-list) calc-embedded-active)) | ||
| 1248 | (setq info-list (cdr info-list)))) | ||
| 1249 | (if (not info-list) | ||
| 1250 | (progn | ||
| 1251 | (setq calc-buffer-list (delete cb calc-buffer-list)) | ||
| 1252 | (with-current-buffer calc-trail-buffer | ||
| 1253 | (if (eq cb calc-main-buffer) | ||
| 1254 | ;; If there are other Calc stacks, make another one | ||
| 1255 | ;; the calc-main-buffer ... | ||
| 1256 | (if calc-buffer-list | ||
| 1257 | (setq calc-main-buffer (car calc-buffer-list)) | ||
| 1258 | ;; ... otherwise kill the trail and its windows. | ||
| 1259 | (let ((wl (get-buffer-window-list calc-trail-buffer))) | ||
| 1260 | (while wl | ||
| 1261 | (delete-window (car wl)) | ||
| 1262 | (setq wl (cdr wl)))) | ||
| 1263 | (kill-buffer calc-trail-buffer) | ||
| 1264 | (setq calc-trail-buffer nil)))) | ||
| 1265 | t)))) | ||
| 1266 | |||
| 1204 | (defun calc-mode () | 1267 | (defun calc-mode () |
| 1205 | "Calculator major mode. | 1268 | "Calculator major mode. |
| 1206 | 1269 | ||
| @@ -1242,6 +1305,9 @@ Notations: 3.14e6 3.14 * 10^6 | |||
| 1242 | (make-local-variable 'overlay-arrow-position) | 1305 | (make-local-variable 'overlay-arrow-position) |
| 1243 | (make-local-variable 'overlay-arrow-string) | 1306 | (make-local-variable 'overlay-arrow-string) |
| 1244 | (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) | 1307 | (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) |
| 1308 | (add-hook 'kill-buffer-query-functions | ||
| 1309 | 'calc-kill-stack-buffer | ||
| 1310 | t t) | ||
| 1245 | (setq truncate-lines t) | 1311 | (setq truncate-lines t) |
| 1246 | (setq buffer-read-only t) | 1312 | (setq buffer-read-only t) |
| 1247 | (setq major-mode 'calc-mode) | 1313 | (setq major-mode 'calc-mode) |
| @@ -1268,7 +1334,8 @@ Notations: 3.14e6 3.14 * 10^6 | |||
| 1268 | (run-mode-hooks 'calc-mode-hook) | 1334 | (run-mode-hooks 'calc-mode-hook) |
| 1269 | (calc-refresh t) | 1335 | (calc-refresh t) |
| 1270 | (calc-set-mode-line) | 1336 | (calc-set-mode-line) |
| 1271 | (calc-check-defines)) | 1337 | (calc-check-defines) |
| 1338 | (add-to-list 'calc-buffer-list (current-buffer) t)) | ||
| 1272 | 1339 | ||
| 1273 | (defvar calc-check-defines 'calc-check-defines) ; suitable for run-hooks | 1340 | (defvar calc-check-defines 'calc-check-defines) ; suitable for run-hooks |
| 1274 | (defun calc-check-defines () | 1341 | (defun calc-check-defines () |