- (let ((car-q.txt (desktop-internal-v2s (car val)))
- (cdr-q.txt (desktop-internal-v2s (cdr val))))
- (cond
- ((or (null (car car-q.txt)) (null (car cdr-q.txt)))
- (cons nil (concat "(cons "
- (if (eq (car car-q.txt) 'must) "'")
- (cdr car-q.txt) " "
- (if (eq (car cdr-q.txt) 'must) "'")
- (cdr cdr-q.txt) ")")))
- ((consp (cdr val))
- (cons 'must (concat "(" (cdr car-q.txt)
- " " (substring (cdr cdr-q.txt) 1 -1) ")")))
- ((null (cdr val))
- (cons 'must (concat "(" (cdr car-q.txt) ")")))
- (t
- (cons 'must (concat "(" (cdr car-q.txt) " . " (cdr cdr-q.txt) ")"))))))
+ (let ((p val)
+ newlist
+ use-list*
+ anynil)
+ (while (consp p)
+ (let ((q.txt (desktop-internal-v2s (car p))))
+ (or anynil (setq anynil (null (car q.txt))))
+ (setq newlist (cons q.txt newlist)))
+ (setq p (cdr p)))
+ (if p
+ (let ((last (desktop-internal-v2s p))
+ (el (car newlist)))
+ (or anynil (setq anynil (null (car last))))
+ (or anynil
+ (setq newlist (cons '(must . ".") newlist)))
+ (setq use-list* t)
+ (setq newlist (cons last newlist))))
+ (setq newlist (nreverse newlist))
+ (if anynil
+ (cons nil
+ (concat (if use-list* "(desktop-list* " "(list ")
+ (mapconcat (lambda (el)
+ (if (eq (car el) 'must)
+ (concat "'" (cdr el))
+ (cdr el)))
+ newlist
+ " ")
+ ")"))
+ (cons 'must
+ (concat "(" (mapconcat 'cdr newlist " ") ")")))))