summaryrefslogtreecommitdiff
path: root/zwgc/zwgc.el
diff options
context:
space:
mode:
authorGravatar John Kohl <jtkohl@mit.edu>1989-11-15 15:08:22 +0000
committerGravatar John Kohl <jtkohl@mit.edu>1989-11-15 15:08:22 +0000
commitac35334527c740c70045a9d15cf04e08fa003089 (patch)
tree90f10821a7bc7d810ee9df474bcf10836a5264f0 /zwgc/zwgc.el
parent62dbff171aa6f2389f1c1de176cea5990bf2f003 (diff)
Initial revision
Diffstat (limited to 'zwgc/zwgc.el')
-rw-r--r--zwgc/zwgc.el180
1 files changed, 180 insertions, 0 deletions
diff --git a/zwgc/zwgc.el b/zwgc/zwgc.el
new file mode 100644
index 0000000..a0941b7
--- /dev/null
+++ b/zwgc/zwgc.el
@@ -0,0 +1,180 @@
+; zwgc.el
+;
+; This file is part of the Project Athena Zephyr Notification System.
+; Created by: Mark W. Eichin <eichin@athena.mit.edu>
+; $Source$
+; $Author$
+; Copyright (c) 1988 by the Massachusetts Institute of Technology.
+; For copying and distribution information, see the file
+; "mit-copyright.h".
+;
+; Emacs mode for running zwgc in a sub process of emacs. It pops up a
+; window for every new message; if you make bells appear between each
+; message, it will be able to seperate them. If you move the mouse
+; into the message window and hit `delete' it will delete the current
+; message; if there are other messages, it will show them, if not, it
+; will make the window go away.
+;
+; Invoke with M-x zwgc.
+;
+; Also included is M-x zsend, which prompts for a user name and a
+; message to send to them. If the message is blank, a buffer is popped
+; up to edit the message in. If a prefix argument is given, zsend
+; prompts for an instance instead. If the user name is blank, the last
+; one is reused.
+;
+; The following should be added to your .zephyr.desc file if you want
+; to take advantage of the zwgc message seperation features:
+; does $mode
+; match tty
+; beep
+; endmatch
+; enddoes
+;
+(defvar zwgc_el-RCS-id)
+(setq zwgc_el-RCS-id "$Header$")
+;
+;
+
+(defun narrow-to-string (str)
+ "narrow and put up a string..."
+ (interactive "sString: ")
+ (narrow-to-region (point) (point))
+ (insert str))
+
+(defvar zwgc-prog "/usr/etc/zwgc"
+ "*Program to run as the zwgc process. Should set it for the machine type.")
+
+(defun zwgc-wakeup (proc string)
+ "Procedure called when zwgc spits something out"
+ (save-excursion (set-buffer (get-buffer "*zwgc*"))
+ (goto-char (point-max))
+ (if (= 7 (string-to-char string))
+ (progn
+ (ding 1)
+ (message "got one!")
+ (narrow-to-string string))
+ (insert string)))
+ (Special-pop-up-window (get-buffer "*zwgc*"))
+ )
+
+(defun zwgc ()
+ "emacs mode for running zwgc in a sub process of emacs. It pops up a
+window for every new message; if you make bells appear between each
+message, it will be able to seperate them. If you move the mouse into
+the message window and hit `delete' it will delete the current
+message; if there are other messages, it will show them, if not, it
+will make the window go away."
+ (interactive)
+ (require 'shell)
+ (let ((buffer (get-buffer-create "*zwgc*")) proc status)
+ (setq proc (get-buffer-process buffer))
+ (if proc
+ (setq status (process-status proc)))
+ (save-excursion
+ (set-buffer buffer)
+ (if (memq status '(run stop))
+ nil
+ (if proc (delete-process proc))
+ (setq proc (start-process "Zwgc" buffer
+ zwgc-prog "-disable" "X"
+ "-default" "plain" "-nofork"))
+ (set-process-filter proc 'zwgc-wakeup))
+ (shell-mode)
+ (local-set-key "\177" 'zwgc-punt)
+ )
+ ))
+
+
+(defun Special-pop-up-window (buffer &optional max-height)
+ "Pop up a window that is just big enough to hold the current buffer."
+ (interactive "bBuffer to pop: ")
+ (let* ((retwin (selected-window))
+ (pop-up-windows t)
+ (window-min-height 1))
+ (pop-to-buffer buffer)
+ (setq lines (1+ (count-lines (point-min) (point-max))))
+ (enlarge-window (- lines (window-height (selected-window))))
+ (goto-char (point-min))
+ (other-window 1)
+ ))
+
+(defun zwgc-punt ()
+ "Delete the current ZephyrGram from the *zwgc* buffer."
+ (interactive)
+ (let ((window-min-height 1))
+ (display-buffer (get-buffer "*zwgc*"))
+ (delete-region (point-min) (point-max))
+ (widen)
+ (if (not (search-backward "\007" nil t))
+ (delete-windows-on "*zwgc*")
+ (narrow-to-region (point) (point-max))
+ (enlarge-window (- (1+ (count-lines (point-min) (point-max)))
+ (window-height (selected-window))))
+ (goto-char (point-min))
+ )))
+;;
+;; [eichin:19880309.2005EST]
+;; zsend.el
+;; Send zephyrgrams from emacs...
+;;
+
+(defvar *who* "" "last user sent to with zsend")
+
+(defun zsend (&optional who message)
+ "zsend prompts for a user name and a message to send to them as a
+ZephyrGram. If the message is blank, a buffer is popped up to edit the
+message in. If a prefix argument is given, zsend prompts for an
+instance instead. If the user name is blank, the last one is reused."
+ (interactive
+ (list (if current-prefix-arg ; is this portable???
+ (cons 'instance (read-input "Instance:"))
+ (cons 'who (read-input "Who:")))
+; (select-window (minibuffer-window))
+; (enlarge-window 4)
+ (read-input "Message:")))
+ (save-excursion
+ (let ((tempbuf (get-buffer-create " *zephyr*send*")))
+ (switch-to-buffer tempbuf)
+ (local-set-key "\C-c\C-c" 'exit-recursive-edit)
+ (erase-buffer)
+ (if (and (equal (cdr who) "")
+ (equal *who* ""))
+ (message "Please specify user at least once.")
+ (if (not (equal (cdr who) ""))
+ (setq *who* who) ; save *who* for next time
+ (setq who *who*)) ; or, use the old value
+ (if (not (equal message ""))
+ (progn
+ (insert message)
+ (zwrite who))
+ (progn
+ (recursive-edit)
+ (zwrite who)))))))
+
+
+(defun zwrite (who)
+ "Send a ZephyrGram to user WHO, zsend is the user interface to this."
+ (if (eq 'who (car who))
+ (call-process-region (point-min) (point-max) ;range
+ "/usr/athena/zwrite" ;process
+ t ;delete-p
+ t ;output-p
+ nil ;redisplay-p
+ "-q" ;args -- ignore server responses.
+ (cdr who))
+ (call-process-region (point-min) (point-max) ;range
+ "/usr/athena/zwrite" ;process
+ t ;delete-p
+ t ;output-p
+ nil ;redisplay-p
+ "-q" ;args -- ignore server responses.
+ "-i" ;[eichin:19880312.0015EST]
+ (cdr who)))
+ (if (not (equal (point-max) 1))
+ (message (buffer-substring 1 (1- (point-max))))))
+
+; suggested binding (control-meta-z)
+;(global-set-key "\M-\C-z" 'zsend)
+
+