From 58b144a805dd46b26db4fa266ac124af3146448e Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sat, 24 Oct 2020 19:44:20 +0200 Subject: [PATCH] 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(-) create mode 100644 test/lisp/cus-edit-tests.el diff --git a/etc/NEWS b/etc/NEWS index f21c4cb02c..fa9a87d80c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -706,6 +706,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 hides 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 d1077d367d..b46be39e38 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1298,7 +1298,8 @@ customize-changed-options (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 @@ customize-apropos (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 @@ custom-group-visibility-create (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 @@ custom-group-value-create ?\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 0000000000..4d148b4f41 --- /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 . + +;;; 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 -- 2.29.2