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.
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))))