Mercurial > emacs
comparison lisp/calc/calc.el @ 102789:9b97f51b2e82
(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'.
author | Jay Belanger <jay.p.belanger@gmail.com> |
---|---|
date | Mon, 30 Mar 2009 02:19:07 +0000 |
parents | dbe70c3aa01d |
children | be74cb571117 |
comparison
equal
deleted
inserted
replaced
102788:b5ba1407f9a1 | 102789:9b97f51b2e82 |
---|---|
901 "The list of previous operations for undo.") | 901 "The list of previous operations for undo.") |
902 (defvar calc-redo-list nil | 902 (defvar calc-redo-list nil |
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 |
909 "Explanations of most recent errors.") | 911 "Explanations of most recent errors.") |
910 (defvar calc-next-why nil) | 912 (defvar calc-next-why nil) |
1199 (use-global-map glob) | 1201 (use-global-map glob) |
1200 (use-local-map loc))))) | 1202 (use-local-map loc))))) |
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 |
1207 This is an RPN calculator featuring arbitrary-precision integer, rational, | 1270 This is an RPN calculator featuring arbitrary-precision integer, rational, |
1208 floating-point, complex, matrix, and symbolic arithmetic. | 1271 floating-point, complex, matrix, and symbolic arithmetic. |
1240 (progn (require 'calc-ext) calc-alg-map) calc-mode-map)) | 1303 (progn (require 'calc-ext) calc-alg-map) calc-mode-map)) |
1241 (mapc (function (lambda (v) (make-local-variable v))) calc-local-var-list) | 1304 (mapc (function (lambda (v) (make-local-variable v))) calc-local-var-list) |
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) |
1248 (setq mode-name "Calculator") | 1314 (setq mode-name "Calculator") |
1249 (setq calc-stack-top (length (or (memq (assq 'top-of-stack calc-stack) | 1315 (setq calc-stack-top (length (or (memq (assq 'top-of-stack calc-stack) |
1266 (setq p (cdr p)))) | 1332 (setq p (cdr p)))) |
1267 (require 'calc-menu) | 1333 (require 'calc-menu) |
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 () |
1275 (if (symbol-plist 'calc-define) | 1342 (if (symbol-plist 'calc-define) |
1276 (let ((plist (copy-sequence (symbol-plist 'calc-define)))) | 1343 (let ((plist (copy-sequence (symbol-plist 'calc-define)))) |