home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21eb.zip / octave / lisp / octave-tmp-mode.el < prev    next >
Lisp/Scheme  |  1999-05-13  |  3KB  |  79 lines

  1. ;; octave-tmp-mode.el - major mode for Octave's temporary files
  2. ;;
  3. ;; (c) 1995 - 1997, Klaus Gebhardt
  4.  
  5. (require 'server)
  6. (require 'octave)
  7.  
  8. ;; Mode Map
  9. (defvar octave-tmp-mode-map nil)
  10. (setq octave-tmp-mode-map nil)
  11. (cond ((not octave-tmp-mode-map)
  12.        (setq octave-tmp-mode-map
  13.          (nconc (make-sparse-keymap) text-mode-map))
  14.        (define-key octave-tmp-mode-map "\C-x#" 'octave-tmp-mode-server-edit)))
  15.  
  16. ;; tmp-mode
  17. (defun octave-tmp-mode ()
  18.   "Major Mode for editing Octave's temporary files."
  19.   (interactive)
  20.   (text-mode)
  21.   (setq major-mode 'Octave-tmp-mode)
  22.   (setq mode-name "Octave-tmp")
  23.   (use-local-map octave-tmp-mode-map)
  24.   (make-local-variable 'backup-inhibited)
  25.   (setq backup-inhibited t)
  26.   (make-local-variable 'server-done-hook)
  27.   (setq server-done-hook 'octave-tmp-buffer-done))
  28.  
  29. (defun octave-tmp-buffer-done ()
  30.   "kill the temporary buffer."
  31.   (interactive)
  32.   (kill-buffer (current-buffer)))
  33.  
  34. (defun octave-tmp-mode-server-edit (&optional arg)
  35.   "Switch to next server editing buffer; say \"Done\" for current buffer.
  36. If a server buffer is current, it is marked \"done\" and optionally saved.
  37. When all of a client's buffers are marked as \"done\", the client is notified."
  38.   (interactive "P")
  39.   (if (or arg
  40.       (not server-process)
  41.       (memq (process-status server-process) '(signal exit)))
  42.       (server-start nil)
  43.     (apply 'octave-tmp-server-switch-buffer (server-done))))
  44.  
  45. (defun octave-tmp-server-switch-buffer (&optional next-buffer killed-one)
  46.   "Switch to another buffer, preferably one that has a client.
  47. Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
  48.   (cond ((and (windowp server-window)
  49.           (window-live-p server-window))
  50.      (select-window server-window))
  51.     ((framep server-window)
  52.      (if (not (frame-live-p server-window))
  53.          (setq server-window (make-frame)))
  54.      (select-window (frame-selected-window server-window))))
  55.   (if (window-minibuffer-p (selected-window))
  56.       (select-window (next-window nil 'nomini 0)))
  57.   (let ((last-window (previous-window nil 'nomini 0)))
  58.     (while (and (window-dedicated-p (selected-window))
  59.         (not (eq last-window (selected-window))))
  60.       (select-window (next-window nil 'nomini 0))))
  61.   (set-window-dedicated-p (selected-window) nil)
  62.   (if next-buffer
  63.       (if (and (bufferp next-buffer)
  64.            (buffer-name next-buffer))
  65.       (switch-to-buffer next-buffer)
  66.     (apply 'octave-tmp-server-switch-buffer
  67.            (server-buffer-done next-buffer)))
  68.     (if server-clients
  69.     (octave-tmp-server-switch-buffer
  70.      (nth 1 (car server-clients)) killed-one)
  71.       (if (not killed-one)
  72.       (if (and (get-buffer "*octave*")
  73.            (get-buffer-process "*octave*"))
  74.           (switch-to-buffer "*octave*")
  75.         (switch-to-buffer (other-buffer)))))))
  76.  
  77. (provide 'octave-tmp-mode)
  78.  
  79.