anchor.diff:                do (template-add-file name i i))
           (format *error-output* "template ~S is not editable.~%" name))))
   
  -(defun template-rm (names)
  -  "Remove (delete) a template."
  -  (declare (ignorable names))
  -  )
  +(defun template-remove-file (template-name file-name)
  +  (let ((info (read-template template-name)))
  +    (uiop:delete-file-if-exists
  +     (merge-pathnames (enc-string file-name) (template-dir template-name)))
  +    (when (find file-name (getf info :files) :key (lambda (x) (getf x :name)))
  +      (setf (getf info :files)
  +            (remove file-name (getf info :files)
  +                    :key (lambda (x) (getf x :name))))
  +      (write-template template-name :list info))))
  +
  +(defun template-rm (_)
  +  "Remove (delete) files from template."
  +  (let ((name (config "init.default")))
  +    (unless (and name
  +                 (not (equal name "default")))
  +      (setf name (sanitize (first _))
  +            _ (rest _)))
  +    (if (and (list-templates :filter name)
  +             (not (equal name "default")))
  +        (loop for i in _
  +              do (template-remove-file name i))
  +        (format *error-output* "template ~S is not editable.~%" name))))
  
positive.code:       (unless (and (eql 'defvar (first read/))
                     (string-equal  '*params* (second read/))) 
          (error "not init template ~S~%" (list read/)))
        (rest (third read/)))))
  
  (defun template-init (names)
    (let* ((name (sanitize (first names)))
  
negative.code:            while i
             collect (code-char i)) 'string)))
  
  (defun copy-file (src dest params)
    (declare (ignore params))
    (uiop:copy-file src dest))
  
  (defvar *template-function-plist*
    '(nil copy-file))
  
  (defun template-apply (template-name args info)
    (declare (ignorable template-name args info))
    ;; tbd rename/chmod/template/after-hook
    (dolist (i (getf info :files))
      (funcall (getf *template-function-plist* (getf i :method))
               (merge-pathnames (format nil "~A/~A" template-name (enc-string (getf i :name))) (template-path template-name))
               (print (ensure-directories-exist (merge-pathnames (getf i :name) *default-pathname-defaults*)))
               args)))
  
  (defun write-template (name &key
                                (path (template-path name))
                                list)
  