;;; assistant.el --- guiding users through Emacs setup
-;; Copyright (C) 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: util
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
(require 'widget)
(require 'wid-edit)
+(autoload 'gnus-error "gnus-util")
+(autoload 'netrc-get "netrc")
+(autoload 'netrc-machine "netrc")
+(autoload 'netrc-parse "netrc")
+
(defvar assistant-readers
'(("variable" assistant-variable-reader)
("validate" assistant-sexp-reader)
("next" assistant-list-reader)
("text" assistant-text-reader)))
-(defface assistant-field-face '((t (:bold t)))
+(defface assistant-field '((t (:bold t)))
"Face used for editable fields."
:group 'gnus-article-emphasis)
+;; backward-compatibility alias
+(put 'assistant-field-face 'face-alias 'assistant-field)
;;; Internal variables
(forward-line 1)))
(skip-chars-forward " \t")
(prog1
- (buffer-substring (point) (line-end-position))
+ (buffer-substring (point) (point-at-eol))
(forward-line 1))))
(push (list command (assistant-reader command value))
results))
(setq result (if raw (nth 3 elem)
(format "%s" (nth 3 elem)))))))
result))
-
+
(defun assistant-set-variable (node variable value)
(let ((variables (assistant-get-list node "variable"))
elem)
(setq elem (cadr elem))
(when (eq (intern variable) (car elem))
(setcar (nthcdr 3 elem) value)))))
-
+
(defun assistant-render-text (text node)
(unless (and text node)
- (gnus-error
- 5
+ (gnus-error
+ 5
"The assistant was asked to render invalid text or node data"))
(dolist (elem text)
(if (stringp elem)
(cadr type))
assistant-widgets))
(t
- (push
+ (push
(widget-create
'editable-field
- :value-face 'assistant-field-face
+ :value-face 'assistant-field
:assistant-variable variable
(assistant-get-variable node variable))
assistant-widgets)
- ;; The editable-field widget apparently inserts a newline;
- ;; remove it.
- (delete-char -1)
(add-text-properties start (point)
- (list
- 'bold t
- 'face 'assistant-field-face
- 'not-read-only t))))))))
+ (list
+ 'bold t
+ 'face 'assistant-field
+ 'not-read-only t)))))))
+ (widget-setup))
(defun assistant-render-node (node-name)
(let ((node (assistant-find-node node-name))
(setq variable (cadr variable))
(let ((type (nth 1 variable))
(value (nth 3 variable)))
- (when
+ (when
(cond
((eq type :number)
(string-match "[^0-9]" value))
(setq applicable (cons elem applicable))))
;; return the first thing we can
-
+
(while (setq elem (pop applicable))
(push (cadr (cadr elem)) return))
(append (assistant-get-list node "variable")
variables)))
variables))
-
+
(defun assistant-eval (form)
(let ((bindings nil))
(dolist (variable (assistant-get-all-variables))
(setq variable (cadr variable))
- (push (list (car variable)
+ (push (list (car variable)
(if (eq (nth 3 variable) 'default)
nil
(if (listp (nth 3 variable))
(provide 'assistant)
-;;; arch-tag: 0404bfa2-9226-4611-8d3f-335c2416175b
;;; assistant.el ends here