]> code.delx.au - gnu-emacs/blobdiff - lisp/userlock.el
CC Mode: truncate the semi-nonlit cache when applying syntax-table to a quote
[gnu-emacs] / lisp / userlock.el
index 84b5c47e71b492729d6173c755e416825b99743c..a0c55fd1e13433ca7c9e8070cac20cc91e75fbd0 100644 (file)
@@ -1,10 +1,12 @@
 ;;; userlock.el --- handle file access contention between multiple users
 
-;; Copyright (C) 1985, 1986, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2016 Free Software Foundation, Inc.
 
-;; Maintainer: FSF
+;; Author: Richard King
+;; (according to authors.el)
+;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
+;; Package: emacs
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Code:
 
-(put 'file-locked 'error-conditions '(file-locked file-error error))
-(put 'file-locked 'error-message "File is locked")
+(define-error 'file-locked "File is locked" 'file-error)
 
 ;;;###autoload
 (defun ask-user-about-lock (file opponent)
   "Ask user what to do when he wants to edit FILE but it is locked by OPPONENT.
 This function has a choice of three things to do:
-  do (signal 'file-locked (list FILE OPPONENT))
+  do (signal \\='file-locked (list FILE OPPONENT))
     to refrain from editing the file
   return t (grab the lock on the file)
   return nil (edit the file even though it is locked).
@@ -94,51 +95,40 @@ You can <q>uit; don't modify this file.")
     (with-current-buffer standard-output
       (help-mode))))
 
-(put
- 'file-supersession 'error-conditions '(file-supersession file-error error))
+(define-error 'file-supersession nil 'file-error)
 
 ;;;###autoload
 (defun ask-user-about-supersession-threat (fn)
   "Ask a user who is about to modify an obsolete buffer what to do.
 This function has two choices: it can return, in which case the modification
-of the buffer will proceed, or it can (signal 'file-supersession (file)),
+of the buffer will proceed, or it can (signal \\='file-supersession (file)),
 in which case the proposed buffer modification will not be made.
 
 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 ()
@@ -152,10 +142,9 @@ If you say `r' to revert, the contents of the buffer are refreshed
 from the file on disk.
 If you say `n', the change you started to make will be aborted.
 
-Usually, you should type `n' and then `M-x revert-buffer',
+Usually, you should type `n' and then `\\[revert-buffer]',
 to get the latest version of the file, then make the change again.")
     (with-current-buffer standard-output
       (help-mode))))
 
-;; arch-tag: a61c5b60-e1c8-44fd-894a-c617f4dfc639
 ;;; userlock.el ends here