- (setq assistant-current-node node-name)
- (erase-buffer)
- (insert (cadar assistant-data) "\n\n")
- (insert node-name "\n\n")
- (assistant-render-text (assistant-get node "text") node)
- (insert "\n\n")
- (when assistant-previous-node
- (assistant-node-button 'previous assistant-previous-node))
- (assistant-node-button 'next (assistant-find-next-node))
- (insert "\n")))
+ (if (equal (assistant-get node "type") "interstitial")
+ (assistant-render-node (nth 0 (assistant-find-next-nodes node-name)))
+ (setq assistant-current-node node-name)
+ (when previous
+ (push previous assistant-previous-nodes))
+ (erase-buffer)
+ (insert (cadar assistant-data) "\n\n")
+ (insert node-name "\n\n")
+ (assistant-render-text (assistant-get node "text") node)
+ (insert "\n\n")
+ (when assistant-previous-nodes
+ (assistant-node-button 'previous (car assistant-previous-nodes)))
+ (widget-create
+ 'push-button
+ :assistant-node node-name
+ :notify (lambda (widget &rest ignore)
+ (let* ((node (widget-get widget :assistant-node)))
+ (assistant-set-defaults (assistant-find-node node) 'force)
+ (assistant-render-node node)))
+ "Reset")
+ (insert "\n")
+ (dolist (nnode (assistant-find-next-nodes))
+ (assistant-node-button 'next nnode)
+ (insert "\n"))
+
+ (goto-char (point-min))
+ (assistant-make-read-only))))
+
+(defun assistant-make-read-only ()
+ (let ((start (point-min))
+ end)
+ (while (setq end (text-property-any start (point-max) 'not-read-only t))
+ (put-text-property start end 'read-only t)
+ (put-text-property start end 'rear-nonsticky t)
+ (while (get-text-property end 'not-read-only)
+ (incf end))
+ (setq start end))
+ (put-text-property start (point-max) 'read-only t)))