;; $Id: lff.el,v 1.1 1997/06/06 08:22:03 friedman Exp $ (require 'timer) (defvar lff-timer nil) (defvar lff-mark nil) (defvar lff-file nil) (defvar lff-interval 5) (defvar lff-mode-map nil) (defun lff (file) (interactive "fLive find file: ") (setq file (expand-file-name file)) (switch-to-buffer (create-file-buffer file)) (lff-mode) (lff-timer-start file)) (put 'lff-mode 'mode-class 'special) (defun lff-mode () (setq major-mode 'lff-mode) (setq mode-name "Live") (buffer-disable-undo) (setq buffer-read-only nil) (make-local-variable 'lff-timer) (setq lff-timer nil) (make-local-variable 'lff-mark) (setq lff-mark nil) (make-local-variable 'lff-file) (setq lff-file nil) (or lff-mode-map (lff-initialize-mode-map)) (use-local-map lff-mode-map) (run-hooks 'lff-mode-hook)) (defun lff-initialize-mode-map () (setq lff-mode-map (make-sparse-keymap)) (define-key lff-mode-map " " 'scroll-up) (define-key lff-mode-map "<" 'beginning-of-buffer) (define-key lff-mode-map ">" 'end-of-buffer) (define-key lff-mode-map "?" 'lff-command-help) (define-key lff-mode-map "\C-?" 'scroll-down) (define-key lff-mode-map "h" 'lff-command-help) (define-key lff-mode-map "n" 'lff-command-notify) (define-key lff-mode-map "q" 'kill-buffer) (define-key lff-mode-map "r" 'lff-command-reread)) (defun live-mode (&optional arg) "View/edit a growing or changing file." (interactive "P") (setq live-mode (if (null arg) (not live-mode) (> (prefix-numeric-value arg) 0))) (if (timerp live-timer) (cancel-timer live-timer)) (if live-mode (setq live-timer (run-with-timer live-interval live-interval 'live-check-file (current-buffer))))) (defun live-check-file (buffer) (save-excursion (set-buffer buffer) (let ((file (buffer-file-name))) (if (and file (not (buffer-modified-p)) (not (verify-visited-file-modtime buffer))) (revert-buffer t t))))) ;;; live-mode.el ends here