emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/lisp/calc calc.el


From: Jay Belanger
Subject: [Emacs-diffs] emacs/lisp/calc calc.el
Date: Mon, 30 Mar 2009 02:19:08 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Jay Belanger <jpb>      09/03/30 02:19:08

Modified files:
        lisp/calc      : calc.el 

Log message:
        (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'. 

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/calc/calc.el?cvsroot=emacs&r1=1.123&r2=1.124

Patches:
Index: calc.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/calc/calc.el,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -b -r1.123 -r1.124
--- calc.el     9 Jan 2009 05:01:01 -0000       1.123
+++ calc.el     30 Mar 2009 02:19:07 -0000      1.124
@@ -903,6 +903,8 @@
   "The list of recent undo operations.")
 (defvar calc-main-buffer nil
   "A pointer to Calculator buffer.")
+(defvar calc-buffer-list nil
+  "A list of all Calc buffers.")
 (defvar calc-trail-buffer nil
   "A pointer to Calc Trail buffer.")
 (defvar calc-why nil
@@ -1201,6 +1203,67 @@
 
 (defvar calc-alg-map) ; Defined in calc-ext.el
 
+
+(defvar calc-embedded-modes) ; Defined in calc-embed.el
+(defvar calc-override-minor-modes) ; Defined in calc-embed.el
+(defun calc-kill-stack-buffer ()
+  "Check to see if user wants to kill the Calc stack buffer.
+This will look for buffers using the Calc buffer for embedded mode,
+and inform the user if there are any.
+If the user wants to kill the Calc buffer, this will remove
+embedded information from the appropriate buffers and tidy up
+the trail buffer."
+  (let ((cb (current-buffer))
+        (info-list nil)
+        (buflist)
+;        (plural nil)
+        (cea calc-embedded-active))
+    ;; Get a list of all buffers using this buffer for
+    ;; embedded Calc.
+    (while cea
+      (when (and (eq cb (aref (nth 1 (car cea)) 1))
+                 (buffer-name (car (car cea))))
+        (setq info-list (cons (car cea) info-list)))
+      (setq cea (cdr cea)))
+    ;; Eventually, prompt user with a list of buffers using embedded mode.
+    (when (and
+           info-list
+           (yes-or-no-p 
+            (concat "This Calc stack is being used for embedded mode. Kill 
anyway?")))
+      (while info-list
+        (with-current-buffer (car (car info-list))
+          (when calc-embedded-info
+            (setq calc-embedded-info nil
+                  mode-line-buffer-identification (car calc-embedded-modes)
+                  truncate-lines (nth 2 calc-embedded-modes)
+                  buffer-read-only nil)
+            (use-local-map (nth 1 calc-embedded-modes))
+            (setq minor-mode-overriding-map-alist
+                  (remq calc-override-minor-modes 
minor-mode-overriding-map-alist))
+            (let ((str mode-line-buffer-identification))
+              (setq mode-line-buffer-identification str))
+            (set-buffer-modified-p (buffer-modified-p))))
+        (setq calc-embedded-active
+              (delete (car info-list) calc-embedded-active))
+        (setq info-list (cdr info-list))))
+    (if (not info-list)
+        (progn
+          (setq calc-buffer-list (delete cb calc-buffer-list))
+          (with-current-buffer calc-trail-buffer
+            (if (eq cb calc-main-buffer)
+                ;; If there are other Calc stacks, make another one
+                ;; the calc-main-buffer ...
+                (if calc-buffer-list
+                    (setq calc-main-buffer (car calc-buffer-list))
+                  ;; ... otherwise kill the trail and its windows.
+                  (let ((wl (get-buffer-window-list calc-trail-buffer)))
+                    (while wl
+                      (delete-window (car wl))
+                      (setq wl (cdr wl))))
+                  (kill-buffer calc-trail-buffer)
+                  (setq calc-trail-buffer nil))))
+          t))))
+
 (defun calc-mode ()
   "Calculator major mode.
 
@@ -1242,6 +1305,9 @@
   (make-local-variable 'overlay-arrow-position)
   (make-local-variable 'overlay-arrow-string)
   (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
+  (add-hook 'kill-buffer-query-functions
+            'calc-kill-stack-buffer
+            t t)
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (setq major-mode 'calc-mode)
@@ -1268,7 +1334,8 @@
   (run-mode-hooks 'calc-mode-hook)
   (calc-refresh t)
   (calc-set-mode-line)
-  (calc-check-defines))
+  (calc-check-defines)
+  (add-to-list 'calc-buffer-list (current-buffer) t))
 
 (defvar calc-check-defines 'calc-check-defines)  ; suitable for run-hooks
 (defun calc-check-defines ()




reply via email to

[Prev in Thread] Current Thread [Next in Thread]