 		(mapcar (lambda (x) (cond
 													( (symbolp x) (symbol-name x) )
 													( (stringp x) x )
-													( t (list 'quote x) ) )) archives) ) )
+													( (consp x) (if (eq 'quote (car x)) x (list 'quote x)) )
+													( t (ngender-warn x "package archive") ) )) archives) ) )
 
 ;; (macroexpand-1 '(ngender-archive gnu "marmalade" ("org" . "https://orgmode.org/elpa/")))
 												

(defun ngender-a-quoted-symbol (x)
	"given a string, a symbol or a quoted string or symbol, provide a quoted symbol - handy for macros"
	(cond
		( (and (consp x) (eq 'quote (cadr x)) (symbolp (caddr x))) x )
		( (and (consp x) (eq 'quote (cadr x)) (stringp (caddr x))) (list 'quote (intern (caddr x))) )
		( (symbolp x) (list 'quote x) )
		( (stringp x) (list 'quote (intern x)) )
		( t (ngender-warn x "symbol") ) ) )


;; Emacs 27 has assoc-delete-all but we don't so we'll just have to work harder:

(if (fboundp 'assoc-delete-all)
	(defun ngender-assoc-delete-all (key alist)
		(assoc-delete-all key alist) )
	(defun ngender-assoc-delete-all (key alist)
		"replace with assoc-delete-all as soon as emacs27 is in common use!!"
		(seq-filter (lambda (x) (not (equal key (car x)))) alist) ) )

(defun ngender-move-from-to-match (src-symbol dst-symbol match)
	"destructively move first matching element from src to dst; returning dst"
