From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juanma Barranquero Newsgroups: gmane.emacs.bugs Subject: bug#11017: 24.0.94; emacs-lock--kill-emacs-query-functions should ding Date: Tue, 10 Apr 2012 16:33:47 +0200 Message-ID: References: <86mx7i79lb.fsf@web.de> <86obrxuz7p.fsf@web.de> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: dough.gmane.org 1334068522 10818 80.91.229.3 (10 Apr 2012 14:35:22 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 10 Apr 2012 14:35:22 +0000 (UTC) Cc: 11017@debbugs.gnu.org To: Michael Heerdegen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Apr 10 16:35:20 2012 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 1SHcAB-0002Js-5M for geb-bug-gnu-emacs@m.gmane.org; Tue, 10 Apr 2012 16:35:19 +0200 Original-Received: from localhost ([::1]:32954 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SHcAA-0000dd-Fm for geb-bug-gnu-emacs@m.gmane.org; Tue, 10 Apr 2012 10:35:18 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:43534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SHcA0-0000Zr-9K for bug-gnu-emacs@gnu.org; Tue, 10 Apr 2012 10:35:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SHc9t-0004aA-Nz for bug-gnu-emacs@gnu.org; Tue, 10 Apr 2012 10:35:07 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:52453) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SHc9t-0004Wz-Hz for bug-gnu-emacs@gnu.org; Tue, 10 Apr 2012 10:35:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1SHcAs-0001t5-Ep for bug-gnu-emacs@gnu.org; Tue, 10 Apr 2012 10:36:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Juanma Barranquero Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 10 Apr 2012 14:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11017 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 11017-submit@debbugs.gnu.org id=B11017.13340685337209 (code B ref 11017); Tue, 10 Apr 2012 14:36:02 +0000 Original-Received: (at 11017) by debbugs.gnu.org; 10 Apr 2012 14:35:33 +0000 Original-Received: from localhost ([127.0.0.1]:48991 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SHcAO-0001sD-UJ for submit@debbugs.gnu.org; Tue, 10 Apr 2012 10:35:33 -0400 Original-Received: from mail-pb0-f44.google.com ([209.85.160.44]:57298) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SHcAM-0001s4-R2 for 11017@debbugs.gnu.org; Tue, 10 Apr 2012 10:35:31 -0400 Original-Received: by pbbrq13 with SMTP id rq13so37368pbb.3 for <11017@debbugs.gnu.org>; Tue, 10 Apr 2012 07:34:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=nIAYZuK5iym3m2PfEfwPP+xOCFPZOl/ExaZ6qqWHJ/c=; b=K6mll2NGBC1iQDA+AhD85/52lZ7i2CddXD87dveptyb4QFjsxTrxz/DZGi7ZuDmZss dRyOe+n4AOvhGIBR/IxqMmtz6PyuSe5/uBVT+YJDi55Fmd3ndAkUbou87mbDrmN4lpVh fQ9udFlzApCirZ4pKClW7G2/KafNSSSu0NZQq5iXqKN88/Wl6zacITSA7fryYcLyIQtX WTxCWksqZvIhpJfkWBeWgPZQYpJNk+jbW/uwoa8BAmhv3QyUruag4XilPSTBVHO9q10M lwVivkScbXK7Hx4QZBlDiywitRRr6Mapsd1NI0OOicIbF943KjIOPn3AQY+TLv/elUjn 1tvA== Original-Received: by 10.68.221.74 with SMTP id qc10mr6463393pbc.80.1334068468334; Tue, 10 Apr 2012 07:34:28 -0700 (PDT) Original-Received: by 10.142.204.14 with HTTP; Tue, 10 Apr 2012 07:33:47 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) 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:58694 Archived-At: On Mon, Mar 19, 2012 at 10:04, Juanma Barranquero wrote: > Agreed. I have a patch to add a hook, so the user can add ding, or > pop-to-buffer, or do whatever s/he wants. I think that suffices. I'll > send it to this bug's thread. Michael, this patch adds the hook described above. Could you please test it and see whether it works for you use case? As for the note option, I'm thinking about unobtrusive ways to add it. =C2=A0 =C2=A0 Juanma =3D=3D=3D modified file 'lisp/emacs-lock.el' --- lisp/emacs-lock.el 2012-01-11 07:48:55 +0000 +++ lisp/emacs-lock.el 2012-04-10 14:28:22 +0000 @@ -81,6 +81,13 @@ :group 'emacs-lock :version "24.1") +(defcustom emacs-lock-locked-buffer-hook nil + "Abnormal hook run when Emacs Lock prevents exiting Emacs, or killing a buffer. +The functions get one argument, the first locked buffer found." + :type 'hook + :group 'emacs-lock + :version "24.2") + (defvar emacs-lock-mode nil "If non-nil, the current buffer is locked. It can be one of the following values: @@ -119,40 +126,45 @@ (or (eq unlock 'all) (eq unlock action)))))) (defun emacs-lock--exit-locked-buffer () - "Return the name of the first exit-locked buffer found." + "Return the first exit-locked buffer found." (save-current-buffer (catch :found (dolist (buffer (buffer-list)) (set-buffer buffer) (unless (or (emacs-lock--can-auto-unlock 'exit) (memq emacs-lock-mode '(nil kill))) - (throw :found (buffer-name)))) + (throw :found buffer))) nil))) (defun emacs-lock--kill-emacs-hook () "Signal an error if any buffer is exit-locked. Used from `kill-emacs-hook' (which see)." - (let ((buffer-name (emacs-lock--exit-locked-buffer))) - (when buffer-name - (error "Emacs cannot exit because buffer %S is locked" buffer-name))= )) + (let ((locked (emacs-lock--exit-locked-buffer))) + (when locked + (run-hook-with-args 'emacs-lock-locked-buffer-hook locked) + (error "Emacs cannot exit because buffer %S is locked" + (buffer-name locked))))) (defun emacs-lock--kill-emacs-query-functions () "Display a message if any buffer is exit-locked. Return a value appropriate for `kill-emacs-query-functions' (which see)." (let ((locked (emacs-lock--exit-locked-buffer))) - (or (not locked) - (progn - (message "Emacs cannot exit because buffer %S is locked" locked) - nil)))) + (if (not locked) + t + (run-hook-with-args 'emacs-lock-locked-buffer-hook locked) + (message "Emacs cannot exit because buffer %S is locked" + (buffer-name locked)) + nil))) (defun emacs-lock--kill-buffer-query-functions () "Display a message if the current buffer is kill-locked. Return a value appropriate for `kill-buffer-query-functions' (which see)." - (or (emacs-lock--can-auto-unlock 'kill) - (memq emacs-lock-mode '(nil exit)) - (progn - (message "Buffer %S is locked and cannot be killed" (buffer-name)) - nil))) + (if (or (emacs-lock--can-auto-unlock 'kill) + (memq emacs-lock-mode '(nil exit))) + t + (run-hook-with-args 'emacs-lock-locked-buffer-hook (current-buffer)) + (message "Buffer %S is locked and cannot be killed" (buffer-name)) + nil)) (defun emacs-lock--set-mode (mode arg) "Setter function for `emacs-lock-mode'."