emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/compat c81333a6b0 30/84: Merge branch 'master' into ema


From: ELPA Syncer
Subject: [elpa] externals/compat c81333a6b0 30/84: Merge branch 'master' into emacs-29.1
Date: Tue, 3 Jan 2023 08:57:33 -0500 (EST)

branch: externals/compat
commit c81333a6b040893cfa245b4ba3b84dae15829771
Merge: 8d17ffdd88 46b44c3be1
Author: Philip Kaludercic <philipk@posteo.net>
Commit: Philip Kaludercic <philipk@posteo.net>

    Merge branch 'master' into emacs-29.1
---
 README.md       | 97 +++++++++++++++++----------------------------------------
 compat-24.el    | 33 ++------------------
 compat-25.el    |  2 ++
 compat-26.el    |  2 ++
 compat-27.el    | 25 +++++++++++++++
 compat-28.el    |  2 ++
 compat-macs.el  | 31 +++++++-----------
 compat-tests.el | 40 +++++++++++++++---------
 compat.el       |  7 +++--
 compat.texi     | 15 +++++++--
 10 files changed, 117 insertions(+), 137 deletions(-)

diff --git a/README.md b/README.md
index 9666e3999a..ec9ca086cb 100644
--- a/README.md
+++ b/README.md
@@ -4,79 +4,41 @@ COMPATibility Library for Emacs
 Find here the source for compat.el, a forwards-compatibility library
 for (GNU) Emacs Lisp, versions 24.3 and newer.
 
-The intended audience of this library aren't day-to-day users, but
-package developers that wish to make use of newer functionality, not
-provided in older versions of Emacs, without breaking compatibility
-for users bound to specific Emacs releases.
-
-Version 24.3 is chosen as the oldest version, because this is the
-newest version on CentOS 7. It is intended to preserve compatibility
-for at least as the CentOS 7 reaches [EOL], 2024.
-
-If you are developing a package with compat.el in mind, consider
-loading `compat-help` (on your system, not in a package) to get
-relevant notes inserted into the help buffers of functions that are
-implemented or advised in compat.el.
-
-Note that compat.el provides a few prefixed function, ie. functions
-with a `compat-` prefix.  These are used to provide extended
-functionality for commands that are already defined (`sort`, `assoc`,
-...).  It might be possible to transform these into advised functions
-later on, so that the modified functionality is accessible without a
-prefix.  Feedback on this point is appreciated.
-
-Installation
-------------
-
-compat.el shouldn't be installed directly, but downloaded from [GNU
-ELPA].  If necessary, this can be done using M-x package-install-file
-in the current working directory.
-
-Usage
------
-
-The intended use-case for this library is for package developers to
-add as a dependency in the header:
-
-    ;; Package-Requires: ((emacs "24.3") (compat "28.1.2.0"))
-
-and later on a
+For information on how to use Compat, please consult the [manual].
+The latest state of development can be found in the [snapshot
+version].
 
