Function: ask-user-about-lock

ask-user-about-lock is an autoloaded and byte-compiled function defined in userlock.el.gz.

Signature

(ask-user-about-lock FILE OPPONENT)

Documentation

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))
    to refrain from editing the file
  return t (grab the lock on the file)
  return nil (edit the file even though it is locked).
You can redefine this function to choose among those three alternatives in any way you like.

View in manual

Source Code

;; Defined in /usr/src/emacs/lisp/userlock.el.gz
;;;###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))
    to refrain from editing the file
  return t (grab the lock on the file)
  return nil (edit the file even though it is locked).
You can redefine this function to choose among those three alternatives
in any way you like."
  (discard-input)
  (save-window-excursion
    (let (answer short-opponent short-file)
      (setq short-file
	    (if (> (length file) 22)
		(concat "..." (substring file (- (length file) 22)))
	      file))
      (setq short-opponent
	    (if (> (length opponent) 25)
		(save-match-data
		  (string-match " (pid [0-9]+)" opponent)
		  (concat (substring opponent 0 13) "..."
			  (match-string 0 opponent)))
	      opponent))
      (while (null answer)
        (message (substitute-command-keys
                  "%s locked by %s: (\\`s', \\`q', \\`p', \\`?')? ")
                 short-file short-opponent)
	(if noninteractive (error "Cannot resolve lock conflict in batch mode"))
	(let ((tem (let ((inhibit-quit t)
			 (cursor-in-echo-area t))
		     (prog1 (downcase (read-char))
                            (setq quit-flag nil)))))
	  (if (= tem help-char)
	      (ask-user-about-lock-help)
	    (setq answer (assoc tem '((?s . t)
				      (?q . yield)
				      (?\C-g . yield)
				      (?p . nil)
				      (?? . help))))
	    (cond ((null answer)
		   (beep)
                   ;; FIXME: Why do we use "?" here and "C-h" below?
                   (message (substitute-command-keys
                             "Please type \\`q', \\`s', or \\`p'; or \\`?' for help"))
		   (sit-for 3))
		  ((eq (cdr answer) 'help)
		   (ask-user-about-lock-help)
		   (setq answer nil))
		  ((eq (cdr answer) 'yield)
		   (signal 'file-locked (list file opponent)))))))
      (cdr answer))))