;;; -*- Mode:LISP; Comment:(SAVE THESE FOR NEXT WEEK); Base:10 -*-

;;;Editor / buffer comments

(defvar *editor-buffer-comment-usage-level* :unknown
  "Turn this off to avoid temporary buffer comments getting into mode lines, files, etc.")

(defun set-editor-buffer-comment-usage-level()
  (cond ((or (not (boundp '*editor-buffer-comment-usage-level*))
	     (eq *editor-buffer-comment-usage-level* :unknown))
	 (setq *editor-buffer-comment-usage-level*
	       (fquery
		 '(:type :tyi
			 :choices (((:always "Yes") #\Y #\space)
				   ((nil "No") #\N)
				   ((:ask "Maybe - ask for each buffer") #\? #\M)))
		 "Provide for a buffer :COMMENT attribute whenever possible?")))
	((eq *editor-buffer-comment-usage-level* :ask)
	 (yes-or-no-p "How about a buffer :COMMENT this time?"))
	(t *editor-buffer-comment-usage-level*)))

(defun set-editor-buffer-comment (buffer &optional comment)
  (unless comment
    (setq comment (ncons (typein-line-readline "Enter a comment for this buffer:"))))
  (if (progn
	(when (or (send buffer :get-attribute :comment) *editor-buffer-comment-usage-level*)
	  (send buffer :set-attribute :comment comment :query)
	  (update-buffer-attribute-list buffer)))
    (barf "A buffer comment must be a symbol.")))

(defcom com-set-buffer-comment "Record a comment with this buffer" ()
  (when (set-editor-buffer-comment-usage-level)
    (set-editor-buffer-comment *interval*))
  dis-text)

