From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#16630: desktop-auto-save seems confusing Date: Tue, 04 Feb 2014 09:50:19 +0200 Organization: JURTA Message-ID: <87a9e7wc3o.fsf@mail.jurta.org> References: <24d2j4vds1.fsf@fencepost.gnu.org> <87zjm8bmpt.fsf@mail.jurta.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1391500703 4300 80.91.229.3 (4 Feb 2014 07:58:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 4 Feb 2014 07:58:23 +0000 (UTC) Cc: 16630@debbugs.gnu.org To: Glenn Morris Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Feb 04 08:58:30 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WAatn-00016R-8L for geb-bug-gnu-emacs@m.gmane.org; Tue, 04 Feb 2014 08:58:27 +0100 Original-Received: from localhost ([::1]:51222 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WAatm-0001A6-T1 for geb-bug-gnu-emacs@m.gmane.org; Tue, 04 Feb 2014 02:58:26 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:45450) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WAatW-0000oz-NU for bug-gnu-emacs@gnu.org; Tue, 04 Feb 2014 02:58:16 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WAatQ-0003Vm-Nx for bug-gnu-emacs@gnu.org; Tue, 04 Feb 2014 02:58:10 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34692) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WAatQ-0003Vi-K8 for bug-gnu-emacs@gnu.org; Tue, 04 Feb 2014 02:58:04 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1WAatP-0002WF-V2 for bug-gnu-emacs@gnu.org; Tue, 04 Feb 2014 02:58:04 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 04 Feb 2014 07:58:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16630 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 16630-submit@debbugs.gnu.org id=B16630.13915006729650 (code B ref 16630); Tue, 04 Feb 2014 07:58:03 +0000 Original-Received: (at 16630) by debbugs.gnu.org; 4 Feb 2014 07:57:52 +0000 Original-Received: from localhost ([127.0.0.1]:48708 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WAatC-0002VY-Rd for submit@debbugs.gnu.org; Tue, 04 Feb 2014 02:57:51 -0500 Original-Received: from [69.163.184.122] (port=39305 helo=ps18281.dreamhostps.com) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WAat9-0002VH-K5 for 16630@debbugs.gnu.org; Tue, 04 Feb 2014 02:57:49 -0500 Original-Received: from localhost.jurta.org (ps18281.dreamhostps.com [69.163.184.122]) by ps18281.dreamhostps.com (Postfix) with ESMTP id EF89037415EA83; Mon, 3 Feb 2014 23:57:47 -0800 (PST) In-Reply-To: (Glenn Morris's message of "Mon, 03 Feb 2014 21:47:53 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:84547 Archived-At: > emacs -Q > M-x desktop-save-mode RET > M-x desktop-save RET /tmp RET > C-h v desktop-auto-save-timer > -> still nil, still no auto-save > > As I said, nothing enables desktop-auto-save except after-init-hook. > > Whereas if I happen to customize desktop-auto-save-timeout, suddenly it > will start auto-saving. This doesn't make much sense. Yes, definitely `desktop-auto-save-set-timer' have to be called in every place that changes one of the preconditions of `desktop-auto-save' to save the desktop: (when (and desktop-save-mode (integerp desktop-auto-save-timeout) (> desktop-auto-save-timeout 0) ;; Avoid desktop saving during lazy loading. (not desktop-lazy-timer) ;; Save only to own desktop file. (eq (emacs-pid) (desktop-owner)) desktop-dirname) Here changes in the value of `desktop-auto-save-timeout' are handled already by :set in its defcustom, `desktop-lazy-timer' quickly becomes nil after reading the existing desktop. So what remains to do is to activate the timer when the value of `desktop-dirname' changes from nil to non-nil. This happens in two commands `desktop-read' and `desktop-save'. In the following patch `desktop-read' and `desktop-save' will activate the auto-saving timer (its call from `after-init-hook' is removed because it will be handled by `desktop-read'). Also the condition (eq (emacs-pid) (desktop-owner)) depends on bug#16157. If it claims the lock only in `desktop-read' and `desktop-save' then no more calls for `desktop-auto-save-set-timer' are necessary. === modified file 'lisp/desktop.el' --- lisp/desktop.el 2014-01-01 07:43:34 +0000 +++ lisp/desktop.el 2014-02-04 07:48:37 +0000 @@ -1012,7 +1012,10 @@ (defun desktop-save (dirname &optional r (write-region (point-min) (point-max) (desktop-full-file-name) nil 'nomessage)) (setq desktop-file-checksum checksum) ;; We remember when it was modified (which is presumably just now). - (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name))))))))))) + (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name)))))))))) + ;; When the desktop is saved not by auto-saving, activate the auto-saving timer. + (unless auto-save + (desktop-auto-save-set-timer))) ;; ---------------------------------------------------------------------------- ;;;###autoload @@ -1103,5 +1106,8 @@ (defun desktop-read (&optional dirname) ;; Evaluate desktop buffer and remember when it was modified. (load (desktop-full-file-name) t t t) (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name)))) + ;; Activate the auto-saving timer after setting + ;; `desktop-dirname' and `desktop-file-modtime'. + (desktop-auto-save-set-timer) ;; If it wasn't already, mark it as in-use, to bother other ;; desktop instances. (unless owner @@ -1468,7 +1474,6 @@ (add-hook (setq desktop-save-mode nil))) (when desktop-save-mode (desktop-read) - (desktop-auto-save-set-timer) (setq inhibit-startup-screen t)))) > (Also, I guess the ignore-errors in the :set of desktop-auto-save-timeout > isn't really needed, rather an :initialize is.) Without ignore-errors, after doing emacs -Q M-x desktop-save-mode RET it fails with Debugger entered--Lisp error: (void-function desktop-auto-save-set-timer) desktop-auto-save-set-timer() custom-initialize-reset(desktop-auto-save-timeout ...) custom-declare-variable(desktop-auto-save-timeout ...) byte-code(...) autoload-do-load((autoload "desktop" 870431 t nil) desktop-save-mode) command-execute(desktop-save-mode record) execute-extended-command(nil "desktop-save-mode") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command)