home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / lisp / hyperbole / hhist.el < prev    next >
Encoding:
Text File  |  1995-04-17  |  2.9 KB  |  91 lines

  1. ;;!emacs
  2. ;;
  3. ;; FILE:         hhist.el
  4. ;; SUMMARY:      Maintains history of Hyperbole buttons selected.
  5. ;; USAGE:        GNU Emacs Lisp Library
  6. ;; KEYWORDS:     hypermedia
  7. ;;
  8. ;; AUTHOR:       Bob Weiner
  9. ;; ORG:          Brown U.
  10. ;;
  11. ;; ORIG-DATE:    24-Apr-91 at 03:36:23
  12. ;; LAST-MOD:     14-Apr-95 at 16:02:05 by Bob Weiner
  13. ;;
  14. ;; This file is part of Hyperbole.
  15. ;; Available for use and distribution under the same terms as GNU Emacs.
  16. ;;
  17. ;; Copyright (C) 1991-1995, Free Software Foundation, Inc.
  18. ;; Developed with support from Motorola Inc.
  19. ;;
  20. ;; DESCRIPTION:  
  21. ;;
  22. ;;   This is minimal right now and will be extended.
  23. ;;   Currently, it implements a push-pop stack of traversed locations.
  24. ;;
  25. ;;   It will be extended to allow random access to previous locations
  26. ;;   and to store traversal histories for later recall.
  27. ;;
  28. ;; DESCRIP-END.
  29.  
  30. ;;; ************************************************************************
  31. ;;; Public functions
  32. ;;; ************************************************************************
  33.  
  34. (defun hhist:add (elt)
  35.   "Adds ELT to hyper-history list if not the same as current or previous loc.
  36. ELT must have been created via a call to 'hhist:element'."
  37.   ;; Even though this next line looks useless, it cures a problem with
  38.   ;; window buffer correspondences on startup, so don't remove it.
  39.   (set-buffer (window-buffer (selected-window)))
  40.   (let ((prev-buf (car elt)))
  41.     (if (or (equal prev-buf (buffer-name))
  42.         (equal prev-buf (car (car *hhist*))))
  43.     nil
  44.       (setq *hhist* (cons elt *hhist*)))))
  45.  
  46. (defun hhist:element ()
  47.   "Returns a history element for current point location."
  48.   (list (current-buffer) (point)))
  49.  
  50. (defun hhist:remove (&optional arg)
  51.   "Removes optional prefix ARG entries from history, returns to ARGth location.
  52. The command is ignored with ARG < 1."
  53.   (interactive "p")
  54.   (setq arg (or arg 1))
  55.   (let ((prev-buf-line))
  56.     (if (null *hhist*)
  57.     (and (> arg 0)
  58.          (message "(hhist:remove): No previous source to which to return.")
  59.          (beep))
  60.       (while (and (> arg 0) *hhist*)
  61.     (setq prev-buf-line (car *hhist*)
  62.           *hhist* (cdr *hhist*)
  63.           arg (1- arg)))
  64.       (switch-to-buffer (car prev-buf-line))
  65.       (goto-char (car (cdr prev-buf-line)))
  66.       )))
  67.  
  68. (defun hhist:init ()
  69.   "Resets history list."
  70.   (interactive)
  71.   (setq *hhist* nil))
  72.  
  73. ;;; ************************************************************************
  74. ;;; Private functions
  75. ;;; ************************************************************************
  76.  
  77. (defun hhist:wind-line ()
  78.   "Returns window relative line number that point is on."
  79.   (max 0 (1- (- (count-lines 1 (1+ (point)))
  80.         (count-lines 1 (window-start))))))
  81.  
  82. ;;; ************************************************************************
  83. ;;; Private variables
  84. ;;; ************************************************************************
  85.  
  86. (defconst *hhist* nil
  87.   "List of previously visited Hyperbole button source locations.
  88. Car of list is most recent.")
  89.  
  90. (provide 'hhist)
  91.