[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master b4b1bd6: Hide obsolete options in most customize commands
From: |
Stefan Kangas |
Subject: |
master b4b1bd6: Hide obsolete options in most customize commands |
Date: |
Fri, 20 Nov 2020 08:34:05 -0500 (EST) |
branch: master
commit b4b1bd6e03d739871dd3ba51e8de0be2d272b766
Author: Stefan Kangas <stefan@marxist.se>
Commit: Stefan Kangas <stefan@marxist.se>
Hide obsolete options in most customize commands
* lisp/cus-edit.el (custom--filter-obsolete-variables): New defun.
* lisp/cus-edit.el (customize-changed-options)
(customize-apropos, custom-group-value-create): Hide obsolete user
options. (Bug#44598)
* test/lisp/cus-edit-tests.el: New file.
---
etc/NEWS | 10 ++++++
lisp/cus-edit.el | 26 ++++++++++-----
test/lisp/cus-edit-tests.el | 80 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 108 insertions(+), 8 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index a0e72bc..efec674 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -712,6 +712,16 @@ This file was a compatibility kludge which is no longer
needed.
To revert to the previous behavior,
'(setq lisp-indent-function 'lisp-indent-function)' from 'lisp-mode-hook'.
+** Customize
+
+*** Most customize commands now hide obsolete user options.
+Obsolete user options are no longer shown in the listings produced by
+the commands `customize', `customize-group', `customize-apropos' and
+`customize-changed-options'.
+
+To customize obsolete user options, use `customize-option' or
+`customize-saved'.
+
** Edebug
+++
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index d1077d3..b46be39 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -1298,7 +1298,8 @@ that were added or redefined since that version."
(if (custom-facep symbol)
(push (list symbol 'custom-face) found)))))))
(if found
- (custom-buffer-create (custom-sort-items found t 'first)
+ (custom-buffer-create (custom--filter-obsolete-variables
+ (custom-sort-items found t 'first))
"*Customize Changed Options*")
(user-error "No user option defaults have been changed since Emacs %s"
since-version))))
@@ -1504,7 +1505,8 @@ If TYPE is `groups', include only groups."
(symbol-name type))
pattern))
(custom-buffer-create
- (custom-sort-items found t custom-buffer-order-groups)
+ (custom--filter-obsolete-variables
+ (custom-sort-items found t custom-buffer-order-groups))
"*Customize Apropos*")))
;;;###autoload
@@ -4232,6 +4234,13 @@ and so forth. The remaining group tags are shown with
`custom-group-tag'."
(insert "--------")))
(widget-default-create widget))
+(defun custom--filter-obsolete-variables (items)
+ "Filter obsolete variables from ITEMS."
+ (seq-remove (lambda (item)
+ (and (eq (nth 1 item) 'custom-variable)
+ (get (nth 0 item) 'byte-obsolete-variable)))
+ items))
+
(defun custom-group-members (symbol groups-only)
"Return SYMBOL's custom group members.
If GROUPS-ONLY is non-nil, return only those members that are groups."
@@ -4437,12 +4446,13 @@ This works for both graphical and text displays."
?\s))
;; Members.
(message "Creating group...")
- (let* ((members (custom-sort-items
- members
- ;; Never sort the top-level custom group.
- (unless (eq symbol 'emacs)
- custom-buffer-sort-alphabetically)
- custom-buffer-order-groups))
+ (let* ((members (custom--filter-obsolete-variables
+ (custom-sort-items
+ members
+ ;; Never sort the top-level custom group.
+ (unless (eq symbol 'emacs)
+ custom-buffer-sort-alphabetically)
+ custom-buffer-order-groups)))
(prefixes (widget-get widget :custom-prefixes))
(custom-prefix-list (custom-prefix-add symbol prefixes))
(have-subtitle (and (not (eq symbol 'emacs))
diff --git a/test/lisp/cus-edit-tests.el b/test/lisp/cus-edit-tests.el
new file mode 100644
index 0000000..4d148b4
--- /dev/null
+++ b/test/lisp/cus-edit-tests.el
@@ -0,0 +1,80 @@
+;;; cus-edit-tests.el --- Tests for cus-edit.el -*- lexical-binding: t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'ert-x)
+(require 'cus-edit)
+
+(defmacro with-cus-edit-test (buffer &rest body)
+ (declare (indent 1))
+ `(save-window-excursion
+ (unwind-protect
+ (progn ,@body)
+ (when-let ((buf (get-buffer ,buffer)))
+ (kill-buffer buf)))))
+
+
+;;;; showing/hiding obsolete options
+
+(defgroup cus-edit-tests nil "test"
+ :group 'test-group)
+
+(defcustom cus-edit-tests--obsolete-option-tag nil
+ "This should never be removed; it is obsolete for testing purposes."
+ :type 'boolean
+ :version "917.10") ; a super high version number
+(make-obsolete-variable 'cus-edit-tests--obsolete-option-tag nil "X.X-test")
+(defconst cus-edit-tests--obsolete-option-tag
+ (custom-unlispify-tag-name 'cus-edit-tests--obsolete-option-tag))
+
+(ert-deftest cus-edit-tests-customize-apropos/hide-obsolete ()
+ (with-cus-edit-test "*Customize Apropos*"
+ (customize-apropos "cus-edit-tests")
+ (should-not (search-forward cus-edit-tests--obsolete-option-tag nil t))))
+
+(ert-deftest cus-edit-tests-customize-changed-options/hide-obsolete ()
+ (with-cus-edit-test "*Customize Changed Options*"
+ (customize-changed-options "917.2") ; some future version
+ (should-not (search-forward cus-edit-tests--obsolete-option-tag nil t))))
+
+(ert-deftest cus-edit-tests-customize-group/hide-obsolete ()
+ "Check that obsolete variables do not show up."
+ (with-cus-edit-test "*Customize Group: Cus Edit Tests*"
+ (customize-group 'cus-edit-tests)
+ (should-not (search-forward cus-edit-tests--obsolete-option-tag nil t))))
+
+(ert-deftest cus-edit-tests-customize-option/show-obsolete ()
+ (with-cus-edit-test "*Customize Option: Cus Edit Tests Obsolete Option Tag*"
+ (customize-option 'cus-edit-tests--obsolete-option-tag)
+ (goto-char (point-min))
+ (should (search-forward cus-edit-tests--obsolete-option-tag nil t))))
+
+(ert-deftest cus-edit-tests-customize-saved/show-obsolete ()
+ ;; FIXME: How to test for saved options?
+ :expected-result :failed
+ (with-cus-edit-test "*Customize Saved*"
+ (customize-saved)
+ (should (search-forward cus-edit-tests--obsolete-option-tag nil t))))
+
+(provide 'cus-edit-tests)
+;;; cus-edit-tests.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master b4b1bd6: Hide obsolete options in most customize commands,
Stefan Kangas <=