|
From: | Hauke Rehfeld |
Subject: | bug#46374: Regression: erronous calls to PRED switch major-mode of unrelated modified buffers |
Date: | Mon, 30 Aug 2021 13:43:23 +0200 |
User-agent: | mu4e 1.6.3; emacs 28.0.50 |
I'm way not deep enough into this issue, but how about using a temp buffer and checking for major mode equivalent (can pred ever reasonably be fundamental-mode?): ;; 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)))) ;; don't use the result of `pred' if it returns the current buffer major-mode (with-temp-buffer (let ((pred-fun (funcall pred))) (when (and (functionp pred-fun) (not (eq major-mode pred-fun))) (setq pred pred-fun))))) Juri Linkov <juri@linkov.net> 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): (defcustom save-some-buffers-default-predicate nil :type '(choice (const :tag "Default" nil) (function :tag "Only in subdirs of root" (save-some-buffers-root)) Then the following two calls both will have exactly the same effect: (save-some-buffers t '(save-some-buffers-root)) (save-some-buffers t (save-some-buffers-root))
[Prev in Thread] | Current Thread | [Next in Thread] |