From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tino Calancha Newsgroups: gmane.emacs.bugs Subject: bug#46374: 28.0.50; Ask me to save buffers only if they are under callers dir Date: Sun, 05 Sep 2021 12:09:26 +0200 Message-ID: <87ilzfuyeh.fsf_-_@gmail.com> References: <878s7z4ihk.fsf@gmail.com> <87r1ecilqn.fsf@haukerehfeld.de> <87a6l0cjyj.fsf@mail.linkov.net> <87bl5f1lbn.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="19284"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: 46374@debbugs.gnu.org, Hauke Rehfeld , Stefan Monnier To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Sep 05 12:13:29 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mMp9U-0004p4-Ri for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 05 Sep 2021 12:13:28 +0200 Original-Received: from localhost ([::1]:42984 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mMp9T-0003lY-QT for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 05 Sep 2021 06:13:27 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:45130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMp6A-0000EI-65 for bug-gnu-emacs@gnu.org; Sun, 05 Sep 2021 06:10:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:37765) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mMp69-00014d-Uu for bug-gnu-emacs@gnu.org; Sun, 05 Sep 2021 06:10:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mMp69-0006YP-Pl for bug-gnu-emacs@gnu.org; Sun, 05 Sep 2021 06:10:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tino Calancha Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 05 Sep 2021 10:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46374 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: fixed Original-Received: via spool by 46374-submit@debbugs.gnu.org id=B46374.163083657525156 (code B ref 46374); Sun, 05 Sep 2021 10:10:01 +0000 Original-Received: (at 46374) by debbugs.gnu.org; 5 Sep 2021 10:09:35 +0000 Original-Received: from localhost ([127.0.0.1]:49311 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMp5j-0006Xg-Jz for submit@debbugs.gnu.org; Sun, 05 Sep 2021 06:09:35 -0400 Original-Received: from mail-wr1-f41.google.com ([209.85.221.41]:34776) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMp5h-0006XP-Sk for 46374@debbugs.gnu.org; Sun, 05 Sep 2021 06:09:34 -0400 Original-Received: by mail-wr1-f41.google.com with SMTP id m9so5201312wrb.1 for <46374@debbugs.gnu.org>; Sun, 05 Sep 2021 03:09:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=G2lhCLdVzrwHaV204jJuK6OBpRIYDmJw4Xl3Zcg8nZU=; b=T+E+NAsx4mNLtDYwnxXWsb8SryaJyCIT8KUJPoUqCacfw8+eTgKBbTjZ3F4LxXtfqQ WtuQtPRngGKo07QdPM1KrNp/3Ppmfo1Oll2yP9t3MT+IbPCJF7gp75GJ6HI17MojK8L/ I0azGERIHHKKRePBVUnhz26u1RwXjEjpfgV9G8kjvsYT9GpkTqZ2wC0/7kKjraP1LSGx 2JIdCv1x4GHZXMCe0/Dg9e+5U2+qclS22blxZmoq8Ehw6HUDZiTCsyBKvzNbupXkliue agciqpOqTrXJOtVNLT9IGYOnFp2DufuOf2JPTRNxu1hwE9KP8nyrlI6uik4PbuAFZe6g u72Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=G2lhCLdVzrwHaV204jJuK6OBpRIYDmJw4Xl3Zcg8nZU=; b=BqN4jypiydoDUl2dgTCT+arCpKxiq5TMuG5UY9r628ALkXe52tsmq14/p9Cs6/Dr5i owrxfMY9VAVnHkeW+ILsQMa2G86lBouS6kzvEoAqYOwRszI2VysBDZhLnQtptsxLfC6k IezSE8hwXsIAf5NGnUBqyLqdg6A9awDuDFFegclfHuGjeV30hiNjKTxyEmJjSknhVNzt W/sY0CidE2GaWA/Zc3pdrhC5jpP/Oqel5bB10TjJfSAT96YXek3pCLuvPN6PJnMxDPQ5 +vUvIXbKETDf8eTFqsKTvgH7ca6VtEOdw8fbPIbUZ6i/TcS+j28UPG5/T3hH/HgupNgm eYqw== X-Gm-Message-State: AOAM533tI7fkPlCDWQ6pQssIzzCSIH6LcfYwdHWaMn+Y5F9YOuxWVVDQ hNx1dih1i6WubUMcOLOGvVUgAMYCIYsaQQ== X-Google-Smtp-Source: ABdhPJxoOvEtpRsLOqO1hZolYR8YhgBceB6Nm2TYbpsx+Dsy822E1AWtvPmABtQZY1A9JKesJ0iEuw== X-Received: by 2002:a5d:440d:: with SMTP id z13mr8186165wrq.216.1630836568041; Sun, 05 Sep 2021 03:09:28 -0700 (PDT) Original-Received: from localhost.example.com ([31.7.242.222]) by smtp.gmail.com with ESMTPSA id a6sm4301849wmb.7.2021.09.05.03.09.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Sep 2021 03:09:27 -0700 (PDT) In-Reply-To: <87bl5f1lbn.fsf@mail.linkov.net> (Juri Linkov's message of "Mon, 30 Aug 2021 10:28:36 +0300") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:213496 Archived-At: Juri Linkov writes: >> This means we need to invent some ad-hoc format to distinguish between >> these cases. For example, to create a lexically-bound predicate >> at the beginning, it could be called with e.g. >> >> (save-some-buffers t '(eval . save-some-buffers-root)) >> >> and defcustom will look like: >> >> (defcustom save-some-buffers-default-predicate nil >> :type '(choice (const :tag "Default" nil) >> (function :tag "Only in subdirs of root" >> (eval . save-some-buffers-root)) >> (function :tag "Custom function")) > > Or maybe simply '(save-some-buffers-root): Hi Juri! Being able to set `save-some-buffers-root' as the value of `save-some-buffers-default-predicate' is easy for users. The problem I see is that it hides the real nature of `save-some-buffers-root': - it's not a predicate (as the docstring of `save-some-buffers-default-predicate' suggests). - it's a function generating the default predicate. We can make the distinction (default predicate <-> func generating a default predicate) more clear if we put the generating functions in a list. Then, we can restrict the allowed pred-fun to the elements inside such a list. I have played today with this quick-and-dirty patch: How do you think? --8<-----------------------------cut here---------------start------------->8--- diff --git a/lisp/files.el b/lisp/files.el index 7e4bdab507..91582ec9b0 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -5731,6 +5731,13 @@ save-some-buffers-action-alist (defvar-local buffer-save-without-query nil "Non-nil means `save-some-buffers' should save this buffer without asking.") +(defvar save-some-buffers-fn-generating-pred '(save-some-buffers-root) + "List of supported functions to generate a default predicate for `save-some-buffers'. +Each element is a function with no arguments that returns a predicate +suitable for `save-some-buffers'. +You can use any of these functions as the value of +`save-some-buffers-default-predicate'.") + (defcustom save-some-buffers-default-predicate nil "Default predicate for `save-some-buffers'. @@ -5789,7 +5796,8 @@ save-some-buffers (setq pred save-some-buffers-default-predicate)) ;; Allow `pred' to be a function that returns a predicate ;; with lexical bindings in its original environment (bug#46374). - (let ((pred-fun (and (functionp pred) (funcall pred)))) + (let ((pred-fun (and (memq pred save-some-buffers-fn-generating-pred) + (funcall pred)))) (when (functionp pred-fun) (setq pred pred-fun))) (let* ((switched-buffer nil) --8<-----------------------------cut here---------------end--------------->8---