581 |
"Save the Desktop file. Parameter DIRNAME specifies where to save desktop." |
"Save the Desktop file. Parameter DIRNAME specifies where to save desktop." |
582 |
(interactive "DDirectory to save desktop file in: ") |
(interactive "DDirectory to save desktop file in: ") |
583 |
(run-hooks 'desktop-save-hook) |
(run-hooks 'desktop-save-hook) |
584 |
|
(setq dirname (file-name-as-directory (expand-file-name dirname))) |
585 |
(save-excursion |
(save-excursion |
586 |
(let ((filename (expand-file-name desktop-base-file-name dirname)) |
(let ((filename (concat dirname desktop-base-file-name)) |
587 |
(info |
(info |
588 |
(mapcar |
(mapcar |
589 |
(function |
(function |
590 |
(lambda (b) |
(lambda (b) |
591 |
(set-buffer b) |
(set-buffer b) |
592 |
(list |
(list |
593 |
(desktop-file-name (buffer-file-name) dirname) |
(desktop-file-name (buffer-file-name) dirname) |
594 |
(buffer-name) |
(buffer-name) |
595 |
major-mode |
major-mode |
596 |
;; minor modes |
;; minor modes |
597 |
(let (ret) |
(let (ret) |
598 |
(mapcar |
(mapcar |
599 |
#'(lambda (mim) |
#'(lambda (mim) |
600 |
(and |
(and |
601 |
(boundp mim) |
(boundp mim) |
602 |
(symbol-value mim) |
(symbol-value mim) |
603 |
(setq |
(setq ret |
604 |
ret |
(cons |
605 |
(cons |
(let ((special (assq mim desktop-minor-mode-table))) |
606 |
(let ( |
(if special (cadr special) mim)) |
607 |
(special (assq mim desktop-minor-mode-table)) |
ret)))) |
608 |
) |
(mapcar #'car minor-mode-alist)) |
609 |
(if special (cadr special) mim)) |
ret) |
610 |
ret)))) |
(point) |
611 |
(mapcar #'car minor-mode-alist)) |
(list (mark t) mark-active) |
612 |
ret) |
buffer-read-only |
613 |
(point) |
(run-hook-with-args-until-success 'desktop-buffer-misc-functions) |
614 |
(list (mark t) mark-active) |
(let ((locals desktop-locals-to-save) |
615 |
buffer-read-only |
(loclist (buffer-local-variables)) |
616 |
(run-hook-with-args-until-success 'desktop-buffer-misc-functions) |
(ll)) |
617 |
(let ( |
(while locals |
618 |
(locals desktop-locals-to-save) |
(let ((here (assq (car locals) loclist))) |
619 |
(loclist (buffer-local-variables)) |
(if here |
620 |
(ll) |
(setq ll (cons here ll)) |
621 |
) |
(when (member (car locals) loclist) |
622 |
(while locals |
(setq ll (cons (car locals) ll))))) |
623 |
(let ((here (assq (car locals) loclist))) |
(setq locals (cdr locals))) |
624 |
(if here |
ll)))) |
625 |
(setq ll (cons here ll)) |
(buffer-list))) |
626 |
(when (member (car locals) loclist) |
(buf (get-buffer-create "*desktop*"))) |
|
(setq ll (cons (car locals) ll))))) |
|
|
(setq locals (cdr locals))) |
|
|
ll)))) |
|
|
(buffer-list))) |
|
|
(buf (get-buffer-create "*desktop*"))) |
|
627 |
(set-buffer buf) |
(set-buffer buf) |
628 |
(erase-buffer) |
(erase-buffer) |
629 |
|
|
691 |
(setq desktop-dirname (and dirs (expand-file-name (car dirs)))) |
(setq desktop-dirname (and dirs (expand-file-name (car dirs)))) |
692 |
(if desktop-dirname |
(if desktop-dirname |
693 |
(let ((desktop-first-buffer nil)) |
(let ((desktop-first-buffer nil)) |
694 |
;; `desktop-create-buffer' sets `desktop-first-buffer' to the first |
;; Evaluate desktop buffer. |
|
;; buffer in the desktop file (the last for desktop files written |
|
|
;; by desktop version prior to 206). |
|
695 |
(load (expand-file-name desktop-base-file-name desktop-dirname) t t t) |
(load (expand-file-name desktop-base-file-name desktop-dirname) t t t) |
696 |
(when desktop-first-buffer (switch-to-buffer desktop-first-buffer)) |
;; `desktop-create-buffer' puts buffers at end of the buffer list. |
697 |
|
;; We want buffers existing prior to evaluating the desktop (and not reused) |
698 |
|
;; to be placed at the end of the buffer list, so we move them here. |
699 |
|
(mapcar 'bury-buffer |
700 |
|
(nreverse (cdr (memq desktop-first-buffer (nreverse (buffer-list)))))) |
701 |
|
(switch-to-buffer (car (buffer-list))) |
702 |
(run-hooks 'desktop-delay-hook) |
(run-hooks 'desktop-delay-hook) |
703 |
(setq desktop-delay-hook nil) |
(setq desktop-delay-hook nil) |
704 |
(run-hooks 'desktop-after-read-hook) |
(run-hooks 'desktop-after-read-hook) |
884 |
(setq result (funcall handler)) |
(setq result (funcall handler)) |
885 |
(setq hlist (cdr hlist))) |
(setq hlist (cdr hlist))) |
886 |
(unless (bufferp result) (setq result nil)) |
(unless (bufferp result) (setq result nil)) |
887 |
|
;; Restore buffer list order with new buffer at end. Don't change |
888 |
|
;; the order for old desktop files (old desktop module behaviour). |
889 |
(unless (< desktop-file-version 206) |
(unless (< desktop-file-version 206) |
890 |
(when result (setq buffer-list (cons result buffer-list))) |
(mapcar 'bury-buffer buffer-list) |
891 |
(mapcar 'bury-buffer buffer-list)) |
(when result (bury-buffer result))) |
892 |
(when result |
(when result |
893 |
(if (< desktop-file-version 206) |
(unless (or desktop-first-buffer (< desktop-file-version 206)) |
894 |
(setq desktop-first-buffer result) |
(setq desktop-first-buffer result)) |
|
(bury-buffer result)) |
|
|
(unless desktop-first-buffer (setq desktop-first-buffer result)) |
|
895 |
(set-buffer result) |
(set-buffer result) |
896 |
(unless (equal (buffer-name) desktop-buffer-name) |
(unless (equal (buffer-name) desktop-buffer-name) |
897 |
(rename-buffer desktop-buffer-name)) |
(rename-buffer desktop-buffer-name)) |