471 |
(and (null filename) |
(and (null filename) |
472 |
(memq mode desktop-buffer-modes-to-save)))))) |
(memq mode desktop-buffer-modes-to-save)))))) |
473 |
;; ---------------------------------------------------------------------------- |
;; ---------------------------------------------------------------------------- |
474 |
|
(defcustom desktop-relative-file-names nil |
475 |
|
"*Store relative file names in the desktop file." |
476 |
|
:type 'boolean |
477 |
|
:group 'desktop) |
478 |
|
|
479 |
(defun desktop-save (dirname) |
(defun desktop-save (dirname) |
480 |
"Save the Desktop file. Parameter DIRNAME specifies where to save desktop." |
"Save the Desktop file. Parameter DIRNAME specifies where to save desktop." |
481 |
(interactive "DDirectory to save desktop file in: ") |
(interactive "DDirectory to save desktop file in: ") |
486 |
(mapcar |
(mapcar |
487 |
(function |
(function |
488 |
(lambda (b) |
(lambda (b) |
489 |
(set-buffer b) |
(set-buffer b) |
490 |
(list |
(list |
491 |
(buffer-file-name) |
(let ((bn (buffer-file-name))) |
492 |
(buffer-name) |
(if bn |
493 |
major-mode |
(if desktop-relative-file-names |
494 |
;; minor modes |
(file-relative-name bn dirname) |
495 |
(let (ret) |
bn))) |
496 |
(mapcar |
(buffer-name) |
497 |
#'(lambda (mim) |
major-mode |
498 |
(and (boundp mim) |
;; minor modes |
499 |
(symbol-value mim) |
(let (ret) |
500 |
(setq ret |
(mapcar |
501 |
(cons (let ((special (assq mim desktop-minor-mode-table))) |
#'(lambda (mim) |
502 |
(if special |
(and (boundp mim) |
503 |
(cadr special) |
(symbol-value mim) |
504 |
mim)) |
(setq ret |
505 |
ret)))) |
(cons (let ((special (assq mim desktop-minor-mode-table))) |
506 |
(mapcar #'car minor-mode-alist)) |
(if special |
507 |
ret) |
(cadr special) |
508 |
(point) |
mim)) |
509 |
(list (mark t) mark-active) |
ret)))) |
510 |
buffer-read-only |
(mapcar #'car minor-mode-alist)) |
511 |
(run-hook-with-args-until-success |
ret) |
512 |
'desktop-buffer-misc-functions) |
(point) |
513 |
(let ((locals desktop-locals-to-save) |
(list (mark t) mark-active) |
514 |
(loclist (buffer-local-variables)) |
buffer-read-only |
515 |
(ll)) |
(run-hook-with-args-until-success |
516 |
(while locals |
'desktop-buffer-misc-functions) |
517 |
(let ((here (assq (car locals) loclist))) |
(let ((locals desktop-locals-to-save) |
518 |
(if here |
(loclist (buffer-local-variables)) |
519 |
(setq ll (cons here ll)) |
(ll)) |
520 |
(if (member (car locals) loclist) |
(while locals |
521 |
(setq ll (cons (car locals) ll))))) |
(let ((here (assq (car locals) loclist))) |
522 |
(setq locals (cdr locals))) |
(if here |
523 |
ll) |
(setq ll (cons here ll)) |
524 |
))) |
(if (member (car locals) loclist) |
525 |
|
(setq ll (cons (car locals) ll))))) |
526 |
|
(setq locals (cdr locals))) |
527 |
|
ll) |
528 |
|
))) |
529 |
(buffer-list)))) |
(buffer-list)))) |
530 |
(buf (get-buffer-create "*desktop*"))) |
(buf (get-buffer-create "*desktop*"))) |
531 |
(set-buffer buf) |
(set-buffer buf) |
546 |
(insert "\n;; Buffer section:\n") |
(insert "\n;; Buffer section:\n") |
547 |
(mapcar |
(mapcar |
548 |
(function (lambda (l) |
(function (lambda (l) |
549 |
(if (apply 'desktop-save-buffer-p l) |
(if (apply 'desktop-save-buffer-p l) |
550 |
(progn |
(progn |
551 |
(insert desktop-create-buffer-form) |
(insert desktop-create-buffer-form) |
552 |
(mapcar |
(mapcar |
553 |
(function (lambda (e) |
(function (lambda (e) |
554 |
(insert "\n " |
(insert "\n " |
555 |
(desktop-value-to-string e)))) |
(desktop-value-to-string e)))) |
556 |
l) |
l) |
557 |
(insert ")\n\n"))))) |
(insert ")\n\n"))))) |
558 |
info) |
info) |
559 |
(setq default-directory dirname) |
(setq default-directory dirname) |
560 |
(if (file-exists-p filename) (delete-file filename)) |
(if (file-exists-p filename) (delete-file filename)) |