X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4837b516ea56c6cc2b3ce823b04078b10b2defc6..5109429f09110cd817d87e1c361ac66aaee28431:/lisp/userlock.el diff --git a/lisp/userlock.el b/lisp/userlock.el index 8e4a6753a3..4ad96eb41c 100644 --- a/lisp/userlock.el +++ b/lisp/userlock.el @@ -1,17 +1,17 @@ ;;; userlock.el --- handle file access contention between multiple users -;; Copyright (C) 1985, 1986, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 1985-1986, 2001-2013 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: internal +;; Package: emacs ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,9 +19,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -93,8 +91,7 @@ You can teal the file; the other user becomes the intruder if (s)he ever unmodifies the file and then changes it again. You can

roceed; you edit at your own (and the other user's) risk. You can uit; don't modify this file.") - (save-excursion - (set-buffer standard-output) + (with-current-buffer standard-output (help-mode)))) (put @@ -111,37 +108,27 @@ You can rewrite this to use any criterion you like to choose which one to do. The buffer in question is current when this function is called." (discard-input) (save-window-excursion - (let (answer) + (let ((prompt + (format "%s changed on disk; \ +really edit the buffer? (y, n, r or C-h) " + (file-name-nondirectory fn))) + (choices '(?y ?n ?r ?? ?\C-h)) + answer) (while (null answer) - (message "%s changed on disk; really edit the buffer? (y, n, r or C-h) " - (file-name-nondirectory fn)) - (let ((tem (downcase (let ((cursor-in-echo-area t)) - (read-char-exclusive))))) - (setq answer - (if (= tem help-char) - 'help - (cdr (assoc tem '((?n . yield) - (?\C-g . yield) - (?y . proceed) - (?r . revert) - (?? . help)))))) - (cond ((null answer) - (beep) - (message "Please type y, n or r; or ? for help") - (sit-for 3)) - ((eq answer 'help) - (ask-user-about-supersession-help) - (setq answer nil)) - ((eq answer 'revert) - (revert-buffer nil (not (buffer-modified-p))) - ; ask confirmation if buffer modified - (signal 'file-supersession - (list "File reverted" fn))) - ((eq answer 'yield) - (signal 'file-supersession - (list "File changed on disk" fn)))))) + (setq answer (read-char-choice prompt choices)) + (cond ((memq answer '(?? ?\C-h)) + (ask-user-about-supersession-help) + (setq answer nil)) + ((eq answer ?r) + ;; Ask for confirmation if buffer modified + (revert-buffer nil (not (buffer-modified-p))) + (signal 'file-supersession + (list "File reverted" fn))) + ((eq answer ?n) + (signal 'file-supersession + (list "File changed on disk" fn))))) (message - "File on disk now will become a backup file if you save these changes.") + "File on disk now will become a backup file if you save these changes.") (setq buffer-backed-up nil)))) (defun ask-user-about-supersession-help () @@ -157,9 +144,7 @@ If you say `n', the change you started to make will be aborted. Usually, you should type `n' and then `M-x revert-buffer', to get the latest version of the file, then make the change again.") - (save-excursion - (set-buffer standard-output) + (with-current-buffer standard-output (help-mode)))) -;;; arch-tag: a61c5b60-e1c8-44fd-894a-c617f4dfc639 ;;; userlock.el ends here