;;;
;;; .emacs additions from mud-telnet-Sleeper.el  (mud.el from Sleeper)
;;;

;;;
;;; Uncomment to make Emacs search ~/emacs/lisp for lisp code. (Recommended)
;;;

;;;(setq load-path (append
;;;		 (list (concat (getenv "HOME") "/emacs/lisp"))
;;;		 load-path))


(if window-system
    (progn
      ;; use  'light instead of  'dark  if you have a light background
      (setq hilit-background-mode       'dark
	    hilit-mode-enable-list      '(not empire-map-mode text-mode)
	    hilit-face-check            nil  ;; use t if changing fonts
	    hilit-auto-rehighlight-fallback '(20000 . 200)
	    hilit-auto-rehighlight      200) ;; max amount of rehighlighting

;;; Define colors available for use in regular expressions later:
;;; 4 fields: name, treatment for light bg, treatment for dark bg, trtmnt for mono.
;;; (You can cheat on the modes you wont be using if you feel like it.)      
      (setq hilit-user-face-table
;;;         ;; face         light           dark            mono
	    '(;;;(prompt     blue-bold       cyan-bold       default-bold)
	      (prompt     blue-bold       cyan       default-bold)
	      ;;;(input      firebrick-bold-italic khaki-bold default-bold)
	      (input      firebrick-bold-italic khaki default-bold)
	      ;;;(error	  red-bold           yellow	       bold)
	      (error	  red                yellow	       bold)
;;; YOU
	      (mud-player-name blue        cyan-italic    bold)
;;; BUDDIES
	      (mud-buddy  pink             pink           bold-italic)
;;; PAGES
	      (mud-page   orange           yellow/gray50  bold-italic)
;;; [Helpers]
	      (mud-helpers blue            orange/gray50  bold-italic)
;;; Help>>
	      (mud-help    brown           yellow/black   bold-italic)
	      ))
      (setq hilit-hook-list
	    '(yank yank-pop recenter find-file info mail gnus dired))
      (setq hilit-new-style-patterns t) ;; use mega single patterns

      (require 'hl319)

      ;;
      ;; Set up mud highlighting
      ;;
      (if (featurep 'hilit19)

;;; Hilit patterns are usaully hard to reset once they are loaded.
;;; I define a function here called mud-hilit, so you can change
;;; the patterns, M-x mud-hilit and immediately see the changes.	  

	  (defun mud-hilit ()
	    (interactive)
	    (hilit-set-mode-patterns
	     'mud-interactive-mode

;;; OK.  Big, ugly regexps.  Followed by nil (meaning the 1st regexp
;;; matches the complete pattern, instead of specifying the start with
;;; the ending in the 2nd regexp) The third field is a color
;;; predefined in hl319, or defined by you (as above) with the
;;; hilit-user-face-table

	     '(

;;; First is YOU.  Default cyan as defined above.
;;;  - Your connecting player name is handled by mud.el
;;;  - If you're gursting, change none_ to the guest name, M-C-x
;;;    to eval the function, then M-x mud-hilit to turn it on.
;;;    (Only necesary when forcing a name. like a guest name.)
;;;  - the ``to you, \"'' lights up the directed say
;;;  - You can take out the ``blue'' if it annoys you...
;;;  - If you change morphs a lot, you may wish to add your common
;;;    aliases, since only the main connecting name is handled by
;;;    mud-telnet-Sleeper.el automagically

;;;  Note the escaping of the or (`|') operator, also note that
;;;  \\b is useful to match word boundaries.  For example, the
;;;  ``blue'' in ``bluegrass'' will not be highlighted with this pattern	       
	       
	       ("none_Guest\\|to you, \"\\|\\bblue\\b" nil mud-player-name)

;;;  Now pals:  remember \\b if their name is found commonly in other words.
	       
	       ("Sleeper\\|Quinn" nil mud-buddy)

;;;  Helpline & buffer overflow
	       
	       ("^HELP>.*\\|^>> ?Network buffer overflow:" nil mud-help)

;;;  [+][Helpers]
	       
	       ("^\\[.\\]\\[Helpers\\].*" nil mud-helpers)

;;;  pages -- you'll want to match these (somewhat) with the regexp in
;;;  mud-telnet-Sleeper.el

	       ("^-> .*\\|.* pages?[,:].*\\|.* responds?,.*\\|^\\[from .*\\].*\\|^(from .*).*\\|<hiding under \\(the\\|your\\) bed>.*\\|<in the hot tub>.*\\|^From the shadows, .*\\|^You have new mail .*" nil mud-page)

	       )
	     nil
	     t)
	    (setq hilit-buffer-compiled-patterns nil)
	    (hilit-rehighlight-buffer)
	    )
	)
;;; Run it, the first time.
      (mud-hilit)
      )
  )

;;;
;;; MUD stuff
;;;
;;; MOO
;;; (autoload 'mud "mud-telnet-Sleeper"
;;;   "Starts mud mode."
;;; t)
;;; Just load it, so we don't have to worry about using eval-after-load...
(load "mud-telnet-Sleeper" nil t)

;;; don't use telnet  (Useful behind (old) firewalls mainly)
(setq mud-use-telnet nil)

;;; keep prompt at bottom
(setq mud-use-entire-window t)

;;; pop buffer when a page comes
(setq mud-show-page t)

;;; The number of commands to keep in history
(setq mud-input-history-size 50)


;;; OK, now for a better function for when a page arrives.

(defun mud-check-page ()
  "Look for page message, and pop-up buffer if specified."
  (goto-char (point-min))
  (while (not (eobp))
    (if (and mud-show-page (looking-at (mud-page-regexp)))
	(progn
          ;(make-frame-visible)   ; <- deiconify, but don't raise
	  (raise-frame (selected-frame)) ; <- deiconify and/or raise
	  (display-buffer (current-buffer))
	  (message "You are being paged in %s"
		   (buffer-name (current-buffer)))))
    (beginning-of-line 2)))



;;; ################################################
;;; ################################################
;;; Now, a set of tweaks for hl319...


;;; Tweak hilit-repaint-command so that bogus rehighlights don't occur
;;; (only in RMAIL mode (so far) (Hmmm.... now we have a parse
;;; function or folding-mode.... let's see if it still makes sense)
(defun hilit-repaint-command (arg)
  "Rehighlights according to the value of hilit-auto-rehighlight, or the
prefix argument if that is specified.  Warning:  If a parser is associated
with a mode, then this function will execute the parser function and
*not* repaint according to the argument.
\t\\[hilit-repaint-command]\t\trepaint according to hilit-auto-rehighlight
\t^U \\[hilit-repaint-command]\trepaint entire buffer
\t^U ^U \\[hilit-repaint-command]\trecompile patterns, then repaint buffer
\t^U - \\[hilit-repaint-command]\trepaint current 'defun' around cursor
\t^U 0 \\[hilit-repaint-command]\trepaint visible portion of buffer
\t^U n \\[hilit-repaint-command]\trepaint n lines to either side of point"
  (interactive "P")
  (let (st en quietly (parse-fn (cdr (assq major-mode hilit-parser-alist))))
    (or arg (setq arg hilit-auto-rehighlight))
    (cond (parse-fn  ;; if there is a parse function, ignore any arg!!
	   (funcall parse-fn quietly)) ;; used only for RMAIL... short...
	  ((or (eq  arg 'visible) (eq arg 0))
	   (setq st (window-start) en (window-end) quietly t))
	  ((or (eq  arg 'defun) (eq arg '-))
	   (setq st (save-excursion (beginning-of-defun) (point))
		 en (save-excursion (end-of-defun) (point))
		 quietly t))
	  ((numberp arg)
	   (setq st (save-excursion (forward-line (- arg)) (point))
		 en (save-excursion (forward-line arg) (point))))
	  ((consp arg)
	   (cond ((eq (car arg) 64)
		  (setq hilit-buffer-compiled-patterns nil)
		  (let ((hilit-new-style-patterns
			 (not hilit-new-style-patterns)))
		    (hilit-rehighlight-buffer)))
		 (t
		  (and (eq (car arg) 16)
		       (setq hilit-buffer-compiled-patterns nil))
		  (hilit-rehighlight-buffer))))
	  (t (hilit-rehighlight-buffer)))
    (if st
	(hilit-rehighlight-region st en quietly))))
;;;  
;;;  Sure is annoying not getting highlighting.... This fixes it.
;;;  
(defun hilit-find-file-hook ()
  "Find-file hook for hilit package.  See the variable hilit-auto-highlight."
  (cond ((and hilit-auto-highlight
	      (assq major-mode hilit-patterns-alist))
	 (if (> buffer-saved-size (car hilit-auto-rehighlight-fallback))
	     (setq hilit-auto-rehighlight
		   (cdr hilit-auto-rehighlight-fallback)))
	 (if (> buffer-saved-size hilit-auto-highlight-maxout)
	     (hilit-repaint-command nil)
	   (hilit-rehighlight-buffer)
	   (set-buffer-modified-p nil)))))

;;; need this for big RMAIL files
(defun hilit-rehighlight-message (quietly)
  "Highlight a buffer containing a news article or mail message."
  (save-excursion
    (goto-char (point-min))
    (re-search-forward (concat "^\\("
			       (regexp-quote mail-header-separator)
			       "\\)?$")
		       nil 'noerr)
    (hilit-unhighlight-region (point-min) (point-max) quietly)
    (hilit-highlight-region (point-min) (point) 'msg-header quietly)
    (if (> buffer-saved-size hilit-auto-highlight-maxout)
	(hilit-highlight-region
	 (point)
	 (save-excursion
	   (forward-line
	    (if (numberp hilit-auto-rehighlight) hilit-auto-rehighlight 100))
	   (point))
	 'msg-body quietly)
    (hilit-highlight-region (point) (point-max) 'msg-body quietly))))

(if (not (string-match "\\.19\\." emacs-version))
    (defun hilit-install-line-hooks ()
      "Enable on-the-fly highlighting in the current buffer only.
Before-change-hook gets trashed, presently."
      (interactive) 
      (make-local-variable 'after-change-functions)
      (or (memq 'hilit-rehighlight-changed-lines after-change-functions)
	  (setq after-change-functions (cons 'hilit-rehighlight-changed-lines
					     after-change-functions))))
  )

;;; from news
(if (and window-system (featurep 'hilit19) (not (string-match "\\.19\\." emacs-version)))
    (add-hook 'find-file-hooks 'hilit-install-line-hooks)
)

;;;
;;; Highlight yanked mail messages
;;;
(if (featurep 'hilit19)
    (progn
      (if (not (boundp 'mail-citation-hook))
	  (add-hook 'mail-citation-hook 'mail-indent-citation))
      (add-hook 'mail-citation-hook 'hilit-rehighlight-message-quietly t)
      )
  )
;;;
;;; fix highliting of large yanks...just put out the message for now.
;;;
(defun hilit-yank (arg)
  "Yank with rehighlighting"
  (interactive "*P")
  (let ((transient-mark-mode nil))
    (yank arg)
    (and hilit-auto-rehighlight
	 (hilit-rehighlight-region (region-beginning) (region-end)
				   (< (abs (- (region-beginning) (region-end))) 10000)))
    (setq this-command 'yank)))

(put 'hilit-yank 'delete-selection t)


(defun hilit-yank-pop (arg)
  "Yank-pop with rehighlighting"
  (interactive "*p")
  (let ((transient-mark-mode nil))
    (yank-pop arg)
    (and hilit-auto-rehighlight
	 (hilit-rehighlight-region (region-beginning) (region-end)
				   (< (abs (- (region-beginning) (region-end))) 10000)))
    (setq this-command 'yank)))
;;;
;;; Fix Info patterns
;;;
(if (and window-system (featurep 'hilit19))
    (hilit-set-mode-patterns
     'Info-mode
     '((:buildme:
	(jargon-entry "^\\* [^:]+:+")
	(jargon-xref "\\*[Nn]ote\\b[^:]+:+")
	(jargon-xref "  \\(Next\\|Prev\\|Up\\):")
	;; keywords for the emacs & lisp manuals
	(jargon-keyword "^[ \t]*[*][A-Za-z][^*\n]+[*]" ; bfd.info (output of 'chew')
			(:and: "- " (:or: "Variable" "Function" "Macro" "Command"
					"Special Form" "User Option") ":.*$"))
	)))
)

;;;
;;; End of .emacs additions from mud-telnet-Sleeper.el  (mud.el from Sleeper)
;;;