-       (require 'compat)
-
-This will load all non-prefixed definitions (functions and macros with
-a leading `compat-`).  To load these, an additional
-
-       (require 'compat-XY) ; e.g. 26
-
-will be necessary, to load compatibility code for Emacs version XY.
-
-It is recommended to subscribe to the [compat-announce] mailing list
-to be notified when new versions are released or relevant changes are
-made.
+[manual]: https://elpa.gnu.org/packages/doc/compat.html
+[snapshot version]: https://elpa.gnu.org/devel/doc/compat.html
 
 Contribute
 ----------
 
-As compat.el is distribed as part of GNU ELPA, and therefore requires
-a [copyright assignment] to the FSF, for all non-trivial code
+As compat.el is distribed as part of [GNU ELPA], and therefore
+requires a [copyright assignment] to the [FSF], for all non-trivial code
 contributions.
 
+[GNU ELPA]: http://elpa.gnu.org/packages/compat.html
+[copyright assignment]: 
https://www.gnu.org/software/emacs/manual/html_node/emacs/Copyright-Assignment.html
+[FSF]: https://www.fsf.org/
+
 Source code
 -----------
 
 Compat is developed on [SourceHut]. A restricted [GitHub] mirror is
 also provided.
 
+[SourceHut]: https://sr.ht/~pkal/compat
+[GitHub]: https://github.com/phikal/compat.el
+
 Bug and patches
 ---------------
 
-Patches and comments can be sent to the [development mailing
-list][compat-devel].  Bug reports and issues should be directed to the
-[issue tracker][compat-tracker] (also accessible via
-[Email][compat-tracker-mailto]).  [GitHub] can also be used to submit
-patches ("Pull Request").  These may include issues in the
-compatibility code, missing definitions or performance issues.
+Patches and comments can be sent to the [development mailing list].
+Bug reports and issues should be directed to the [issue tracker] (also
+accessible via [email]).  [GitHub] can also be used to submit patches
+("Pull Request").  These may include issues in the compatibility code,
+missing definitions or performance issues.
 
 When contributing, make sure to provide test and use the existing
 tests defined in compat-test.el.  These can be easily executed using
@@ -84,18 +46,17 @@ the bundled Makefile:
 
     make test
 
+[development mailing list]: https://lists.sr.ht/~pkal/compat-devel
+[issue tracker]: https://todo.sr.ht/~pkal/compat
+[email]: mailto:~pkal/compat@todo.sr.ht
+
 Distribution
 ------------
 
-compat.el and all other files in this directory are distributed under
-the GPL, Version 3 (like Emacs itself).
+compat.el and all other source files in this directory are distributed
+under the [GNU Public License], Version 3 (like Emacs itself).  The manual
+(`compat.texi`) is distributed under the [GNU Free Documentation
+License], Version 1.3.
 
-[EOL]: https://wiki.centos.org/About/Product
-[GNU ELPA]: http://elpa.gnu.org/packages/compat.html
-[copyright assignment]: 
https://www.gnu.org/software/emacs/manual/html_node/emacs/Copyright-Assignment.html
-[SourceHut]: https://sr.ht/~pkal/compat
-[GitHub]: https://github.com/phikal/compat.el
-[compat-announce]: https://lists.sr.ht/~pkal/compat-announce
-[compat-devel]: https://lists.sr.ht/~pkal/compat-devel
-[compat-tracker]: https://todo.sr.ht/~pkal/compat
-[compat-tracker-mailto]: mailto:~pkal/compat@todo.sr.ht
+[GNU Public License]: https://www.gnu.org/licenses/gpl-3.0.en.html
+[GNU Free Documentation License]: https://www.gnu.org/licenses/fdl-1.3.html
diff --git a/compat-24.el b/compat-24.el
index f208ae7bd8..8e0fd93e92 100644
--- a/compat-24.el
+++ b/compat-24.el
@@ -39,11 +39,12 @@
 
 (eval-when-compile (require 'compat-macs))
 
+(compat-declare-version "24.4")
+
 ;;;; Defined in data.c
 
 (compat-defun = (number-or-marker &rest numbers-or-markers)
   "Handle multiple arguments."
-  :version "24.4"
   :prefix t
   (catch 'fail
     (while numbers-or-markers
@@ -54,7 +55,6 @@
 
 (compat-defun < (number-or-marker &rest numbers-or-markers)
   "Handle multiple arguments."
-  :version "24.4"
   :prefix t
   (catch 'fail
     (while numbers-or-markers
@@ -65,7 +65,6 @@
 
 (compat-defun > (number-or-marker &rest numbers-or-markers)
   "Handle multiple arguments."
-  :version "24.4"
   :prefix t
   (catch 'fail
     (while numbers-or-markers
@@ -76,7 +75,6 @@
 
 (compat-defun <= (number-or-marker &rest numbers-or-markers)
   "Handle multiple arguments."
-  :version "24.4"
   :prefix t
   (catch 'fail
     (while numbers-or-markers
@@ -87,7 +85,6 @@
 
 (compat-defun >= (number-or-marker &rest numbers-or-markers)
   "Handle multiple arguments."
-  :version "24.4"
   :prefix t
   (catch 'fail
     (while numbers-or-markers
@@ -100,7 +97,6 @@
 If optional third argument C is given, store result into C.
 A, B, and C must be bool vectors of the same length.
 Return the destination vector if it changed or nil otherwise."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (unless (bool-vector-p b)
@@ -124,7 +120,6 @@ Return the destination vector if it changed or nil 
otherwise."
 If optional third argument C is given, store result into C.
 A, B, and C must be bool vectors of the same length.
 Return the destination vector if it changed or nil otherwise."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (unless (bool-vector-p b)
@@ -148,7 +143,6 @@ Return the destination vector if it changed or nil 
otherwise."
 If optional third argument C is given, store result into C.
 A, B, and C must be bool vectors of the same length.
 Return the destination vector if it changed or nil otherwise."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (unless (bool-vector-p b)
@@ -172,7 +166,6 @@ Return the destination vector if it changed or nil 
otherwise."
 If optional third argument C is given, store result into C.
 A, B, and C must be bool vectors of the same length.
 Return the destination vector if it changed or nil otherwise."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (unless (bool-vector-p b)
@@ -196,7 +189,6 @@ Return the destination vector if it changed or nil 
otherwise."
 If optional second argument B is given, store result into B.
 A and B must be bool vectors of the same length.
 Return the destination vector."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (unless (or (null b) (bool-vector-p b))
@@ -211,7 +203,6 @@ Return the destination vector."
 (compat-defun bool-vector-subsetp (a b)
   "Return t if every t value in A is also t in B, nil otherwise.
 A and B must be bool vectors of the same length."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (unless (bool-vector-p b)
@@ -227,7 +218,6 @@ A and B must be bool vectors of the same length."
 (compat-defun bool-vector-count-consecutive (a b i)
   "Count how many consecutive elements in A equal B starting at I.
 A is a bool vector, B is t or nil, and I is an index into A."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (setq b (and b t))                    ;normalise to nil or t
@@ -242,7 +232,6 @@ A is a bool vector, B is t or nil, and I is an index into 
A."
   "Count how many elements in A are t.
 A is a bool vector.  To count A's nil elements, subtract the
 return value from A's length."
-  :version "24.4"
   (unless (bool-vector-p a)
     (signal 'wrong-type-argument (list 'bool-vector-p a)))
   (let ((n 0))
@@ -259,7 +248,6 @@ return value from A's length."
 FILE is normally a feature name, but it can also be a file name,
 in case that file does not provide any feature.  See `eval-after-load'
 for more details about the different forms of FILE and their semantics."
-  :version "24.4"
   (declare (indent 1) (debug (form def-body)))
   ;; See https://nullprogram.com/blog/2018/02/22/ on how
   ;; `eval-after-load' is used to preserve compatibility with 24.3.
@@ -267,7 +255,6 @@ for more details about the different forms of FILE and 
their semantics."
 
 (compat-defun special-form-p (object)
   "Non-nil if and only if OBJECT is a special form."
-  :version "24.4"
   (if (and (symbolp object) (fboundp object))
       (setq object (condition-case nil
                        (indirect-function object)
@@ -276,7 +263,6 @@ for more details about the different forms of FILE and 
their semantics."
 
 (compat-defun macrop (object)
   "Non-nil if and only if OBJECT is a macro."
-  :version "24.4"
   (let ((def (condition-case nil
                  (indirect-function object)
                (void-function nil))))
@@ -288,7 +274,6 @@ for more details about the different forms of FILE and 
their semantics."
   "Return non-nil if SUFFIX is a suffix of STRING.
 If IGNORE-CASE is non-nil, the comparison is done without paying
 attention to case differences."
-  :version "24.4"
   (let ((start-pos (- (length string) (length suffix))))
     (and (>= start-pos 0)
          (eq t (compare-strings suffix nil nil
@@ -298,7 +283,6 @@ attention to case differences."
   "Extend `split-string' by a TRIM argument.
 The remaining arguments STRING, SEPARATORS and OMIT-NULLS are
 handled just as with `split-string'."
-  :version "24.4"
   :prefix t
   (let* ((token (split-string string separators omit-nulls))
          (trimmed (if trim
@@ -317,7 +301,6 @@ handled just as with `split-string'."
   "Destructively remove `equal' consecutive duplicates from LIST.
 First and last elements are considered consecutive if CIRCULAR is
 non-nil."
-  :version "24.4"
   (let ((tail list) last)
     (while (cdr tail)
       (if (equal (car tail) (cadr tail))
@@ -337,7 +320,6 @@ MESSAGE is a string that will be output to the echo area if 
such an error
 is signaled without being caught by a `condition-case'.
 PARENT is either a signal or a list of signals from which it inherits.
 Defaults to `error'."
-  :version "24.4"
   (unless parent (setq parent 'error))
   (let ((conditions
          (if (consp parent)
@@ -364,7 +346,6 @@ only need to call FUN once.  This can be useful when FUN 
performs a
 relatively slow operation, such as calling an external process.
 
 When IGNORE-CASE is non-nil, FUN is expected to be case-insensitive."
-  :version "24.4"
   (let* (last-arg last-result
          (new-fun
           (lambda (arg)
@@ -378,7 +359,6 @@ When IGNORE-CASE is non-nil, FUN is expected to be 
case-insensitive."
 ;;* UNTESTED
 (compat-defun completion-table-merge (&rest tables)
   "Create a completion table that collects completions from all TABLES."
-  :version "24.4"
   (lambda (string pred action)
     (cond
      ((null action)
@@ -406,7 +386,6 @@ When IGNORE-CASE is non-nil, FUN is expected to be 
case-insensitive."
 ;;* UNTESTED
 (compat-advise require (feature &rest args)
   "Allow for Emacs 24.x to require the inexistent FEATURE subr-x."
-  :version "24.4"
   ;; As the compatibility advise around `require` is more a hack than
   ;; of of actual value, the highlighting is suppressed.
   :no-highlight t
@@ -419,7 +398,6 @@ When IGNORE-CASE is non-nil, FUN is expected to be 
case-insensitive."
 
 (compat-defun hash-table-keys (hash-table)
   "Return a list of keys in HASH-TABLE."
-  :version "24.4"
   (let (values)
     (maphash
      (lambda (k _v) (push k values))
@@ -428,7 +406,6 @@ When IGNORE-CASE is non-nil, FUN is expected to be 
case-insensitive."
 
 (compat-defun hash-table-values (hash-table)
   "Return a list of values in HASH-TABLE."
-  :version "24.4"
   (let (values)
     (maphash
      (lambda (_k v) (push v values))
@@ -437,33 +414,28 @@ When IGNORE-CASE is non-nil, FUN is expected to be 
case-insensitive."
 
 (compat-defun string-empty-p (string)
   "Check whether STRING is empty."
-  :version "24.4"
   (string= string ""))
 
 (compat-defun string-join (strings &optional separator)
   "Join all STRINGS using SEPARATOR.
 Optional argument SEPARATOR must be a string, a vector, or a list of
 characters; nil stands for the empty string."
-  :version "24.4"
   (mapconcat #'identity strings separator))
 
 (compat-defun string-blank-p (string)
   "Check whether STRING is either empty or only whitespace.
 The following characters count as whitespace here: space, tab, newline and
 carriage return."
-  :version "24.4"
   (string-match-p "\\`[ \t\n\r]*\\'" string))
 
 (compat-defun string-remove-prefix (prefix string)
   "Remove PREFIX from STRING if present."
-  :version "24.4"
   (if (string-prefix-p prefix string)
       (substring string (length prefix))
     string))
 
 (compat-defun string-remove-suffix (suffix string)
   "Remove SUFFIX from STRING if present."
-  :version "24.4"
   (if (string-suffix-p suffix string)
       (substring string 0 (- (length string) (length suffix)))
     string))
@@ -496,7 +468,6 @@ The optional argument SPEC-TYPE determines which spec to 
set:
     and `face-override-spec' specs;
 Any other value means not to set any spec, but to run the
 function for defining FACE and recalculating its attributes."
-  :version "24.4"
   (if (get face 'face-alias)
       (setq face (get face 'face-alias)))
   ;; Save SPEC to the relevant symbol property.
diff --git a/compat-25.el b/compat-25.el
index eb9d0a8b8f..60f365ba68 100644
--- a/compat-25.el
+++ b/compat-25.el
@@ -34,6 +34,8 @@
 
 (eval-when-compile (require 'compat-macs))
 
+(compat-declare-version "25.1")
+
 ;;;; Defined in alloc.c
 
 (compat-defun bool-vector (&rest objects)
diff --git a/compat-26.el b/compat-26.el
index 76087b8066..f712d24e76 100644
--- a/compat-26.el
+++ b/compat-26.el
@@ -40,6 +40,8 @@
 (eval-when-compile (require 'compat-macs))
 (declare-function compat-func-arity "compat" (func))
 
+(compat-declare-version "26.1")
+
 ;;;; Defined in eval.c
 
 (compat-defun func-arity (func)
diff --git a/compat-27.el b/compat-27.el
index a5eb72e36a..99a1d33d83 100644
--- a/compat-27.el
+++ b/compat-27.el
@@ -41,6 +41,8 @@
 
 (eval-when-compile (require 'compat-macs))
 
+(compat-declare-version "27.1")
+
 ;;;; Defined in fns.c
 
 (compat-defun proper-list-p (object)
@@ -397,6 +399,29 @@ where USER is a valid login name."
               body)))
     (cons 'progn (nreverse body))))
 
+(compat-defun provided-mode-derived-p (mode &rest modes)
+  "Non-nil if MODE is derived from one of MODES.
+Uses the `derived-mode-parent' property of the symbol to trace backwards.
+If you just want to check `major-mode', use `derived-mode-p'."
+  :realname compat--provided-mode-derived-p
+  ;; If MODE is an alias, then look up the real mode function first.
+  (when-let ((alias (symbol-function mode)))
+    (when (symbolp alias)
+      (setq mode alias)))
+  (while
+      (and
+       (not (memq mode modes))
+       (let* ((parent (get mode 'derived-mode-parent))
+              (parentfn (symbol-function parent)))
+         (setq mode (if (and parentfn (symbolp parentfn)) parentfn parent)))))
+  mode)
+
+;;* UNTESTED
+(defun derived-mode-p (&rest modes)
+  "Non-nil if the current major mode is derived from one of MODES.
+Uses the `derived-mode-parent' property of the symbol to trace backwards."
+  (apply #'compat--provided-mode-derived-p major-mode modes))
+
 ;;* UNTESTED
 (compat-defmacro ignore-error (condition &rest body)
   "Execute BODY; if the error CONDITION occurs, return nil.
diff --git a/compat-28.el b/compat-28.el
index 1b1d6de3d5..1cb3879acb 100644
--- a/compat-28.el
+++ b/compat-28.el
@@ -41,6 +41,8 @@
 
 (eval-when-compile (require 'compat-macs))
 
+(compat-declare-version "28.1")
+
 ;;;; Defined in fns.c
 
 ;;* INCOMPLETE FEATURE: Should handle multibyte regular expressions
diff --git a/compat-macs.el b/compat-macs.el
index f661fd1158..fa0f6ea74a 100644
--- a/compat-macs.el
+++ b/compat-macs.el
@@ -40,6 +40,16 @@ is loaded (in this case `compat-26').")
   `(unless (bound-and-true-p compat--inhibit-prefixed)
      ,@body))
 
+(defvar compat-current-version nil
+  "Default version to use when no explicit version was given.")
+
+(defmacro compat-declare-version (version)
+  "Set the Emacs version that is currently being handled to VERSION."
+  ;; FIXME: Avoid setting the version for any definition that might
+  ;; follow, but try to restrict it to the current file/buffer.
+  (setq compat-current-version version)
+  nil)
+
 (defvar compat--generate-function #'compat--generate-default
   "Function used to generate compatibility code.
 The function must take six arguments: NAME, DEF-FN, INSTALL-FN,
@@ -93,25 +103,8 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
          (max-version (plist-get attr :max-version))
          (feature (plist-get attr :feature))
          (cond (plist-get attr :cond))
-         (version
-          ;; If you edit this, also edit `compat--generate-testable' in
-          ;; `compat-tests.el'.
-          (or (plist-get attr :version)
-              (let* ((file (car (last current-load-list)))
-                     (file (if (stringp file)
-                               ;; Some library, which requires compat-XY.el,
-                               ;; is being compiled and compat-XY.el has not
-                               ;; been compiled yet.
-                               file
-                             ;; compat-XY.el is being compiled.
-                             (or (bound-and-true-p byte-compile-current-file)
-                                 ;; Fallback to the buffer being evaluated.
-                                 (buffer-file-name)))))
-                (if (and file
-                         (string-match
-                          "compat-\\([[:digit:]]+\\)\\.\\(?:elc?\\)\\'" file))
-                    (concat (match-string 1 file) ".1")
-                  (error "BUG: No version number could be extracted")))))
+         (version (or (plist-get attr :version)
+                      compat-current-version))
          (realname (or (plist-get attr :realname)
                        (intern (format "compat--%S" name))))
          (check (cond
diff --git a/compat-tests.el b/compat-tests.el
index e88092312d..db9a0e76d7 100644
--- a/compat-tests.el
+++ b/compat-tests.el
@@ -36,6 +36,7 @@
 
 (require 'compat-macs)
 
+(defvar compat-current-version)
 (defun compat--generate-testable (name def-fn install-fn check-fn attr type)
   "Generate a more verbose compatibility definition, fit for testing.
 See `compat-generate-function' for details on the arguments NAME,
@@ -44,20 +45,8 @@ DEF-FN, INSTALL-FN, CHECK-FN, ATTR and TYPE."
          (max-version (plist-get attr :max-version))
          (feature (plist-get attr :feature))
          (cond (plist-get attr :cond))
-         (version
-          ;; If you edit this, also edit `compat--generate-default' in
-          ;; compat-macs.el.
-          (or (plist-get attr :version)
-              (let* ((file (car (last current-load-list)))
-                     (file (if (stringp file)
-                               file
-                             (or (bound-and-true-p byte-compile-current-file)
-                                 (buffer-file-name)))))
-                (if (and file
-                         (string-match
-                          "compat-\\([[:digit:]]+\\)\\.\\(?:elc?\\)\\'" file))
-                    (concat (match-string 1 file) ".1")
-                  (error "BUG: No version number could be extracted")))))
+         (version (or (plist-get attr :version)
+                      compat-current-version))
          (realname (or (plist-get attr :realname)
                        (intern (format "compat--%S" name))))
          (body `(progn
@@ -2016,6 +2005,29 @@ being compared against."
   (ought t "~root/")
   (ought t "~root/file"))
 
+(let ((one (make-symbol "1"))
+      (two (make-symbol "2"))
+      (three (make-symbol "3"))
+      (one.5 (make-symbol "1.5"))
+      (eins (make-symbol "𝟙")))
+  (put two 'derived-mode-parent one)
+  (put one.5 'derived-mode-parent one)
+  (put three 'derived-mode-parent two)
+  (compat-deftests provided-mode-derived-p
+    (ought one one one)
+    (ought one two one)
+    (ought one three one)
+    (ought nil one eins)
+    (ought nil two eins)
+    (ought nil two one.5)
+    (ought one two one.5 one)
+    (ought two two one.5 two)
+    (ought one three one.5 one)
+    (ought two three one.5 one two)
+    (ought two three one.5 two one)
+    (ought three three one.5 two one three)
+    (ought three three one.5 three two one)))
+
 (compat-deftests file-parent-directory        ;assuming unix
   (ought nil "/")
   (ought "/" "/dir")
diff --git a/compat.el b/compat.el
index 6cfa80bd77..0b28ff05e2 100644
--- a/compat.el
+++ b/compat.el
@@ -33,9 +33,10 @@
 ;;
 ;; Not every function provided in newer versions of Emacs is provided
 ;; here.  Some depend on new features from the core, others cannot be
-;; implemented to a meaningful degree.  The main audience for this
-;; library are not regular users, but package maintainers.  Therefore
-;; commands and user options are usually not implemented here.
+;; implemented to a meaningful degree.  Please consult the Compat
+;; manual for details.  The main audience for this library are not
+;; regular users, but package maintainers.  Therefore commands and
+;; user options are usually not implemented here.
 
 ;;; Code:
 
diff --git a/compat.texi b/compat.texi
index 064533a3f2..7e057ff283 100644
--- a/compat.texi
+++ b/compat.texi
@@ -750,8 +750,6 @@ The @code{define-inline} functionality.
 The functions @code{string-collate-lessp} and
 @code{string-collate-equalp}.
 @item
-Support for @code{alist-get} as a generalised variable.
-@item
 The function @code{funcall-interactivly}.
 @item
 The function @code{buffer-substring-with-bidi-context}.
@@ -1471,6 +1469,19 @@ of @env{PATH} can lead to confusing results.
 @xref{Subprocess Creation,,,elisp}.
 @end defopt
 
+@c based on lisp/modes.el
+@defun provided-mode-derived-p mode &rest modes
+This function returns non-@code{nil} if @var{mode} is derived from any
+of the major modes given by the symbols @var{modes}.
+@end defun
+
+@defun derived-mode-p &rest modes
+This function returns non-@code{nil} if the current major mode is
+derived from any of the major modes given by the symbols @var{modes}.
+
+@xref{Derived Modes,,,elisp}.
+@end defun
+
 @subsection Prefixed Definitions
 These functions are prefixed with @code{compat} prefix, and are only
 loaded when @code{compat-27} is required:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]